【问题标题】:Foreign Key Multi Table Possibility外键多表可能性
【发布时间】:2020-09-09 16:18:53
【问题描述】:

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

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

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

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

Items A
 - id
 - ...

Items B
 - id
 - ...

Items C
 - id
 - ...

Data
 - id FK

【问题讨论】:

    标签: mysql innodb polymorphic-associations


    【解决方案1】:

    没有。您所描述的内容有时称为,但这应该表明它不是好的设计,因为您不能为其设置外键约束。FOREIGN KEY 语法只允许您引用一个表,而不是三个。

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

    Data
     - idA FK
     - idB FK
     - idC FK
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多