我們目前正在使用ASP.net和Microsoft SQL Server 2012構建一個Web應用程序。 我們的每個客戶都有能力在其下添加其他客戶。每個客戶端的新數據庫或索引鍵?
本公司 - >我們的客戶 --->客戶的客戶
是它最好爲每個客戶的創建一個新的數據庫,或只使用一個單獨的表中,並自動在他們的GUI應用密鑰篩選?
我們目前正在使用ASP.net和Microsoft SQL Server 2012構建一個Web應用程序。 我們的每個客戶都有能力在其下添加其他客戶。每個客戶端的新數據庫或索引鍵?
本公司 - >我們的客戶 --->客戶的客戶
是它最好爲每個客戶的創建一個新的數據庫,或只使用一個單獨的表中,並自動在他們的GUI應用密鑰篩選?
從你所描述的(簡要)我不會建議有一個單獨的數據庫爲每個客戶端。如果每個客戶端都獲得他們自己的應用程序/網站,那麼是的,您可能希望讓每個客戶端擁有自己的數據庫實例(以及應用程序,服務器等)。在這種情況下,每個客戶似乎都需要互相交流。如果它們位於各種數據庫中很難做到。相反,請考慮爲客戶創建使用遞歸表的規範化數據庫模式。您可以創建一個類似於這樣的一個模式:
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
如果您有任何其他問題,請告訴我。
這一切都取決於預期的規模。如果您預計「我們的客戶」將是十個,那麼單獨的數據庫可能正常工作,但瞭解多個數據庫會增加管理成本。
但如果「我們的客戶」將是100或1000長期。你想管理1000個單獨的數據庫嗎?這裏
一個很好的參考是微軟的Multi-Tenant Data Architecture。
我個人的建議(基於與兩個生產的SaaS系統的經驗)是有一個單一的數據庫和一個表。
客戶表(認爲這是租戶):
客戶(承租人)客戶表:
參見[這個問題](http://dba.stackexchange.com/questions/33782/one-database-per-company-for-security-reasons)對DBA現場 – Pondlife 2013-05-09 16:34:00