サブタイプでの参照整合性の実装
問題
サブタイプ構造で参照整合性を実装するために提案された解決策には、重複テーブルと追加の制約の作成が含まれます。このアプローチは、必要以上に複雑で非効率的であるように思えます。
はじめに
リレーショナル データベースに参照整合性を実装するには、リレーショナル モデルとそれに関連する標準を適切に理解する必要があります。 IDEF1X 表記は、サブタイプとその関係をモデル化するための包括的なフレームワークを提供します。
サブタイプの参照整合性の実装
サブタイプ構造には 2 つのタイプがあります。
排他的サブタイプ: この場合、各ベースタイプ行には 1 つのサブタイプ行が必要です。通常、ベースタイプには、既存のサブタイプを識別する識別子列があります。
非排他的サブタイプ: この場合、ベースタイプ行には 0 個以上のサブタイプ行を含めることができます。サブタイプの存在は、サブタイプ テーブルの存在チェックによって検証されます。
Discriminator を持つ排他的サブタイプ
Discriminator Column
- A CHECK CONSTRAINT は、識別子列の値が許容範囲内であることを保証します。
- ベースタイプの一意の PK により、ベースタイプの行が 1 つだけ存在することが保証されます。
サブタイプの参照整合性
- A FKサブタイプの制約は、 Basetype.
- UDF は、PK の存在と正しい識別子の値についてベースタイプを照会するために使用されます。
- サブタイプの CHECK CONSTRAINT は、正しいサブタイプが存在することを確認するために UDF を呼び出します。ベースタイプ用。
非排他的サブタイプ
- 識別列は必要ありません。
- サブタイプの存在は、ベースタイプ PK を使用してサブタイプ テーブルをチェックすることによって判断されます。
- PK、FK、およびサブタイプ内の range CHECK CONSTRAINTS は参照には十分です。整合性。
提案されたソリューションに対する批判
- テーブルを複製し、追加の制約を作成すると、不要なデータが肥大化して複雑さが増します。
- 提案されたソリューションは、基本型との間の参照整合性を効果的に強制します。
推奨事項
- サブタイプの参照整合性を実装するには、上記の標準 IDEF1X アプローチを使用します。
- 挿入を管理するには、ストアド プロシージャまたはトランザクションの使用を検討してください。参照情報を保持するためにベースタイプとサブタイプのテーブルを更新します。整合性。
- 認可ルールを適用し、安全な API エンドポイントを使用して、データベースの不正な変更を防ぎます。
以上が参照整合性をデータベースのサブタイプに効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。