我有一个共享多租户的系统,这意味着每个表都包含所有租户的数据并使用TenantId列来区分它们。多租户:如何删除租户?
配置新租户非常快捷,但现在我面临着删除单个租户的挑战。
鉴于实体之间相互依赖的一致性,在系统被其他租户使用时,如何轻松地从我的数据库中删除租户?
系统使用SQL Server 2008 R2,如果有帮助的话。
我有一个共享多租户的系统,这意味着每个表都包含所有租户的数据并使用TenantId列来区分它们。多租户:如何删除租户?
配置新租户非常快捷,但现在我面临着删除单个租户的挑战。
鉴于实体之间相互依赖的一致性,在系统被其他租户使用时,如何轻松地从我的数据库中删除租户?
系统使用SQL Server 2008 R2,如果有帮助的话。
如果我找到了你的话 - 这是使用FOREIGN KEYS
和ON CASCADE
选项的经典案例。你只删除主租户表,由于FKeys的正确链中的一个记录系统将删除相关记录或刷新与NULL
或DEFAULT
值的参考列
有时不会在情况下在哪里工作表引用本身删除CASCADE
由于奥列格指出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;
下面是另一种方法:如果删除租户导致太多头痛,您可以使用解决方法。
只需将一个布尔列active
添加到您的租户表中。然后介绍一个仅选择活跃租户的视图。调整存储过程以在此视图中查找数据,而不是在原始租户表中查找数据。