次の例に示すように、is-a 関係を表す明確な方法があるかどうか疑問に思っていました。
このDBには、映画、ゲーム番組、ドラマの3種類の番組の録画時間が格納されています。オブジェクト指向の意味では、これらのそれぞれがプログラムです。これらのサブクラスには、それぞれ異なるプロパティがあります。テーブルは次のとおりです (fk プレフィックスは外部キーを示します)。
ムービー
ID
名
fkDirector
gameShow
ID
名
fkHost
fkContestant
ドラマ
ID
名
OO 用語では、レコード テーブルは次のようになります。
record
id
fkProgram
startTime
endTime
通常の形式に違反せずにこれを行う唯一の方法は、 recordMovie、recordGameShow、およびrecordDramaという 3 つのレコード テーブルを用意することです。
データベースの正規化の原則に違反することなく、これらのテーブルを 1 つに統合する方法はありますか?
アイデアを説明するために、いくつかの動作しない例を次に示します。
番組
ID
fkMovie
fkGameShow
fkDrama
このテーブルには null が含まれるため、第 1 正規形に違反します。行ごとに、3 つのエントリのうちの 1 つだけが非 null になります。
program
id
fkSpecific ← fkMovie または fkGameShow または fkDrama
fkType ← 調べるテーブルを示します
ここでは、fkSpecific が 3 つのテーブルのいずれかを指す可能性があるため、参照整合性を強制することはできません。
ここにテーブルを 1 つではなく 3 つ持つことによるオーバーヘッドを節約しようとしています。おそらく、これは単に RDB には当てはまりません。