【问题标题】:Should I denormalize to a join with an added bit, or what?我应该非规范化为一个添加位的连接,还是什么?
【发布时间】:2017-09-12 19:44:40
【问题描述】:

我的系统中有许多文档,例如订单发票、申请等。为了跟踪他们的审批工作流程,我有一个公用表,其中包含以下列。

WFID  ActionDate  DocInstancetype DocinstanceID  iscurrent   status
1     2017-04-04      PO              58            0       Submitted
2     2017-04-05      PO              58            1       Approved
3     2017-04-04      PR              74            1       Submitted 

在我的报告中,我通常只需要考虑批准的文件。在 Documents Master 表(在 PR 和 PO 表中)中添加一个 IsApproved 位并使用触发器同步它是一个好主意,这样我每次只需要获得批准的文档时就可以避免加入工作流表吗?

任何其他更好的建议也将不胜感激。

【问题讨论】:

  • 很难给出建议,因为这里缺少很多信息。 PO 和 PR 表是什么样子的,每个表的内容是什么意思,这三个表是如何相互关联的?现在的一个建议是,如果您需要“同步”表,那么要同步的表很可能应该是一个视图。
  • 最好是使用视图;如果速度是问题,你甚至可以使用物化的。触发器可能会变得棘手且容易死锁。

标签: sql sql-server database-design database-normalization


【解决方案1】:

文档表应该包含状态(不是 is_approved),因为您将来可能需要根据文档状态过滤文档,尽管今天您的需求仅限于 status="approved"。状态更改历史记录应保存在另一个表中,在您的情况下为 workflow,但我建议使用“document_status_tracking”或仅使用“document_tracking”作为该表的更好名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-08
    • 2013-07-26
    • 2014-10-31
    • 2017-01-27
    • 1970-01-01
    • 2012-03-22
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多