多租户:如何删除租户?

时间:2012-01-08 16:39:20

标签: sql-server database-design multi-tenant

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

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

鉴于实体之间依赖于一致性,如何在我的数据库中轻松删除租户,而其他租户正在使用该系统?

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

3 个答案:

答案 0 :(得分:1)

如果我说得对 - 这是使用FOREIGN KEYSON CASCADE选项的经典案例。您只能从主租户表中删除一条记录,并且由于正确的FKeys链,系统会删除相关记录或使用NULLDEFAULT值更新参考列

有时在表引用DELETE ON CASCADE

的情况下不起作用

答案 1 :(得分:1)

正如Oleg已经指出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;

答案 2 :(得分:0)

这是另一种方法:如果删除租户会引起太多麻烦,您可以使用解决方法。

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