这种情况下最好的数据库设计是什么?

use*_*977 8 database-design

我正在为我的公司构建业务应用程序,并努力为特定情况选择最合适的数据库设计。假设我有以下实体:

赞同

  • ID
  • 地位
  • ...

审批意见

  • ID
  • 批准编号
  • 评论

命令

  • ID
  • ...

发票

  • ID
  • ...

显然可能有多种类型的批准和多个需要批准的对象。以下选项中最适合设计表格的选项是什么:

选项1

有一个带有空外键的批准表:

批准

  • 身份验证
  • 地位
  • 订单 ID FK NULL
  • 发票 ID FK NULL

审批意见

  • 身份验证
  • 批准编号 FK
  • 评论

在这种情况下,我必须为每个需要批准的对象添加一列

选项 2

有一个带有公共字段的父 Approvals 表,以及每个需要批准的对象的子表:

批准

  • 身份验证
  • 地位

审批意见

  • 身份验证
  • 批准编号 FK
  • 评论

订单批准

  • ApprovalId PK FK
  • 订单编号 FK

发票审批

  • ApprovalId PK FK
  • 发票编号 FK

选项 3

每个对象都有一个批准表:

订单批准

  • 身份验证
  • 订单编号 FK
  • 地位

订单批准评论

  • 身份验证
  • 订单批准 ID FK
  • 评论

发票审批

  • 身份验证
  • 发票编号 FK
  • 地位

发票审批备注

  • 身份验证
  • InvoiceApprovalId FK
  • 评论

我知道这些都是有效的解决方案,但我无法决定哪一种最适合将来添加不同类型的批准。有什么想法吗?

sre*_*mer 10

我使用的一条经验法则是,如果将来可以计划,必须更改表以适应代码更改或新功能是糟糕的数据库设计。

也就是说,我会使用选项 1 的变体

Approvals
    Id PK
    ApprovalTypeID FK
    Status


ApprovalComments
    ID PK
    ApprovalId FK
    Comment

ApprovalTypes
    ID PK
    Name
Run Code Online (Sandbox Code Playgroud)

现在,在添加需要批准的新对象类型时,您只需在 ApprovalTypes 中插入一行,而无需更改表格以添加列。