Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 外键多表可能性_Mysql_Innodb_Polymorphic Associations - Fatal编程技术网

Mysql 外键多表可能性

Mysql 外键多表可能性,mysql,innodb,polymorphic-associations,Mysql,Innodb,Polymorphic Associations,我看过类似的帖子,还没有找到一个明确的答案 我有一系列的表来存储某些事件的数据。每个表都有相同的结构。每个表都有一个外键约束,用于显示与数据相关的项目的id 这些表的每个id结构也是相同的CHAR(24)。这些id来自的表必须保持独立,因为它们完全不同 我感兴趣的是将我所有的数据表合并成一个表,并将一个外键约束到三个表中的一个。因此,我的数据表中的一行必须有一个id,它出现在三个表中的一个表中。此外,此外键还需要在删除设置时启用。这可能吗?而且,这是一个糟糕的设计吗 Items A - id

我看过类似的帖子,还没有找到一个明确的答案

我有一系列的表来存储某些事件的数据。每个表都有相同的结构。每个表都有一个外键约束,用于显示与数据相关的项目的
id

这些表的每个
id
结构也是相同的
CHAR(24)
。这些
id
来自的表必须保持独立,因为它们完全不同

我感兴趣的是将我所有的数据表合并成一个表,并将一个外键约束到三个表中的一个。因此,我的数据表中的一行必须有一个
id
,它出现在三个表中的一个表中。此外,此外键还需要在删除设置时启用
。这可能吗?而且,这是一个糟糕的设计吗

Items A
 - id
 - ...

Items B
 - id
 - ...

Items C
 - id
 - ...

Data
 - id FK

不。您所描述的内容有时会被调用,但这应该是一个线索,说明它不是一个好的设计,因为您不能对它进行外键约束。也就是说,
外键
语法只允许您引用一个表,而不是三个表

创建真正的外键约束以执行删除操作的唯一方法是创建三个单独的外键:

Data
 - idA FK
 - idB FK
 - idC FK
对于数据中的给定行,这三个外键中大概只有一个是非NULL的。另外两个将为空。确保这可以在触发器或检查约束中完成,否则您只需在应用程序逻辑中实现它(即,不要插入一行,其中多个列为非NULL)

多态关联(即存储可能引用三个不同表之一的单个列)不是有效的关系设计

你可以看到我以前写的关于多态关联的答案: