2012-01-08 452 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添加到您的租戶表中。然後介紹一個僅選擇活躍租戶的視圖。調整存儲過程以在此視圖中查找數據,而不是在原始租戶表中查找數據。