【问题标题】:RDBMS Ref. Integrity: A child with too many parents?关系型数据库参考。正直:一个有太多父母的孩子?
【发布时间】:2020-08-28 20:21:34
【问题描述】:

我有一个一般性的设计问题。考虑这 3 个表:

Table Restaurants:
    RID pk auto_increment
    etc...

Table Vacations:
    VID pk auto_increment
    etc...

Table Movies:
    MID pk auto_increment
    etc...

现在假设我们要创建一个列表“COVID 结束后要做的最重要的事情”,从这 3 个不同的表中选择记录。该列表可能包含来自这些表的任何记录组合。然后想到的是:

Table Todo:
   Type [ one of R, V, M ]
   ID [ the ID of the parent item ]

但是您将如何对这件事实施参照完整性?即,我们如何确保当餐厅从餐厅中删除时,它也会从 Todo 中删除?

(我知道如何使用触发器来完成这些事情;好奇是否有实体组合可以使用纯 RDBMS ref.int 来完成此任务。)

谢谢!

【问题讨论】:

标签: rdbms referential-integrity


【解决方案1】:

您可以在todo 表中为您拥有的每个目标表添加可为空的外键列。所以你的表格看起来像:

Table Todo:
   RID fk (nullable)
   VID fk (nullable)
   MID fk (nullable)

不再需要type 列,因为您可以检查哪一列填充了外键。显然你必须添加一个CHECK 约束来确保必须设置一个外键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2018-02-12
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多