【问题标题】:How to virtually delete data from multiple tables that are linked by a foreign key?如何从通过外键链接的多个表中虚拟删除数据?
【发布时间】:2010-03-15 14:40:47
【问题描述】:

我正在使用Sql Server 2005

这是我的数据库图的一部分。我想从 tblDomain up tp tblSubTopics 开始对我的数据库执行删除操作。

考虑每个表都有 IsDeleted 列,如果请求删除数据,则必须将其标记为 true。但是这些数据应该仍然是他们的物理数据。

将具有 IsDeleted 列的表是

tbl 域 tbl主题 tbl主题 tblSubTopic

现在我想,如果用户将一个域标记为已删除,那么所有引用字段也应标记为已删除。即

1 个域与 5 个主题相关,这 5 个主题与 25 个主题相关,这 25 个主题与 500 个子主题相关,依此类推。

那么我应该如何将所有这些文件标记为已删除。 ?

【问题讨论】:

    标签: sql database sql-server-2005 tsql


    【解决方案1】:

    为什么必须更新所有表中的“isDeleted”字段?我的建议是更新主表中的值。当你想检查一个主题时。主题或子主题与“已删除”域相关,您可以使用相关视图访问数据:

    SELECT Tbl_Subject.*, Tbl_Domain.isDeleted FROM Tbl_Subject INNER JOIN Tbl_Domain ON ...
    

    【讨论】:

      【解决方案2】:

      简短的回答是您可能不应该这样做。相反,如果域被标记为已删除,您的应用程序应该能够确定所有附属信息因此被删除。否则,您就是在重复自己,并且对数据库设计进行非规范化。

      如果这不切实际,您可以在 tblDomain 上的 TRIGGER 中处理级联删除。

      【讨论】:

        猜你喜欢
        • 2019-02-01
        • 2023-03-20
        • 2016-04-04
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        • 2013-09-14
        相关资源
        最近更新 更多