ホームページ >データベース >mysql チュートリアル >データベース設計で表間の外部キーを効果的に管理するにはどうすればよいですか?
地域、国、州の 3 つのテーブルで構成されるデータベース アーキテクチャでは、国を区別できる階層関係が存在します。地域や州内にあるものは、地域や国の中に存在する場合もあります。これは、列「region_id」と「popular_place_id」を持つ 4 番目のテーブル Popular_areas を作成しようとするときに問題を引き起こします。後者は、国または州のいずれかにある地域を参照する必要があります。
ポリモーフィック アソシエーションの概念は、このジレンマに対する潜在的な解決策として提示されます。基本的に、このアイデアには、可能なターゲット テーブルのセットから対応する ID 値を参照する外部キー列を確立することが含まれます。ただし、この戦略には、参照される値を保持するターゲット テーブルを指定する追加の列を含める必要があります。
現状では、SQL 制約は多態性関連付けの実装をサポートしていません。これは、外部キー制約によって参照が制限されているためです。単一のターゲット テーブル。 Rails や Hibernate などのフレームワークはポリモーフィック アソシエーションのサポートを提供しますが、この機能を容易にするために SQL 制約を非アクティブ化する必要があります。このような制約の代わりに、フレームワークは、外部キー値が許容されるターゲット テーブル内のエントリと一致することを検証することにより、参照整合性を確保する責任を負います。
それらの魅力にもかかわらず、ポリモーフィック アソシエーションにより、データベースの一貫性を確保する際に脆弱性が生じます。データの整合性は、参照整合性ロジックが一貫して適用され、すべてのデータベース アクセス ポイントに欠陥がないことが条件です。
したがって、データベースによって強制される参照整合性を利用する代替アプローチを検討する価値があります。
1.個別の補足テーブルの確立:
1 つのアプローチでは、ターゲットごとに 1 つの追加テーブル (popular_states や Popular_countries など) を作成し、それぞれ州と国との接続を確立します。これらのテーブルは、ユーザーのプロファイルとの関係も維持します。
2.継承のあるスーパーテーブル:
代替ソリューションとして、popular_areas テーブルは、州と国の両方の親として機能する場所などのスーパーテーブルを参照できます。州と国の主キーは、それらを場所にリンクする外部キーになることができます。
3.二重列の実装:
複数のターゲット テーブルを参照できる単一の列を使用するのではなく、state_id と country_id という 2 つの列を使用することが実行可能な代替手段であることがわかります。常に、これらの列のうち 1 つだけが NULL 以外の値を持つ必要があります。
結論として、参照整合性とデータ正規化の原則は、多態性関連付けを使用する際には注意が必要であることを示唆しています。参照整合性のデータベース強制に依存する代替戦略は、クロス表エンティティ間で外部キー関係を確立するための、より堅牢で一貫したソリューションを提供します。
以上がデータベース設計で表間の外部キーを効果的に管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。