Дизайн базы данных: есть ли способ улучшить этот дизайн? - PullRequest
0 голосов
/ 03 июля 2010

Простой вопрос. Ниже приведен дизайн базы данных для хранения следующих записей

account     TransactionType     TransactionName                 Amount      FeeTransactionId    TransactionId   RefTransactionId

Alex        [Deposit from]      [Credit Card x-1234]            [-100.00]               b           a   
Alex        [Deposit from]      [Credit Card Fee]               [-3.00]                             b           a
Alex        [Added funds from]  [Credit Card x-1234]            [100.00]                            c           a
Sys_        [Revenue from]      [Credit Card Deposit]           [3.00]                              d           a

дизайн

[Transaction]
Id
AccountId 
TransactionTypeId
TransactionName
Amount
FeeTransactionId
RefTransactionId

[Account]
Id
Name

[TransactionType]
Id
Name

Есть ли способ улучшитьдизайн?

Примечание: валюта и дата отсутствуют.:)

Ответы [ 2 ]

4 голосов
/ 03 июля 2010

На первый взгляд выглядит нормально.

transaction_model_02

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

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

transaction_model_03

0 голосов
/ 03 июля 2010

Дизайн в порядке.Красиво и нормализовано.Однако могут быть веские причины для дестабилизации.Обычно это связано с удобством или оптимизацией отчетности.Без более подробной информации о проекте я действительно не могу дать какие-либо рекомендации для изменений.

...