リレーショナル データベースでのスーパータイプ サブタイプの設計について質問があります。2 つのサブタイプ テーブルを持つスーパータイプがある場合、2 つのサブタイプ テーブルの PK に関連するスーパータイプの PK を FK として持つことになります。私がこのようなものを持っていたとしましょう:
タイプ
タイプ ID PK
スーパータイプ
ID PK タイプID FK
サブタイプA
ID PK,FK
サブタイプB
ID PK,FK
データベース側では、特定のタイプのスーパータイプ ID が適切なサブタイプ テーブルにのみ配置されるようにするにはどうすればよいでしょうか? たとえば、タイプ A のスーパータイプ ID を SubtypeB テーブルに入れたくありません。データベース側でこれが発生するのを簡単に防ぐ方法はありますか? これはコードで処理できることはわかっていますが、コードに誤りがあった場合はどうなるでしょうか? または、サブタイプ テーブルの 1 つに間違った ID を手動で入力した場合はどうなるでしょうか。データベース側でこれを不可能にする方法を探していると思います。
何か案は?おそらく、Supertype テーブルの PK は ID と TypeID の組み合わせであり、ID 列に一意の制約があり、両方のタイプのレコードが SuperType テーブルに含まれないようにする必要があります...そして、サブタイプ テーブルにはコンボ ID と TypeID PK が含まれます。 TypeID が適切なサブタイプ テーブルに適したタイプである必要があるという制約がありますか??