外键多 Table 的可能性

Foreign Key Multi Table Possibility

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

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

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

我有兴趣将我的所有数据 table 合并为一个,外键被限制为 3 个 table 之一。因此,我的数据 table 中的一行必须有一个 id 出现在三个 table 之一中。此外,此外键需要 ON DELETE 设置的可能性。这可能吗?对此,这是糟糕的设计吗?

Items A
 - id
 - ...

Items B
 - id
 - ...

Items C
 - id
 - ...

Data
 - id FK

没有。你所描述的有时被称为 但它应该是一个线索,它不是好的设计,因为 你不能为它设置外键约束。 也就是说, FOREIGN KEY 语法只允许您引用一个 table,而不是三个。

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

Data
 - idA FK
 - idB FK
 - idC FK

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

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

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