18

设置外键约束的常用方法是选择外键将指向哪个表。

我在一个表和一组表之间存在多态关系。

这意味着该表将与集合中的其中一个表有关系。

例如。

images: person_id, person_type
subordinates: id, col1, col2...col9
products: id, colA, colB...colZ

在上面的示例中,如果 person_type 是“subordinates”,那么 person_id 应该是从属.id 的外键,产品也是如此。

所以我想知道,是否有可能对许多表之一有一个外键,或者您是否必须在分配一个表时专门设置它指向哪个表。

这个问题适用于 MySQL 和 PostgreSQL。

谢谢

4

4 回答 4

2

根据定义,外键必须指向一个唯一的表上的主键或候选键 - 仅主键在典型的 DBMS 中可用。您最好拥有一个“人”表,并拥有与此相关的表,例如经理信息。

于 2010-08-01T19:00:00.920 回答
1

列只是值的占位符。外键约束意味着存储在该列中的数据只能是与约束中定义的表列匹配的值。外键约束是每个表...

没有什么可以阻止您在列上定义多个外键约束。但这意味着唯一允许存储的值将是所有其他外部相关表中已经存在的值。IE:TABLE_1 具有值 1 和 2,TABLE_2 具有值 2 和 3 - TABLE_3 具有在 TABLE_3 的col列上定义到表 1 和 2 的外键关系...我可以插入的唯一有效值TABLE_3.col是 2,因为它在两个表中(假设col不可为空)。

于 2010-08-01T19:08:36.270 回答
1

外键只能指向一个表。

在我看来,您在这里真正想做的是在您的个人表中创建一个父 ID。下属将有一个父 ID 指向他们的经理。如果下属需要多个经理,则可以创建一个单独的连接表,其中包含 2 列,每列包含一个人员 ID,一个是下属,另一个是经理之一。

如果您想限制谁可以分配给 parentid 字段,这可以通过检查约束来完成。

于 2010-08-01T19:08:43.673 回答