2013-05-08 61 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
相关问题