База данных - Создать последовательность по значению составного ключа - PullRequest
0 голосов
/ 25 сентября 2018

Это сценарий проектирования базы данных, в котором есть несколько таблиц со схемой:

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, 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 голосов
/ 26 сентября 2018

Я не знаю, будет ли это работать для вашего сценария, но когда мне приходилось делать это в прошлом, чтобы получить уникальный ключ для комбинации других столбцов, я делал это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...