我有一个具有共享多租户的系统,这意味着每个表都包含所有租户的数据,并有一个TenantId列来区分它们。
提供一个新的租户是快速而简单的,但是现在我面临着删除单个租户的挑战。
考虑到实体之间的一致性相互依赖,当系统被其他租户使用时,如何轻松地从数据库中删除租户?
系统使用SQL Server2008 R2,如果这有帮助的话。
发布于 2012-01-09 01:00:36
如果我没弄错的话--这是使用带有ON CASCADE选项的FOREIGN KEYS的典型案例。您只需从主租户表中删除一条记录,由于适当的FKeys链,系统会删除相关记录或使用NULL或DEFAULT值更新引用列
在表引用自身带有DELETE ON CASCADE的情况下,有时不起作用
发布于 2012-01-09 10:09:19
正如奥列格所指出的,使用ON CASCADE选项的FK应该会有所帮助。但由于您还没有向我们展示模式,我不太确定是否存在系统抛出错误的可能性,即“引入外键约束导致循环或多个级联路径”。如果您看到此错误,则可能是instead of 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;发布于 2012-10-18 21:56:20
这里有另一种方法:如果删除租户引起了太多的麻烦,您也许可以使用一种变通方法。
只需向租户表添加一个布尔列active。然后引入一个仅选择活动租户的视图。调整存储过程以在此视图中查找数据,而不是在原始租户表中查找数据。
https://stackoverflow.com/questions/8779229
复制相似问题