2013-05-08 45 views
0

我們目前正在使用ASP.net和Microsoft SQL Server 2012構建一個Web應用程序。 我們的每個客戶都有能力在其下添加其他客戶。每個客戶端的新數據庫或索引鍵?

本公司 - >我們的客戶 --->客戶的客戶

是它最好爲每個客戶的創建一個新的數據庫,或只使用一個單獨的表中,並自動在他們的GUI應用密鑰篩選?

+0

參見[這個問題](http://dba.stackexchange.com/questions/33782/one-database-per-company-for-security-reasons)對DBA現場 – Pondlife 2013-05-09 16:34:00

回答

0

從你所描述的(簡要)我不會建議有一個單獨的數據庫爲每個客戶端。如果每個客戶端都獲得他們自己的應用程序/網站,那麼是的,您可能希望讓每個客戶端擁有自己的數據庫實例(以及應用程序,服務器等)。在這種情況下,每個客戶似乎都需要互相交流。如果它們位於各種數據庫中很難做到。相反,請考慮爲客戶創建使用遞歸表的規範化數據庫模式。您可以創建一個類似於這樣的一個模式:

tblOurCompany

companyId(PK INT)

的companyName(VARCHAR) ....

tblOurCustomers

custId(pk int)

CUSTNAME(VARCHAR)

custParent(INT)

tblCompany_Customer

companyId(PK)

客戶ID(PK)

此快速模擬起來是具有表一個公司表(假設你有多家公司或者這可能是業務單位)和一張顧客表。因爲您可能擁有多個擁有多個客戶的公司,所以您需要擁有一個統一它們的表,即company_customers表。這個設計的關鍵在於客戶表的遞歸設計。每個表都有一個customerID,它是主鍵,還有一個父ID。父ID只是在客戶表中找到的另一個客戶的PK(根父可能具有值0)。例如:

companyId | companyName | ParentId 
----------------------------------- 
1    CompanyA  0 
2    CompanyB  0 
3    CompanyC  1 
4    CompanyD  1 
5    CompanyE  4 

這個例子有5家公司。兩個是根公司(公司A/B)。公司A有兩個孩子(C和D)。 CompanyE有一個孩子,CompanyD。

理解數據庫規範化非常重要。如果你想遵循你的第一個願望,爲每個客戶使用不同的數據庫,那麼你將花費更多的錢(數據庫許可證花錢+服務器成本+空間等),並且在獲取數據時造成不必要的困難並使用SQL和任何應用程序使用它。下面是正常化的快速介紹:http://databases.about.com/od/specificproducts/a/normalization.htm

如果您有任何其他問題,請告訴我。

0

這一切都取決於預期的規模。如果您預計「我們的客戶」將是十個,那麼單獨的數據庫可能正常工作,但瞭解多個數據庫會增加管理成本。

但如果「我們的客戶」將是100或1000長期。你想管理1000個單獨的數據庫嗎?這裏

一個很好的參考是微軟的Multi-Tenant Data Architecture

我個人的建議(基於與兩個生產的SaaS系統的經驗)是有一個單一的數據庫和一個表。

客戶表(認爲這是租戶):

  • PK:TenantID

客戶(承租人)客戶表:

  • PK:TenantID,客戶ID
  • FK:TenantID
相關問題