此示例探讨了一个常见的数据库设计挑战:创建外键关系,其中单个表需要引用多个其他表的主键。 具体场景涉及deductions
表需要链接到employees_ce
和employees_sn
表。
问题是deductions
中的外键是否可以同时直接引用employees_ce
和employees_sn
中的主键。 答案是:不直接,在标准关系数据库中。 单个外键只能引用单个主键。
建议的解决方案利用结构良好的继承模型来解决这个问题。
表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中文网其他相关文章!