Database design 如何为多个域设计数据库?
如果我有两个或多个域和一个数据库,如何设计数据库和组织数据?所有用于电子商务目的的网站和一个商品可以在每个网站上出售。所以我只有两个想法:Database design 如何为多个域设计数据库?,database-design,multi-tenant,Database Design,Multi Tenant,如果我有两个或多个域和一个数据库,如何设计数据库和组织数据?所有用于电子商务目的的网站和一个商品可以在每个网站上出售。所以我只有两个想法: 我需要在几乎每个表和重复数据中再创建一个字段(site_id) 我需要为其他表中的所有其他字段创建一个包含站点id信息的表 这两种想法都有很大的缺点。有什么想法吗?谢谢。您的模式中可能有一小部分表链接到所有其他表。您需要将站点id放在这些表中,而不是数据库中的每个表中 对于(一个精心设计的)示例,如果我的模式包括一个Customers表、一个Invoices
这两种想法都有很大的缺点。有什么想法吗?谢谢。您的模式中可能有一小部分表链接到所有其他表。您需要将站点id放在这些表中,而不是数据库中的每个表中
对于(一个精心设计的)示例,如果我的模式包括一个Customers表、一个Invoices表和一个Invoices Line Items表,那么我不需要在所有三个表中都使用site_id。我只需要客户表中的站点id。我认为Wordpress和Drupal使用的方法之一是在表前面加上名称:
dom1_Customers
dom2_Customers
通过这种方式,表不会按比例增长,您也不必维护站点id的额外索引。也就是说,您的代码必须对其进行补偿,这可能需要一些重新实现(并且存储过程基本上没有任何问题)。在构建多租户系统时,这是一个典型的问题。我在这件事上听到了一些不同的意见,但基本上分为两大阵营:
site\u id
)。这种方法的倡导者认为,易于识别数据所属的租户是一个主要的好处,并对数据的归档方式产生了影响(即为不同的客户提供不同的表空间)- 通过ORM工具创建连贯的对象模型变得很困难
- 这种方法不能很好地扩展到大量客户——如果您有70000个客户必须从一个数据库获得服务,那么您将有70000组表
- 必须为SQL语句动态生成表名
关于通过具有相似名称的单独表进行水平分区,请使用SQLServer2005和更高版本。它具有分区功能,因此不再担心数据大小。多数据库是不可能的吗?这似乎是最简单和最干净的一个,您不可能将一个tennants数据与另一个的数据混淆。。
租户信息需要一个主数据库,每个tennant需要一个db。假设客户不在站点之间共享。这样的决定以后通常会非常后悔,尤其是在数据库中实现了N+个其他站点之后。您可能有多少个站点?1, 10, 1000, 10000? 基于此,人们的答案会有所不同。