4

У нас есть биллинговая система, в которой мы обрабатываем индивидуальные платежи, а также повторяющиеся платежи (подписки).Дизайн базы данных для обработки индивидуальных и постоянных платежей

Есть два SQL таблицы:

StandardCharges 
RecurringCharges 

StandardCharges таблица содержит отдельные предметы, приобретенные клиентами в течение месяца.

В таблице повторяющихся таблиц хранятся повторяющиеся предметы с платой за день. Когда наступит время, наша система автоматически создает запрос recur, который добавляет строку в таблицу StandardCharges и увеличивает плату за день до следующего месяца в таблице RecurringCharges.

В конце каждого месяца мы получаем общие значения для каждого клиента из таблицы StandardCharges и создаем счет-фактуру.

Есть ли какой-то дизайн или другой способ сделать это? Это правильный дизайн базы данных? В идеале, я хотел бы взять все расходы в одном столе Charges и управлять периодическими платежами там же?

Thanks

+0

ум дает больше контекста того, что вы моделируете? – user1494736

ответ

2

Я подозреваю, что ваш дизайн действительно правильный.

Если вы думаете о данных в реальных условиях, нет смысла иметь «возможные» транзакции (IE, транзакции, которые еще не произошли и могут не материализоваться, возможно, потому, что клиент превысил их кредитный лимит), смешанные с совершенные и фактические транзакции.

Объединение данных в одну таблицу также может затруднить отчетность, поскольку вам необходимо применять специальные критерии фильтрации и хранить дополнительные метаданные - например TransactionCompleted и TransactionIsFutureCharge.

Если бы я должен был сделать предложение было бы переименования StandardCharges к чему-то ближе к данным он держит как CompletedTransactions и RecurringTransactions что-то вроде PendingTransactions.

+1

Я голосую за второе имя таблицы и меняю первый, как было предложено. – ErikE

+0

@ErikE, я работал над именем, но думал, что ожидающие транзакции обеспечили большую гибкость с точки зрения именования (Future, Recurring, OnEvent и т. Д.) Только за повторяющиеся платежи. Трудно сказать в любом случае, не имея больше контекста. – Kane

+1

Ожидание подразумевает одну строку за плату и не нуждается в повторной информации. Это шаблон, а не фактический заряд, просто ожидающий. – ErikE

0

Текущий дизайн кажется мне разумным. Но если вы хотите объединить две таблицы, вы можете просто добавить столбец BIT с именем IsRecurring или IsFuture или IsScheduled или все, что вы хотите использовать, чтобы назначить обвинения, которые иначе были бы в RecurringCharges. Затем, когда ваш срок истекает с периодической оплатой, вы просто вставляете в ту же таблицу вместо другой таблицы. Что касается счета-фактуры, вы просто добавили условие к запросу, чтобы отфильтровать расходы, которые имеют набор столбцов BIT.

+0

Я не согласен с тем, что они могут обоснованно находиться в одной таблице. Это усложняет вещи ** без уважительной причины. – ErikE

Смежные вопросы