サブタイプの 1 つに属性がないスーパータイプ/サブタイプの関係があるため、これがどのようにモデル化されるかわかりません。Tracks というスーパータイプがあり、トラックは Audio 、 Video 、 Text の 3 つのサブタイプのいずれかになります。オーディオ サブタイプとビデオ サブタイプの両方に固有の属性があるため、それらを別のテーブルに配置することは理にかなっています。Text サブタイプには追加のメタデータがないため、これを別のテーブルにキャプチャする必要がありますか?
2 に答える
スーパータイプ テーブルにタイプ ディスクリミネータ1がある場合、サブタイプ テーブルはまったく必要ありません。サブタイプはタイプ ディスクリミネータによって識別され、そのすべてのフィールドはすでにベース テーブルにあります。
それ以外の場合、サブタイプ テーブルはスーパー テーブルの PK を複製するだけです (追加のフィールドはありません)。
または、継承を実装するための「同じテーブル内のすべての型」戦略を検討することもできます。
1行のタイプを識別する単純なフィールド - 通常は、「既知の」文書化されたセットから値を取得する整数 (または DBMS がサポートしている場合は列挙型) です。
tracktype というトラック テーブルに別の列を追加するだけです。この列には、オーディオ..テキストのトラックのタイプを保存します。トラック テーブルには、すべてのタイプに共通の属性を持つすべてのタイプのトラック情報が含まれている必要があり、タイプごとに個別のテーブルが必要になります。それらはすべて、他の属性を持つ独自の識別子を持ち、識別子はトラックテーブルからの主キーと外部キーの両方である必要があります。属性がないため、テキスト テーブルの作成を避けることができます。ただし、他のテーブルが特にテキスト テーブルに依存している場合は、テキスト用に別のテーブルを作成し、そのテーブルにテキスト エンティティの識別子である属性を 1 つだけ配置できます。