外键多 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
没有。你所描述的有时被称为 polymorphic-associations 但它应该是一个线索,它不是好的设计,因为 你不能为它设置外键约束。 也就是说, 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
我看过类似的帖子,还没有找到确定的答案。
我有一系列 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
没有。你所描述的有时被称为 polymorphic-associations 但它应该是一个线索,它不是好的设计,因为 你不能为它设置外键约束。 也就是说, 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