好的设计:2个表与同一主键的外键

时间:2012-07-18 08:31:11

标签: database-design

我想知道我是否遵循了以下数据库表的良好设计。

表:

  • Project_Proposal
  • Milestones_Proposal
  • Resources_Proposal
  • 项目
  • 里程碑项目
  • Resources_Project

两个里程碑表都有相同的列,两个资源表都有相同的列。

我的问题是我是否应该

  1. 将Milestones_Proposal与Milestones_Project合并
  2. 将Resources_Proposal与Resources_Project合并
  3. 创建一个“TYPE”列,以确定这些表中的数据是属于项目还是项目提案
  4. 在里程碑和资源中定义一个外键,该外键指向Project_Proposal或Project表,具体取决于“Type”值。
  5. 设计就像这样:

    • Project_Proposal
    • 项目
    • 里程碑
    • 资源

    非常感谢, 彼得

1 个答案:

答案 0 :(得分:0)

您具有相同的字段,但它们(通过外键)“指向”不同的表,因此您不能将它们合并到单个字段中。你最终会得到一个CHECK,它允许一个字段或另一个字段包含一个非NULL值,基于类型字段。

在这个简单的案例中,这完全没问题。您基本上遵循3 possible strategies中的策略#1来实现继承。