我有一個完整的多租戶數據庫,在所有租用的數據庫上都有TenantID。這一切都運行良好,除了現在我們有要求租用數據庫「鏈接到」共享數據。因此,例如,用戶可以創建自己的「銀行」記錄並將賬戶鏈接到他們,但他們也可以將賬戶鏈接到所有租戶共享的「全球」銀行記錄。帶有一些共享數據的多租戶數據庫
我需要一個優雅的解決方案,保持參照完整性
我來了這麼遠的方式:
- 複製:所有共享數據被複制到每個租戶,也許用「系統「標誌。共享數據的更改涉及所有租戶的大量更新。 也許最簡單的解決辦法,但我不喜歡重複數據
- 特殊ID的:對共享數據的所有鏈接中使用特殊的ID(例如負的ID號)。這些表明TenantID不在關係中使用。 您不能使用FK來正確執行此操作,並且如果您擁有任何FK,則肯定無法在租戶內重複使用ID。只有觸發器才能用於完整性。
- 單獨ID's:所有可鏈接到共享數據的表都有兩個FK;一個使用TenantID並鏈接到本地數據,另一個不使用TenantID並鏈接到共享數據。約束表示要使用一個或另一個,而不是兩個。 這可能是最「純」的方法,但它看起來......醜陋,但也許不像其他人那麼醜陋。
所以,我的問題是兩個部分:
- 有沒有我還沒有考慮任何選項?
- 有沒有人有這些選項的經驗,並有任何反饋的優點/缺點?