我们目前正在使用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