几个外键和级联删除SQL服务器

Several Foreign Key and Cascade Delete SQL Server

在 SQL Server 2014 中,我试图在 3 FK 上添加 CASCADE DELETING。如果我在一个关系中添加一个级联删除,它工作正常。如果我添加更多的级联删除,它不起作用(循环检测到错误消息)。

在上图中,您可以看到 Users table,以及 Tasks table ( "Tareas" 西班牙语)。所以,我需要完成的是当用户被删除时,我需要将Tasks中标记的字段设置为NULL。

这在数据库中很常见,所以我想有办法处理这个问题。

就我而言,我的大多数 table 都有一对字段,其中包含创建或修改记录的用户的 UserId。因此,我需要解决此模式以将其应用到多个地方。

CASCADE DELETE 意味着在您的情况下,如果您删除一个用户,那么 SQL 服务器也会删除任何附加的任务。也就是说,将删除整行。除了数据意外丢失、参照完整性丢失或无限递归删除的可能性等问题外,这种行为无论如何都不是您想要的。您已声明您只想将任务中的关联用户列标记为空 table。

作为建议,您是否考虑实施 TRIGGER?类似这样的东西(还没有测试过,把它当作伪代码!):

CREATE TRIGGER DeleteTareasTrigger
ON Users
BEFORE DELETE AS
BEGIN

UPDATE t
SET t.CreadaPor = NULL
FROM DELETED as d
INNER JOIN Tareas t ON d.UserID = t.CreadaPor

UPDATE t
SET t.ModifcadaPor = NULL
FROM DELETED as d
INNER JOIN Tareas t ON d.UserID = t.ModifcadaPor

END
GO

或者作为另一种方法,在用户 table 上添加一个位字段以指示此人是否 active/deleted。