2011-07-06 135 views
0

我們正在使用.net mvc和sqlserver db。具有單個共享數據庫的多租戶數據庫

編輯

我們還使用NHibernate的數據訪問。我提到這個是因爲我們不會編寫自己的sql或者存儲過程。觸發器中的數據庫可能會工作,但我不知道你是否可以在數據庫之間做到這一點。

編輯完

我們希望有一個多租戶設置,使每個客戶都有自己存在的數據庫實例。但是,我們需要讓每個租戶連接到有大量用戶信息的其他數據庫。它們之間會有一些少量的共享數據。基本上租戶將參考共享數據庫中用戶的數據。

這個想法是,有些人將只使用共享數據庫(獨立客戶端),然後他們可能會被租戶客戶之一聘用。租戶將希望訪問共享數據庫中的新員工數據。此外,員工可能會離開一個租戶並加入另一個租戶,或離開一個租戶並保持獨立性並希望獲得他們的數據。我們當然可以在每個租戶中擁有共享數據庫模式,並且每次有人離開或加入時都會進行大量導出導入,但這看起來也很麻煩。

我在詢問有關如何管理租戶將引用共享數據庫但沒有引用完整性的事實的任何建議。或者如果有其他方法或其他方法。 謝謝, Raif

回答

2

在數據庫中,您必須放棄聲明性參照完整性(外鍵)。但是你仍然可以執行這個操作(如果你認爲你需要的話),使用after或者替代觸發器,或者如果你通過存儲過程來控制所有的數據操作,你可以在那裏做(插入或更新,例如,你可以先檢查,或者作爲修改的一部分,加入或使用EXISTS對其他數據庫中的表格進行確認,以確保正在使用有效值)。

我已經與多租戶模型合作過,並且可能有巨大的收益值得花費(例如在某些情況下放棄DRI)。對於大多數參考數據而且不是自由文本輸入的內容,不應該需要大量的額外工作。

+0

嗨,感謝您的意見。我編輯了我的問題,以表明我們使用的是nhibernate而不是sprocs。我不熟悉後面或代替觸發器這是我應該研究的東西嗎? – Raif

+0

如果你想用共享數據強制執行參照完整性,是的,那肯定是一種方法。對於我來說,這是否有必要再次說出。 –

+0

嗯,是的,恐怕觸發器可能無法工作。您看到我擔心共享數據庫中的數據會更改並混淆租戶。但我不能在共享數據庫上放置觸發器,然後說出去,然後找到合適的租戶並註冊日期信息。共享數據庫不會有任何參考連接到它的租戶。 – Raif