2017-07-18 117 views
0

爲多租戶應用程序,我們有以下的數據庫設計: enter image description here數據庫設計的多租戶應用

它是基於共享數據庫的方法。既然我們確定使用公司ID租戶(每個公司都有一套不同的員工和他們的任務等),我的問題是

我們需要在任務表中的companyId鍵也讓每一個記錄 的任務可以使用公司Id或OR明確標識,我們應該始終使用Join?

因爲如果我們在任務中使用companyId將不會是一個適當規範化的數據庫,因爲任務將涉及公司和員工,這也與公司有關。

回答

0

這是一個意見。我的看法是將companyId作爲主鍵的一部分,因此是每個表中的必填字段。

在多租戶應用程序中,我們應該確保數據不會在沒有公司代碼的情況下添加到表中。沒有將它作爲主鍵或非空字段的一部分,就需要程序邏輯來確保這一點。在我看來,DB也應該保證。第二個問題是與表任務ID。 2家公司有可能擁有相同的員工編號和相同的任務ID。數據庫不應限制這一點。

+0

任何id(Employeeid,CompanyId,TaskId)是數據庫工件,對用戶不可見,不能由用戶以任何方式操作。 –

+0

同意它不能被用戶操縱。當你有新的租戶將使用類似的ID給現有的租戶時,麻煩就會發生。要麼你的應用程序邏輯必須覆蓋,否則你可能會突然間出現錯誤的結果。我的建議是在桌面上確保不同的租戶數據可以存活,而不會對數據施加任何條件。 –

+0

他們不會使用相同的ID:例如,在不同的公司中有兩名同名的員工:**公司A的員工James **的ID爲45,但Z公司的詹姆斯的ID爲678.用戶訪問員工:James,但如果他是A公司的用戶,ID是45,但如果來自Z公司的用戶是678. –