给定位置的全局唯一基于整数的ID(顺序)

时间:2020-03-06 14:57:13  来源:igfitidea点击:

我需要为给定位置创建一个唯一的ID,并且该位置的ID必须是连续的。因此,它基本上就像一个主键,除了它也与locationID绑定在一起。所以3个不同的位置都有ID,例如1,2,3,4,5,...,n

做这个的最好方式是什么?
我还需要一种获取给定位置的nextID的安全方法,我想我可以将事务放在获取下一个ID的存储过程中?

解决方案

我们将需要同时包装代码以查找下一个ID和将行保存在同一事务中的代码。我们不需要(伪代码):

transaction {
   id = getId
}

... other processing

transaction {
   createRowWithNewId
}

因为可以在" ...其他处理"期间保存具有该ID的另一个对象

我看到的方法之一是创建一个将位置映射到下一个ID的表。

CREATE TABLE LocationID {
    Location varchar(32) PRIMARY KEY,
    NextID int DEFAULT(1)
}

在存储过程中,我们可以进行更新并获取当前值,同时还可以增加该值:

...
UPDATE LocationID SET @nextID = NextID, NextID = NextID + 1 WHERE Location = @Location
...

上面的内容可能不太便于携带,我们可能最终会获得递增的值,而不是当前的值。我们可以根据需要调整列的默认值。

另一件事要注意的是,我们将多久点击一次,以及是否要从另一个存储过程或者从应用程序代码点击它。如果它来自另一个存储过程,则一次可以存储一个。如果要从应用程序代码中找到它,则最好获取一个范围的值,然后将它们一个接一个地添加到应用程序中,然后再获取另一个范围。如果该应用程序仍然有一半的已分配块关闭,则可能会在序列中留下空白。