如何在多租户数据库中最好地生成唯一的用户编号而不会重复

Rod*_*o M 6 sql-server sql-server-2008

背景:

这是一个多租户应用程序,因此普通身份列将不起作用。所有表都有一个唯一的客户端标识符 Clients.id。所以每个客户可以有很多客户。为简单起见,下面不包括此列。

我们希望生成一个从 1000 开始的唯一客户编号。

我们将当前(最后)生成的数字存储在名为 的表中Master。让我们说Master.CustomerNumber。所以数字会变成 1001、1002 等,最后一个存储在那里。

所以每次我们添加一个客户时,我们都会有一个查询来查找当前值,增加它,然后将它插入到Customer.Number.

注意:我们使用的是 SQL Server 2008。我们在一个集群中有多个服务器。

确保如果同时添加两个客户,每个客户都获得唯一客户编号的最佳方法是什么?存储过程、锁定、CFLOCKING?

我如何确保这个进程是“单线程”的,并且不会发出两次相同的数字?

我确实有一个唯一的索引Customer.Number+Clients.id。我对如何在生成时保证唯一性的实现感兴趣。

Bad*_*Zen 0

您想使用 a Sequence,例如:

CREATE SEQUENCE Customer_Number_Seq
 AS INTEGER
 START WITH 1
 INCREMENT BY 1
 MINVALUE 1000
 MAXVALUE 100
 CYCLE;
Run Code Online (Sandbox Code Playgroud)

然后可能是这样的:

 CREATE TABLE Customers
(customer_nbr INTEGER DEFAULT NEXT VALUE FOR Customer_Number_Seq,
 .... other columns ....
Run Code Online (Sandbox Code Playgroud)

文档有更多详细信息。