0

簡単な質問 - 以下は、次のレコードを保持するためのデータベース設計です

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

このデザインを改善する方法はありますか?

注:通貨と日付がありません。:)

4

2 に答える 2

4

一見、問題ないように見えます。

transaction_model_02

いくつかの検討の結果、各トランザクションは 1 つの (そして 1 つだけ) 他のトランザクションにリンクされており、そのリンクの意味はトランザクションの種類によって異なるようです。したがって、2 つの自己参照外部キーFeeTransactionIdRefTransactionID. トランザクションのタイプに応じて、これらのキーの 1 つが常に NULL になります。

外部キー列に NULL を使用することは技術的に可能ですが、推奨される方法ではない場合があります。このモデルのように、NULL を持たない自己参照外部キーを 1 つだけ持つことができます。

transaction_model_03

于 2010-07-03T17:09:16.827 に答える
0

デザインはいいです。ニースと正規化。ただし、非正規化する正当な理由がある場合もあります。通常、これらには何らかのレポートの利便性や最適化が含まれます。プロジェクトについての詳細がなければ、私は実際に変更を推奨することはできません.

于 2010-07-03T05:01:38.703 に答える