可以在单个字段中使用多个外键吗?

时间:2011-08-17 14:04:29

标签: php mysql foreign-keys relational-database

我想知道是否有办法在MySQL数据库的单个字段中包含多个值,其中每个值都是引用另一个表的外键。

我正在设计一个包含产品表和产品认证表的数据库。

我正在使用InnoDB和外键约束。

“product”表包含有关产品特定实例的详细信息。产品表中包含的详细信息之一是“product_certification_id”列,它是引用两列“product_certification”表中的索引的外键。

产品认证表包含产品实例可能具有的认证。

我的问题源于产品认证不是互斥的,所以我很好奇是否可以在引用同一个表的同一字段中有多个外键值。

此外,我担心未来可能会增加更多认证,所以我需要在这个意义上以易于扩展的方式设计它。

感谢您的想法。

3 个答案:

答案 0 :(得分:4)

您通常要做的是与中间链接表建立多对多的关系。有些事情如下:

CREATE TABLE product (
  `id` integer AUTO_INCREMENT NOT NULL,
  -- other cols --
  PRIMARY KEY (`id`)
);

CREATE TABLE certification (
  `id` integer AUTO_INCREMENT NOT NULL,
  -- other cols --
  PRIMARY KEY (`id`)
);

CREATE TABLE product_certification (
   `product_id` integer NOT NULL,
   `certification_id` integer NOT NULL,
   PRIMARY KEY (`product_id`, `certification_id`),
   CONSTRAINT `product_id_product_id` 
     FOREIGN KEY (`product_id`) 
     REFERENCES `product` (`id`) ON DELETE CASCADE,
   CONSTRAINT `certification_id_certification_id` 
     FOREIGN KEY (`certification_id`) 
     REFERENCES `certification` (`id`) ON DELETE CASCADE
);

答案 1 :(得分:0)

如果我理解正确,关系productproduct_certification1:M 你可以通过product_certificationproductsproduct_id创建一个外键,而不是product_certification_id表中的products(这是无效的,因为产品可以有超过1个认证)

答案 2 :(得分:0)

单个字段不能是另一个表中多个字段的外键。这是不可能的。由于您的外表具有复合键,因此您的表必须具有相同的字段。