我有一個共享多租戶的系統,這意味着每個表都包含所有租戶的數據並使用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
添加到您的租戶表中。然後介紹一個僅選擇活躍租戶的視圖。調整存儲過程以在此視圖中查找數據,而不是在原始租戶表中查找數據。