Bravo や Charlieに関連しているかもしれないし、関連していないかもしれない Alpha のものを持っているとしましょう。
これらは 1 対 1 の関係です。アルファは複数のブラボーに関連付けられません。また、ブラボーが複数のアルファに関連付けられることはありません。
私はいくつかの目標を持っています:
- 習得と保守が容易なシステム。
- データベース内で実施されるデータの整合性。
- 私のデータの実世界の論理的な編成に一致するスキーマ。
- 私のプログラミング内のクラス/オブジェクトは、データベース テーブルに適切にマップされます (Linq から SQL に似ています)
- 高速な読み取りおよび書き込み操作
- スペースの有効利用 (null フィールドが少ない)
3つのアイデアがあります...
PK = primary key
FK = foreign key
NU = nullable
多くの nullalbe フィールドを持つ 1 つのテーブル (フラット ファイル)…
Alphas
--------
PK AlphaId
AlphaOne
AlphaTwo
AlphaThree
NU BravoOne
NU BravoTwo
NU BravoThree
NU CharlieOne
NU CharlieTwo
NU CharlieThree
nullalbe フィールドがゼロの多くのテーブル…
Alphas
--------
PK AlphaId
AlphaOne
AlphaTwo
AlphaThree
Bravos
--------
FK PK AlphaId
BravoOne
BravoTwo
BravoThree
Charlies
--------
FK PK AlphaId
CharlieOne
CharlieTwo
CharlieThree
両方の最良(または最悪):多くのテーブルへのnullalbe外部キーがたくさん…
Alphas
--------
PK AlphaId
AlphaOne
AlphaTwo
AlphaThree
NU FK BravoId
NU FK CharlieId
Bravos
--------
PK BravoId
BravoOne
BravoTwo
BravoThree
Charlies
--------
PK CharlieId
CharlieOne
CharlieTwo
CharlieThree
アルファがブラボーまたはチャーリーのいずれかである必要があり、両方ではない場合はどうなりますか?
ブラボーとチャーリーだけでなく、アルファがデルタ、エコー、フォックストロット、ゴルフなどのいずれかになるとしたら…?
編集:これは質問の一部です:私のナビゲーションに最適なデータベース スキーマはどれですか?