SQL Server は、あるテーブル内のレコードの存在には別のテーブル内の対応するレコードが必ず必要となる、真の 1 対 1 のリレーションシップを直接サポートしていません。 これは、データベースの制約によって、論理的な矛盾が生じずにこのような厳格な要件を強制することができないためです。 このシナリオの理由と効果的な管理方法を見てみましょう。
外部キーによってリンクされた国と首都のテーブルを考えてみましょう。 これは真の 1 対 1 の関係ではなく、1 対 0 または 1 (1 対 0..1) の関係です。国の記録は本質的に首都の記録を必要とするものではありません。
この制限に対処するためのいくつかのアプローチを次に示します。
データの統合: 最も簡単な解決策は、多くの場合、国と首都のデータを 1 つのテーブルに結合することです。これにより、1 対 1 の関係が完全に不要になります。
ロジックによる制約の強制: アプリケーション レベルのロジック (アプリケーション コードまたはデータベース トリガー内) を実装して、一方のテーブルへの挿入が、対応するレコードが他方のテーブルに存在する場合にのみ行われるようにします。 このアプローチでは複雑さが増しますが、強制力はより強力になります。
1 対 0 または 1 の現実を受け入れる: 望ましい「1 対 1」は実際には 1 対 0..1 の関係であることを認めます。これにより、実際のデータベースの制約が明確になり、設計が簡素化されます。
古典的な「鶏と卵」のたとえは、問題を浮き彫りにしています。鶏と卵のレコードを許可する前に両方のレコードを要求すると、解決できない循環依存関係が作成されます。
真の 1 対 1 の関係は直接サポートされていませんが、SQL Server は 1 対 0..1 の関係を容易に処理します。 たとえば、Customer テーブル (主キー) は、Address テーブル (Customer の主キーを参照する外部キー) と 1 対 0..1 の関係を持つことができます。 これにより、住所のない顧客、または対応する顧客のない住所が許可されます。
さらに、Entity Framework 5.0 以降のバージョンでは、依存プロパティを必須としてマークする機能が提供されます。これにより、null 非許容の関係を強制し、依存エンティティがその親なしでは存在できないようにすることができます。 これにより、アプリケーション フレームワーク内でより高いレベルの制約が適用されます。
以上がSQL Server で 1 対 1 の関係を効果的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。