ホームページ > データベース > mysql チュートリアル > 外部キーは SQL で複数のテーブルを参照できますか?

外部キーは SQL で複数のテーブルを参照できますか?

Mary-Kate Olsen
リリース: 2024-10-24 01:51:29
オリジナル
1038 人が閲覧しました

Can a Foreign Key Reference Multiple Tables in SQL?

多態性外部キー制約: 多用途なアプローチ

従来の外部キー制約は、指定された 2 つのテーブル間に直接リンクを確立します。ただし、列が複数の考えられる親テーブルの 1 つを参照する多態性の関係が必要な場合はどうすればよいでしょうか?

複数のテーブルへの外部キーは可能ですか?

残念ながら、答えは否定的です。外部キー制約は、単一の親テーブルのみを参照できます。この制限は、データベース システムにおけるデータの整合性と一貫性の必要性から生じます。

実際的な考慮事項

固有の制限にもかかわらず、データベース システムの動作をエミュレートする実用的なアプローチがあります。複数のテーブルへの外部キー:

  1. ユニオン テーブル: 考えられるすべての親テーブルの列を組み込んだ単一のユニオン テーブルを作成します。子テーブルの外部キー列は共用体テーブルを参照します。データを挿入または更新する場合、ユニオン テーブルによって、どの実際の親テーブルに挿入または更新するかが決定されます。
  2. 型列: 可能な親テーブルの型を区別するために、子テーブルに型列を導入します。 。外部キー列は、type 列で指定された型に対応する親テーブルを参照します。

MySQL および PostgreSQL の例

MySQL では、次のようになります。ステートメントは共用体テーブルを作成します:

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>
ログイン後にコピー
ログイン後にコピー

子テーブルの外部キー制約は次のようになります:

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>
ログイン後にコピー
ログイン後にコピー

PostgreSQL では、同様のアプローチが使用されます:

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>
ログイン後にコピー
ログイン後にコピー

外部キー制約は次のようになります。

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>
ログイン後にコピー
ログイン後にコピー

結論

複数のテーブルへの直接外部キーは実現できませんが、代替戦略により多態性が可能になります。 SQL データベース システムにおける外部キー関係。これらの戦略は、データの整合性を維持しながら、複数の親テーブルに対応する柔軟性を提供します。

以上が外部キーは SQL で複数のテーブルを参照できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート