Sql server SQL Server数据库体系结构(设计)和#x2B;报告已删除的对象

Sql server SQL Server数据库体系结构(设计)和#x2B;报告已删除的对象,sql-server,database,architecture,Sql Server,Database,Architecture,我想为报告目的处理条目,即使条目已被删除 例如(简单场景),我有两个表: 管理员 管理行动 如果管理员执行某项操作,它将保存到AdministratorActions表中。应该可以从administrators表中删除一些管理员(条目) 但是,当我们从表中删除(实际删除)一些管理员时,我们无法跟踪AdministratorActions中的操作返回到已删除的名称 最简单的解决方案是:只需在Administrators表中添加一列IsDeleted,而不实际删除条目。但我认为,这是一个非常丑陋的D

我想为报告目的处理条目,即使条目已被删除

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

  • 管理员
  • 管理行动
  • 如果管理员执行某项操作,它将保存到
    AdministratorActions
    表中。应该可以从
    administrators
    表中删除一些管理员(条目)

    但是,当我们从表中删除(实际删除)一些管理员时,我们无法跟踪
    AdministratorActions
    中的操作返回到已删除的名称

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

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

    背景是:我们必须报告所有已完成的操作,并且应该能够将这些操作跟踪回启动器(表的管理员名称
    Administrators


    非常感谢您的帮助。

    您可以对
    管理员操作及其
    管理员名称
    列进行反规范化。

    您可以对
    管理员操作
    表及其
    管理员名称
    列进行反规范化。

    我认为它一点也不难看

    如果您想实际删除Administrators记录,那么您将无法从AdministratorActions创建外键约束—这是一种更糟糕的情况

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


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

    我认为这一点也不难看

    如果您想实际删除Administrators记录,那么您将无法从AdministratorActions创建外键约束—这是一种更糟糕的情况

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


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

    这是另一种可能的解决方案。但上面的两个表只是一个示例,实际上,它是一个复杂的数据库设计,需要大量数据表的大小。因此,数据库大小将增加/增加。如果是这种情况,我同意@AdaTheDev的答案。你最好使用状态标志。这是另一种可能的解决方案。但上面的两个表只是一个示例,实际上它是一个复杂的数据库设计,有很多表。因此,数据库大小将增加/增加。如果是这种情况,我同意@AdaTheDev的回答。你最好使用状态标志。好的。谢谢你的快速回答。我想我会使用标志场景。但我不敢相信微软会在他们真正的大型产品上使用这样的标志,比如Forefront Identity Manager(FIM)这已经实现了很好的报告功能。好的。谢谢你的快速回答。我想我会使用标志场景。但是我不敢相信微软会在他们真正的大产品上使用这样的标志,比如已经实现了很好的报告功能的Forefront Identity Manager(FIM)。