【问题标题】:SQL Server database architecture (design) + reporting for deleted objectsSQL Server 数据库架构(设计)+ 已删除对象的报告
【发布时间】:2013-04-29 18:22:18
【问题描述】:

即使条目被删除,我也想处理条目以用于报告目的。

例如(简单场景),我有两个表:

  1. 管理员
  2. 管理员操作

如果管理员做某事,它将被保存到AdministratorActions 表中。应该可以从Administrators表中删除一些管理员(条目)。

但是,当我们从表中删除(真正删除)一些管理员时,我们无法将 AdministratorActions 中的操作追踪到已删除的名称。

最简单的解决方案是:只需在Administrators 表中添加一列IsDeleted,而不实际删除条目。但我认为,这是一个非常丑陋的数据库设计。

有没有其他好的解决方案可以很好地做到这一点?

背景是:我们必须报告所有已完成的操作,并且应该能够将这些操作追溯到发起者(表的管理员名称Administrators

非常感谢您的帮助。

【问题讨论】:

    标签: sql-server database architecture


    【解决方案1】:

    我觉得一点也不丑。

    如果您想实际删除管理员记录,那么您将无法从 AdministratorActions 创建 FOREIGN KEY 约束 - 恕我直言,情况要糟糕得多。

    对记录使用某种形式的 IsDeleted/Status 标志以保持引用完整性是非常常见的,这可以确保您可以从 FK 约束中受益。

    另一种方法是将管理员的数据也存储在 AdministratorActions 表中,而不是通过 id 进行链接。但是,您应该问问自己是否真的想要这种级别的数据重复。

    【讨论】:

    • 好的。感谢您的快速答复。我想我会使用标志场景。但我不敢相信微软会在他们真正的大产品上使用这样的标志,比如实现了很好的报告功能的 Forefront Identity Manager (FIM)。
    【解决方案2】:

    您可以将AdministratorActions 表和AdministratorName 列反规范化。

    【讨论】:

    • 这是另一种可能的解决方案。但是上面的两个表只是一个例子,实际上它是一个复杂的数据库设计,有很多表。因此,数据库大小将增长/增大 enorm。
    • 如果是这种情况,我同意@AdaTheDev 的回答。最好使用状态标志。
    猜你喜欢
    • 2013-09-11
    • 2011-01-06
    • 1970-01-01
    • 2010-10-11
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多