多租户主键的最佳方法

Pau*_*een 9 sql primary-key multi-tenant

我有几个客户使用的数据库.我真的不希望代理增量键值在客户端之间流血.我希望编号从1开始,并且是特定于客户端的.

我将使用两部分复合键tenant_id以及增量ID.

为每个租户创建增量密钥的最佳方法是什么?

我正在使用SQL Server Azure.我担心锁定表,重复键等.我通常将主键设置为IDENTITY并继续前进.

谢谢

Tim*_*ine 2

您计划将来使用 SQL Azure 联合吗?如果是这样,当前版本的 SQL Azure 联合不支持使用 IDENTITY 作为聚集索引的一部分。有关更多详细信息,请参阅使用 guid 作为 SQL Azure(联合)中表的聚集索引的替代方案

如果您还没有查看过联合,您可能想查看一下,因为它提供了一种有趣的方法来对数据库进行分片并在数据库内进行租户隔离。

根据您的最终目标,使用联合,您可能能够使用 GUID 作为表上的主聚集索引,并且还可以在表上使用增量 INT IDENTITY 字段。该 INT IDENTITY 字段可以显示给最终用户。如果您在 TenantID 上进行联合,每个“租户表”实际上会成为一个筒仓(至少据我所知),因此在该表中的字段上使用 IDENTITY 实际上将是一个不断增加的自动生成值,该值在给定租户内递增。

当 \ 如果数据合并在一起(合并来自多个租户的数据)时,您将最终在此 INT IDENTITY 字段上发生冲突(因此不支持将 IDENTITY 作为联合中的主键),但只要您不使用此字段字段作为整个系统内的唯一标识符应该没问题。