如何从外键链接的多个表中虚拟删除数据?

时间:2010-03-15 14:40:48

标签: sql database sql-server-2005 tsql

alt text http://www.freeimagehosting.net/uploads/3f84b4ef9c.jpg

我正在使用Sql Server 2005

这是我数据库图表的一部分。我想在我的数据库上执行删除操作,该数据库将从tblDomain tp tblSubTopics开始。

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

具有IsDeleted列的表是

tblDomain tblSubject tblTopic tblSubTopic

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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