php - 是否可以在一个字段中使用多个外键?

标签 php mysql foreign-keys relational-database

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

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

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

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

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

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

此外,我担心将来可能会添加更多认证,因此我需要以一种易于扩展的方式设计它。

谢谢你的想法。

最佳答案

您通常做的是使用中间链接表设置多对多关系。像下面这样的东西:

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

关于php - 是否可以在一个字段中使用多个外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7094170/

相关文章:

php - UNIX/Windows 上斜杠和反斜杠的统一性

MySQL错误代码: 1215.无法添加外键约束(两列的数据类型匹配)

mysql - 如何重命名在mysql中用作外键的字段?

database - 如何将 "at least one"约束(在 ER 中)转换为 SQL?

php - 我如何在 Joomla 3.x 中将电子邮件设置为用户名?

php - PHP 应用程序的单元、集成和系统测试

php - 如何在 MySQLi 中从 DB 声明变量(过程)?

mysql - 为什么 OpenCart 使用子查询而不是 LEFT JOIN?

mysql - R dbplyr WHERE 子句 cp1250 字符集

软删除前的MySQL检查