2012-03-12 8 views
2

エンティティの代替名を格納し、データをロールアップする「マスター」レコードにリンクするベストプラクティスは何でしょうか?マスター参照の「代替」名のデータベース設計

たとえば、私は企業のリストを持っています。

id name 
1 Orange Kid Industries 
2 Apple Kid Inc. 
5 O.K. 

会社5 O.K.1 Orange Kid Industriesの代替名です。これらの企業は、子レコードが1でなく5に結びついている必要がある場合(たとえば会社名が変更された場合は履歴データを保存するため)、慎重に保管する必要があります。

1 Orange Kid Industriesのすべての子を見ると、1と5の子がすべて結合されていることがわかります。5 O.K.1 Orange Kid Industriesに戻す必要があります。

すべてのレコードに必要なマスターIDに向かっています。ユーザーが新しい会社6 Moldy Orange Kid Industriesを作成した場合は、マスターIDに1を割り当てて、これが1 Orange Kid Industriesの別の名前であることを示します。

id name      master 
1 Orange Kid Industries  1 
2 Apple Kid Inc.    2 
5 O.K.      1 
6 Moldy Orange Kid Industries 1 

これは、多くの冗長データを必要とせずに最も簡単なルートのようです。このアプローチには欠点がありますか?

+0

Stack ExchangeのQ&A形式は、意見を求める質問には適していません。 [FAQ](http://stackoverflow.com/faq#dontask)を参照してください。 – Oded

答えて

1

それは私にとって良い解決策のようです。私が変えるかもしれないと思うのは、レコードがそれ自身のマスターならば、マスターをヌルにすることです。おそらく巨大な取引ではないかもしれないが、潜在的な無限ループの落とし穴のように思える。

+0

良い点。ヌルはもっと意味があると思います。 –

0

私はデータを正規化すると思います。会社マスタテーブルと会社名テーブルは、会社マスタテーブルへの外部キーを持つ会社名テーブルを終了します。私はまたnullsを避けるだろうし、nullsに基づくロジックは外部キー制約を強制する。ヌルはあなたが知らないことを意味します。

+0

マスターテーブルとネームテーブルの両方に会社名を格納することをお勧めしますか?両方のテーブルに同じ名前を付けることができますか? –

関連する問題