数据库-在复合键值上创建序列

时间:2018-09-25 20:58:50

标签: sql sql-server hash sequence

这是一个数据库设计方案,其中有几个带有模式的表:

TABLEx (Id varchar(20), BackupTime datetimeoffset, Name varchar(50), Modstamp datetimeoffset)

围绕数据库架构构建一个应用程序,该数据库架构(Id,BackupTime)是一个组合键。每次在某个时间点使用值检索数据

Id, Name, Modstamp
1, TestAccount, 2018-09-17T19:54:55.000Z
2, TestAccount1, 2018-09-17T19:54:55.000Z
3, DummyAccount2, 2018-09-17T20:58:51.000Z
插入

并将BackupTime值作为当前时间。假定ID在检索时是唯一的。

当我遇到特定数据源的数据看起来像这样的场景时,这被证明是错误的:

Id, Name, ReferenceValue, Modstamp
1, Problem1, Reference1, 2018-09-17T19:54:55.000Z
1, Problem2, Reference1, 2018-09-17T19:54:55.000Z
1, Problem1, Reference2, 2018-09-17T20:58:51.000Z

及其外观,数据基于[Name,ReferenceValue]的复合键。由于这种异常,我不希望更改应用程序。该数据基于其他操作的Id和BackupTime字段。我想基于复合键[Name,ReferenceValue]生成一个序列。有没有一种方法可以针对这种特定情况生成varchar(20)的自动序列?这将是一种生成适合varchar(20)的哈希的方法。

1 个答案:

答案 0 :(得分:0)

我不知道这是否适用于您的情况,但是当我过去不得不这样做以获取其他列组合的唯一键时,我已经这样做了:

1)创建一个包含唯一组合的表:

create table UniqueNameRef(UNameRef int identity not null primary key, Name varchar(20), Ref vrchar(20))

2)将任何新的唯一组合插入该表,在此示例中,数据为

insert UniqueNameRef(Name,Ref) 
select distinct Name, ReferenceValue 
from TABLEx 
where not exists(select * from UniqueNameRef where UniqueNameRef.Name=TABLEx.Name and UniqueNameRef.Ref=TABLEx.ReferenceValue)

3)从该表中查找,以获取组合的唯一UNameRef。

select Name, ReferenceValue, UNameRef 
from TABLEx
join UniqueNameRef on UniqueNameRef.Name=TABLEx.Name and UniqueNameRef.Ref=TABLEx.ReferenceValue