Задать вопрос
@gomerIT

Как правильно реализовать структуру БД, где пользователь имеет несколько балансов?

я вижу 2 варианта
1.
balances
id userId balanceOne balanceTwo ...

2.
balances
id name

user_balances
id userId balanceId value
1      1           1            0
2      1           2            100
3      1           3            99

Мне проще работать с 1-ым вариантом, потому что нет доп.запросов, но с точки зрения клиентской части я не знаю, как будет проще для них составлять запросы на получение данных/взаимодействия. Будут отправлять они id-ик или просто строку по которому я вытащу значение. Я не начал еще работу и обдумываю все проблемы/сложности, которые могут появиться. Возможно кто-то делал подобные вещи и может подсказать решение.
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@oleg_ods
Второй вариант однозначно. Про первый забудь как про страшный сон.
Ответ написан
@rPman
Оба варианты могут быть выбраны.
Второй вариант идеологически верный, он в каком то смысле проще (хотя как знать), ожидается большинством разработчиков, которые будут ковырять ваш код а так же применимы к любым ОРМ библиотекам.

Но если идеологически, разные балансы - это разные типы объектов, а не просто много одинаковых (грубый пример балансы в разных платежных системах, или балансы в разных валютах, против несколько кошельков с одной и той же валютой), особенно если справочник типов будет меняться редко (кстати не такая уж это и проблема), то первый подход - оправдан.

Первый подход сильно сложнее, так как подразумевает механизмы генерации sql запросов на основе действий из пользовательского интерфейса, когда как второй позволяет фиксировать структуру запросов (это упрощает отладку, минимизирует количество ошибок). Кстати первый подход даст меньше нагрузку на базу данных, но мне кажется незначительную, ведь вместо работы с двумя таблицами и набором индексов, будет использоваться одна, так как при работе еще до запроса известно, в какой колонке будет искомый баланс.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы