Какой дизайн таблицы лучше для весов, которые разбиты на несколько частей? - PullRequest
2 голосов
/ 26 января 2011

У меня есть база данных, в которой баланс и платежи должны быть разбиты на различные «денежные корзины», чтобы показать, как они распределяются. Например, есть основная сумма, проценты, просроченные сборы, отсканированные сборы за чеки, разное и т. Д. Существует до 10 различных групп денег.

Какой из этих двух методов является лучшим способом создания базы данных для этого и почему?

Вариант А

PAYMENTS 
AccountId
// Other payment-related columns
TotalPaid 
PrincipalPaid
InterestPaid
MiscPaid
BadCheckChargesPaid
...

Вариант B

PAYMENTS
AccountId
// Other payment-related columns
TotalPaid

PAYMENT_DETAILS
PaymentId
PaymentTypeId
AmountPaid

В большинстве случаев используются только 1-3 различных типов баланса

Ответы [ 3 ]

4 голосов
/ 26 января 2011

Вариант B является более нормализованным, более гибким вариантом (легко добавить новое ведро позже) и получил бы мой голос.

3 голосов
/ 26 января 2011

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

2 голосов
/ 26 января 2011

Вариант Б мне кажется лучше. Решающим фактором будет то, разработано ли ваше приложение для показа таких деталей:

 Item             Amount
 --------------   ---------------
 Principal        $10.00
 Interest          $1.11

Если это так, нормализованная версия не только «правильнее», но на самом деле хранит данные в формате, более близком к тому, что требуется вашему приложению.

Для меня большой вопрос заключается в том, сохраняете ли вы сумму платежа в платежной записи или извлекаете ее из деталей.

...