SQL Server数据库体系结构(设计)+已删除对象的报告

时间:2012-04-04 14:53:32

标签: sql-server database architecture

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

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

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

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

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

    还有其他好的解决方案吗?

    背景是:我们必须报告所有已完成的操作,并且应该能够跟踪返回发起者的操作(表Administrators的管理员名称。

    我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

我觉得它根本不丑。

如果您想要物理删除管理员记录,那么您将无法从AdministratorActions创建FOREIGN KEY约束 - 恕我直言,这是一个更糟糕的情况。

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

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

答案 1 :(得分:1)

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