Как спроэктировать схему бд для «пользователи, тариф. планы, заказы»?
Есть пользователи, есть тарифные планы. Есть заказы, в заказ мы кладем тарифный план. Тарифный план может быть иметь разную продолжительность -- месяц, 2, год и т.п.
Также, заказ может быть оплачен, неоплачен, отменен...
Мне интересно, как мне рассчитать баланс пользователя? Он -- поле баланс в таблице "пользователь" -- вообще нужен? Или лучше взять все заказы пользователя, взять из них только оплаченные и отнять от них цены за тарифные планы, которые купил этот пользователь? Что-то как-то сложно?
Ничего не нашел в гугл. Как лучше вообще все это спроектировать?
Если есть баланс- значит операции в две стороны, а значит кроме заказов есть еще и оплаты. И вообще заказ, оказанная услуга и платеж три разных сущности. А потом еще появиться что-нибудь. Так что лучше создайте таблицу (например:сущность,дата, +/-сумма), чтобы потом не умирать над мегаалгортимом расчета баланса.
Время рассудит, но я считаю модель не соответствует предметной области. В существующем проекте GROUP BY с фильтром по статусу заказа условно отвечает на вопрос баланса пользователя.