我想知道是否有办法在MySQL数据库的单个字段中包含多个值,其中每个值都是引用另一个表的外键。
我正在设计一个包含产品表和产品认证表的数据库。
我正在使用InnoDB和外键约束。
“product”表包含有关产品特定实例的详细信息。产品表中包含的详细信息之一是“product_certification_id”列,它是引用两列“product_certification”表中的索引的外键。
产品认证表包含产品实例可能具有的认证。
我的问题源于产品认证不是互斥的,所以我很好奇是否可以在引用同一个表的同一字段中有多个外键值。
此外,我担心未来可能会增加更多认证,所以我需要在这个意义上以易于扩展的方式设计它。
感谢您的想法。
答案 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)
如果我理解正确,关系product
:product_certification
为1:M
你可以通过product_certification
从products
到product_id
创建一个外键,而不是product_certification_id
表中的products
(这是无效的,因为产品可以有超过1个认证)
答案 2 :(得分:0)
单个字段不能是另一个表中多个字段的外键。这是不可能的。由于您的外表具有复合键,因此您的表必须具有相同的字段。