外键多表可能性

问题描述

我看过类似的帖子,但没有找到确切的答案。

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

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

我有兴趣将我的所有数据表合并为一个,而外键则限制为3个表之一。因此,我的数据表中的一行将必须在三个表之一中具有一个id。此外,此外键将需要进行ON DELETE设置。这可能吗?而且,这是糟糕的设计吗?

Items A
 - id
 - ...

Items B
 - id
 - ...

Items C
 - id
 - ...

Data
 - id FK

解决方法

不。您所描述的内容有时称为,但这应该是一个不好的设计提示,因为您不能为此设置外键约束。即,{{ 1}}语法仅允许您引用一个表,而不是三个表。

制作执行FOREIGN KEY操作的真实外键约束的唯一方法是制作三个单独的外键:

ON DELETE

对于Data中的给定行,假定这三个外键中只有一个是非NULL。其他两个将为NULL。确保可以在触发器或CHECK约束中完成此操作,否则只需在应用程序逻辑中实现它即可(即,不要在一行中插入多个非NULL列)。

多态关联只能存储一个可以引用三个不同表之一的列,这不是有效的关系设计。

您可以看到我以前写的关于多态关联的答案:https://stackoverflow.com/search?q=%5Bpolymorphic-associations%5D+user%3A20860

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...