【问题标题】:Database entity with more than one possible parent type具有多个可能的父类型的数据库实体
【发布时间】:2013-10-17 07:45:42
【问题描述】:

我有一个带有地址实体的关系数据库,该实体应该有一个父地址或一个父单元,但不能同时具有这两者。目前,架构是具有 ParentUnitID 字段和 ParentAddressID 字段的地址。有没有办法改变这一点,防止地址同时具有父地址和父单元,但保留外键约束?

【问题讨论】:

  • 添加 CHECK 约束,强制其中一个 FK 不为空。这可能需要由触发器实现,具体取决于您的 DBMS。
  • 您可以对两个可能的父项(即两个不同的外键列)设置外键约束,然后使用 CHECK 约束确保其中一个始终为 NULL。
  • 你应该提出这个作为答案,这样他就可以选择它作为答案
  • 定义单位,什么是单位?

标签: database-design relational-database data-modeling


【解决方案1】:

一个 FOREIGN KEY 不强制一个 NULL 值,所以你只需要确保其中只有一个是非 NULL:

CHECK (
    (ParentUnitID IS NOT NULL AND ParentAddressID IS NULL)
    OR (ParentUnitID IS NULL AND ParentAddressID IS NOT NULL)
)

如果您碰巧使用 MySQL,则需要将其实现为触发器,因为 MySQL doesn't enforce CHECK constraints

或者,您可以使用继承,如 here 所述。

【讨论】:

    猜你喜欢
    • 2011-07-30
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2015-01-03
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多