如何在ERD(表格)设计中处理"OR"关系?

C. *_*oss 5 language-agnostic database-design erd polymorphic-associations

我正在为个人项目设计一个小型数据库,其中一个表称为表C,需要有两个表中的一个表的外键,调用它们,A并且B不同于条目.实现这个的最佳方法是什么?

目前为止的想法:

  • 创建具有连接到两个表的两个可空外键字段的表.
    • 可能有一个触发器拒绝插入和更新,导致0或2为空.
  • 两个具有相同数据的独立表
    • 这打破了有关复制数据的规则.

有什么更优雅的方法来解决这个问题?

Bil*_*win 10

您正在描述一种名为Polymorphic Associations的设计.这常常让人们陷入困境.

我通常建议的内容:

A  -->  D  <--  B
        ^
        |
        C
Run Code Online (Sandbox Code Playgroud)

在此设计中,您将创建一个D既引用AB引用的公共父表.这类似于OO设计中的常见超类型.现在您的子表C可以引用超级表,然后您可以从那里到达相应的子表.

通过约束和复合键,您可以确保给定的行D只能由AB不是两者引用.