この例では、データベース設計の一般的な課題、つまり単一のテーブルが他の複数のテーブルの主キーを参照する必要がある外部キー関係の作成について説明します。 特定のシナリオには、deductions
テーブルが employees_ce
テーブルと employees_sn
テーブルの両方にリンクする必要があることが含まれます。
問題は、deductions
の外部キーが employees_ce
と employees_sn
の両方の主キーを同時に直接参照できるかどうかです。 答えは、直接ではなく、標準のリレーショナル データベース内にあるということです。 1 つの外部キーは 1 つの主キーのみを参照できます。
提案されたソリューションは、適切に構造化された継承モデルを活用してこれを解決します。
テーブル employees
、employees_ce
、および employees_sn
は継承階層を表します。 employees
はベーステーブルであり、それを継承する特殊なテーブルとして employees_ce
と employees_sn
があります。
データベース構造:
<code class="language-sql">employees (id INT PRIMARY KEY, name VARCHAR(255)) employees_ce (id INT PRIMARY KEY, ce_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id)) employees_sn (id INT PRIMARY KEY, sn_specific_attribute VARCHAR(255), employee_id INT, FOREIGN KEY (employee_id) REFERENCES employees(id))</code>
解決策:
employees_ce
と employees_sn
の両方への直接リンクの代わりに、deductions
テーブルは共通の親テーブル employees
:
<code class="language-sql">deductions (id INT PRIMARY KEY, employee_id INT, deduction_amount DECIMAL(10,2), ..., FOREIGN KEY (employee_id) REFERENCES employees(id))</code>
このアプローチにより、参照整合性が確保され、冗長性が回避されます。 employee_id
の deductions
は、従業員が employees
または employees_ce
に追加情報を持っているかどうかに関係なく、employees_sn
の従業員レコードにリンクします。 この設計により、関係が効率的に管理され、データの一貫性が維持されます。
以上が外部キーは複数の主キーを同時に参照できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。