【发布时间】:2015-06-23 23:23:18
【问题描述】:
我正在使用 ASP.NET Web Api、Entity Framework 和 SQL Server / Azure 数据库构建一个多租户应用程序(单个数据库、单个架构)。
此应用将被 1000-5000 名客户使用。所有表都将有一个 TenantId (Guid) 列。现在,我使用单列主键 Id (Guid)。
问题在于,我必须检查用户提供的数据是否来自/为正确的租户。例如,我有一个销售订单表,其中有一个 CustomerId 列。每次用户发布/更新销售订单时,我都必须检查CustomerId 是否来自同一个租户。
情况变得更糟,因为每个租户可能有多个网点。然后我必须检查 TenantId 和 OutletId。这真是一场维护噩梦,对性能不利。
我正在考虑将TenantId 与Id 一起添加为主键。也可能添加OutletId。所以销售订单表中的主键会有多个列,Id、TenantId、OutletId。
这种方法的缺点是什么?使用复合键会严重影响性能吗?复合键顺序重要吗?我的问题有更好的解决方案吗?
【问题讨论】:
-
只是要明确一点:任何表都可以有恰好一个主键 - 永远不会超过一个。该主键可能由多列组成 - 但它仍然只是一个主键
-
您能否以更好的方式解释这个问题?租户、客户、网点、销售等是什么关系,理解起来有点困难。
-
我正在开发一个销售点应用程序。租户是购买我产品的客户。每个租户都有一个或多个商店/商店。每个租户都向他的客户出售东西。希望能解决我的问题
-
@marc_s 注意到。我已经更新了我的问题。对不起我的英语
-
Reynaldi você usa GUID na chave primária turnê? O que o desempenho? Eu estou tenho uma tabela com 20 百万 linha
标签: sql-server entity-framework azure asp.net-web-api azure-sql-database