一个外键引用多个 table 的主键

One foreign key referring to multiple table's primary keys

1 <1 - image> 一个外键引用多个 table 的主键。

<1.1> 其中 primary1 table 有两列 primary1_id int( 11)first_name varchar(10) 其中 primary1_id 是一个 主键

<1.2>primary1 相同 table, primary2 table 也有两列 primary2_id intlast_name varchar 其中 primary2_id是一个主键。

<1.3>**还有一个**foreign1 table 有两列 foreign_id intfull_name int 其中 full_name 是一个 外键 其中指的是多个 table 的 主键 ,例如 primary1_idprimary2_id

2 <2 - 图片> 这个外键, full_name 只允许插入那些在 primary1_idprimary2_id 列中相同的值。

<2.1> 因此,如果我在 primary1 table 中输入五个条目,在 中输入四个条目初级2.

<2.2> 其中primary1_id的设置为1到5,primary2_id的设置为1到4.

<2.3> 但是为什么这个 外键 full_name 允许我输入 1 到4 仅在两个主键的 tables?

中可用

根据我的经验,这很不寻常,但作为一种实现某些业务规则的方式可能有意义,其含义类似于 "A must be both B and C"。

一个可能的例子:StaffDiscount table 识别同时也是雇员并且有资格享受折扣的客户。这样的 table 可能有一个引用客户 table 和员工 table 的外键。这确实假设使用公共密钥来识别客户和员工。

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));

是的,如果一个人要在多个人之间建立关系,那是有可能的table。由于外键的存在表明存在所有与 table 相关的 table。并有助于在单个关系查询中从该环境中检索数据。