MS SQL Server での 1 対 1 の継承のモデル化
リレーショナル データベースの設計には、共通の祖先から継承するさまざまなオブジェクト タイプを表すテーブル間の 1 対 1 の関係が必要なシナリオが含まれることがよくあります。 この継承パターンには特有の課題があります。 Inventory
テーブル、Storage
テーブル、および Van
のサブクラスとしての Warehouse
テーブルと Storage
テーブルを使用した例を考えてみましょう。 目標は、Storage
とそのサブクラスの間に 1 対 1 のリンクを確立することです。
いくつかの継承モデリング戦略が存在します。
制約強制の課題
データの整合性を維持するには、制約を適用する必要があります:
Storage
レコードは Van
と Warehouse
の両方に同時にリンクできません。Storage
レコードが必要です。MS SQL Server には遅延制約のサポートがないため、排他性と参照整合性の両方を同時に直接適用することができません。 回避策が必要です。
回避策: ストアド プロシージャとトリガー
制約に依存する代わりに、ストアド プロシージャとトリガーを利用してデータ変更を管理します。 これらの手順では、変更を許可する前に操作を検証し、排他性と存在性を確保します。 このアプローチは堅牢な制御を提供しますが、複雑さが増します。
代替: 計算列
より単純ではありますが、包括的ではありませんが、計算列を使用するソリューションがあります。
STORAGE_TYPE
と Storage
を区別するために、Van
列を Warehouse
に追加します。Van
を参照する計算列を Warehouse
と STORAGE_TYPE
に作成します。これは排他性を効果的に強制しますが、参照整合性は強制しません。 アプリケーションレベルのチェックまたは追加の制約により、プレゼンスを強制できます。
結論として、1 対 1 の関係による最適な継承モデリングは、特定のニーズとデータベースの制限によって異なります。 各方法の長所と短所を慎重に比較検討し、制約と要件に最適な方法を選択します。
以上がMS SQL Server で継承モデルの 1 対 1 の関係を設計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。