我们目前正在使用 ASP.net 和 Microsoft SQL Server 2012 构建一个 Web 应用程序。我们的每个客户都可以在他们下面添加其他客户。
我们的公司 --> 我们的客户 ---> 客户的客户
是为我们的每个客户创建一个新数据库还是只使用一个单独的表并在他们的 GUI 中自动应用密钥过滤器?
我们目前正在使用 ASP.net 和 Microsoft SQL Server 2012 构建一个 Web 应用程序。我们的每个客户都可以在他们下面添加其他客户。
我们的公司 --> 我们的客户 ---> 客户的客户
是为我们的每个客户创建一个新数据库还是只使用一个单独的表并在他们的 GUI 中自动应用密钥过滤器?
根据您(简要)描述的内容,我不建议为每个客户使用单独的数据库。如果每个客户都有自己的应用程序/网站,那么是的,您可能希望每个客户都有自己的数据库实例(以及应用程序、服务器等)。在这种情况下,似乎每个客户端都需要相互交互。如果它们位于各种数据库中,则很难做到。相反,请考虑创建一个为客户使用递归表的规范化数据库模式。您可以创建类似于以下内容的架构:
tblOurCompany
公司ID(pk int)
公司名称(varchar) ....
tbl我们的客户
custId(pk int)
客户名称(varChar)
custParent(int)
tblCompany_Customer
公司ID(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 家公司。两个是根公司(CompanyA/B)。公司 A 有两个孩子(C 和 D)。CompanyE 有一个孩子,CompanyD。
了解数据库规范化很重要。如果您按照最初的倾向为每个客户使用不同的数据库,那么您将花费更多的钱(数据库许可证成本 + 服务器成本 + 空间等)并在获取数据时造成不必要的困难并使用 SQL 和任何可能使用它的应用程序来处理它。下面是规范化的快速介绍:http: //databases.about.com/od/specificproducts/a/normalization.htm
如果您有任何其他问题,请告诉我。
这一切都取决于预期的规模。如果您预计“我们的客户”将是 10 个,那么单独的数据库可能会正常工作,但要了解多个数据库会增加管理成本。
但是,如果“我们的客户”长期为 100 或 1,000 个呢?您想管理 1,000 个单独的数据库吗?
这里的一个很好的参考是 Microsoft 的Multi-Tenant Data Architecture。
我个人的建议(基于两个生产 SaaS 系统的经验)是拥有一个数据库和一个表。
客户表(将其视为租户):
客户(租户)的客户表: