2011-10-26 120 views
1

我只是想通過這裏的一些有能力的人來運行這個模型。數據模型多租戶網站

這種情況是,我做了一個ASP MVC 3網店,這將是由多家公司使用。

一個代碼庫,多個網站。

Ex。我有:

  • company1.acme.com
  • company2.acme.com

他們都應該使用相同的代碼庫,但對於用戶在網絡商店中的數據應該是不同的。

所以我做了這個簡單的數據模型: enter image description here

Site我店所有關於該公司,前的信息。主機= company1。

在所有表格中使用Host作爲PK是否正確?

這個模型如何改進?

UPDATE:對所有表 enter image description here

回答

1

我添加了一個「多租戶」標籤爲您服務。

This SO answer有一個簡明的結構方法的概要,並鏈接到一個文章,有更多的細節。

+0

謝謝!我幾乎決定採用'共享數據庫,共享模式'的方法。現在我只想看看我的模型是否足夠好。正如我上面評論的,我希望每個Tennant都有自己的編號系列,至少可以有定居點和物品,因爲我看到我的模型涵蓋了這個系列,但這是最佳做法嗎? – Martin

+0

我認爲您的結算ID號碼和項目ID號碼的覆蓋範圍是好的。您可以編寫函數來自動填充它們。但是你需要刪除很多名爲「ID」的列。聯合總是需要包含租戶標識符(在您的情況下爲「主機」),以防止將一個租戶的數據泄漏到另一個租戶的查詢中。 –

+0

不完全確定我是否得到了你的意思,但是你需要刪除很多名爲「ID」的列。我更新了我的模型(上圖),重命名了所有ID。但是它自己的模型幾乎是一樣的。但是,如果你沒有看到任何懸念,我想我會選擇這種模式。 – Martin

2

存儲主機冗餘/非規範化的,如果它是不是關鍵的一部分。

SettlementSettlementLine爲例。 SettlementLine只需要知道約SettlementID,並可以通過加入Settlement表獲得主機。

至少如果ID是自動編號,則主機不應位於其他表的PK(僅限FK)。

我將有表

Site 
---- 
Host (PK) 
Name 

Item 
---- 
ID Autonumber PK 
Host (FK Site.Host) 
Name 

SettlementLine 
-------------- 
ID Autonumber PK 
SettlementID (FK Settlement.ID) 
ItemID (FK Item.ID) 

Settlement 
---------- 
ID Autonumber PK 
Host (FK Site.Host, Profile.Host) 
UserName (FK Profile.UserName) 

Profile 
------- 
UserName PK 
Host PK (FK Site.Host) 
Name 
+0

感謝您的回答。我想要的是我可能希望每個公司都有自己的定居點和結算線號碼系列。因此,ID 1可以是公司1和公司2的ID,那麼我需要在這些表中的主機作爲PK。但我不知道這是否是最好的解決方案。 – Martin

+0

@Martin - 您提供的系統分配值是否是「ID」列,如IDENTITY或用戶分配的值? – StingyJack

+0

我還沒有決定,最簡單的就是自動分配它。但我也可能希望客戶至少在物品上創建自己的ID。結算可以是一個自動分配的ID,但我仍想分開ID,這樣公司1的結算ID爲1,公司2的結算ID爲1. – Martin