1 < 1 - image> 一个外键引用多个表的主键。
&lt; 1.1&gt; 其中 primary1 表有两列 primary1_id int(11)和 first_name varchar(10)< / strong>其中 primary1_id 是主键。
&lt; 1.2&gt; 与 primary1 表相同, primary2 表还有两列 primary2_id int 和 last_name varchar ,其中 primary2_id 是主键。
&lt; 1.3&gt; **还有一个** foreign1 表有两列 foreign_id int 和 full_name int ,其中< strong> full_name 是一个外键,它指的是多个表的主键,例如 primary1_id 和 primary2_id 即可。
2 &lt; 2 - image&gt; 此外键, full_name 仅允许插入相同的值 primary1_id 和 primary2_id 列。
&lt; 2.1&gt; 因此,如果我在 primary1 表格中输入五个条目,在 primary2 中输入四个条目。
&lt; 2.2&gt; primary1_id 设置为1到5, primary2_id&#39; 设置为为1到4。
&lt; 2.3&gt; 但为什么这个外键full_name 允许我只输入 1到4 关键表?
答案 0 :(得分:2)
在我的经验中这是不寻常的,但作为一种实现某些业务规则的方式可能是有意义的,其含义类似于“A必须是B和C”。
一个可能的示例:一个StaffDiscount表,用于识别同时也是员工且有资格享受折扣的客户。这样的表可能只有一个引用Customer表和Employee表的外键。这确实假设使用公共密钥来识别客户和员工。
CREATE TABLE StaffDiscount
(CustomerEmployee INT NOT NULL PRIMARY KEY /* Same key identifies customer and employee */,
FOREIGN KEY (CustomerEmployee) REFERENCES Customer (CustomerNum),
FOREIGN KEY (CustomerEmployee) REFERENCES Employee (EmployeeNum));
答案 1 :(得分:0)
是的,如果要在多个表之间创建关系,则有可能。由于外键的存在表明存在与该表的所有相关表。并且有助于在单个关系查询中从该环境中检索数据。