我正在使用 ASP Web API、实体框架和 SQL Server/Azure 数据库构建多租户应用程序(单一数据库、单一架构)。此应用程序将被 1000-5000 名客户使用。所有的表都会有TenantId
(Guid / UNIQUEIDENTIFIER
) 字段。现在,我使用单字段主键,即 Id (Guid)。但是通过仅使用 Id 字段,我必须检查用户提供的数据是否来自/用于正确的租户。例如,我有一个SalesOrder
包含CustomerId
字段的表。每次用户发布/更新销售订单时,我都必须检查它CustomerId
是否来自同一个租户。情况变得更糟,因为每个租户可能有多个网点。然后我必须检查TenantId
和OutletId
。这真的是一个维护噩梦,对性能不利。
我想添加TenantId
主键沿Id
。也可能添加OutletId
。所以SalesOrder
表中的主键将是:Id
、TenantId
、 和OutletId
。这种方法的缺点是什么?使用复合键会严重影响性能吗?复合键顺序重要吗?我的问题有更好的解决方案吗?
index sql-server physical-design multi-tenant design-pattern