我们目前正在使用ASP.net和Microsoft SQL Server 2012构建Web应用程序。 我们的每个客户都可以在其下方添加其他客户。
我们的公司 - >我们的顾客 --->客户的客户
是否最好为我们的每个客户创建一个新数据库,或者只使用一个单独的表并在其GUI中自动应用密钥过滤器?
答案 0 :(得分:0)
根据您所描述的(简要),我不建议为每个客户端分别使用DB。如果每个客户端都有自己的应用程序/网站,那么是的,您可能希望每个客户端都有自己的数据库实例(以及应用程序,服务器等)。在这种情况下,似乎每个客户端都需要彼此交互。如果它们位于各种数据库中,则很难做到。相反,请查看为客户创建使用递归表的规范化数据库模式。您可以创建类似于以下内容的模式:
<强> 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只是在customer表中找到的另一个客户的pk(根父级可以具有值0)。例如:
companyId | companyName | ParentId
-----------------------------------
1 CompanyA 0
2 CompanyB 0
3 CompanyC 1
4 CompanyD 1
5 CompanyE 4
这个例子有5家公司。两个是根公司(CompanyA / B)。 CompanyA有两个孩子(C和D)。 CompanyE有一个孩子,CompanyD。
理解数据库规范化非常重要。如果你是按照你的第一个倾向为每个客户使用不同的数据库,那么你将花费更多的钱(数据库许可证需要花钱+服务器成本+空间等)并且在获取数据方面造成不必要的困难并使用SQL和任何可能正在使用它的应用程序使用它。下面是对标准化的快速介绍:http://databases.about.com/od/specificproducts/a/normalization.htm
如果您有任何其他问题,请与我们联系。
答案 1 :(得分:0)
这一切都取决于预期的规模。如果您希望“我们的客户”为10,那么单独的数据库可能正常工作,但要了解多个数据库的管理成本增加。
但是,如果“我们的客户”长期为100或1,000,那该怎么办?您想管理1,000个个人数据库吗?
这里的一个很好的参考是微软的Multi-Tenant Data Architecture。
我的个人建议(基于两个生产SaaS系统的经验)是拥有一个数据库和一个表。
客户表(将此视为租户):
客户(租户)客户表: