2012-01-08 297 views
0

我有一个共享多租户的系统,这意味着每个表都包含所有租户的数据并使用TenantId列来区分它们。多租户:如何删除租户?

配置新租户非常快捷,但现在我面临着删除单个租户的挑战。

鉴于实体之间相互依赖的一致性,在系统被其他租户使用时,如何轻松地从我的数据库中删除租户?

系统使用SQL Server 2008 R2,如果有帮助的话。

回答

1

如果我找到了你的话 - 这是使用FOREIGN KEYSON CASCADE选项的经典案例。你只删除主租户表,由于FKeys的正确链中的一个记录系统将删除相关记录或刷新与NULLDEFAULT值的参考列

有时不会在情况下在哪里工作表引用本身删除CASCADE

1

由于奥列格指出FK与ON CASCADE选项应该有所帮助。但是由于您没有向我们展示架构,我不太确定系统是否有可能抛出一个错误:“引入FOREIGN KEY约束导致周期或多个级联路径”。如果你看到这个错误,那么可以用CASCADE DELETE而不是添加INSTEAD OF DELETE触发器来完成这项工作。

CREATE TRIGGER dbo.Tenants_Delete 
ON dbo.Tenants 
INSTEAD OF DELETE 
AS 
BEGIN; 
    --Delete from the Child and Master table as per your need here. 
    --Make use of the magic table DELETED 
END; 
0

下面是另一种方法:如果删除租户导致太多头痛,您可以使用解决方法。

只需将一个布尔列active添加到您的租户表中。然后介绍一个仅选择活跃租户的视图。调整存储过程以在此视图中查找数据,而不是在原始租户表中查找数据。