Создание уникальной колонки varchar (500) - PullRequest
3 голосов
/ 03 октября 2011

У меня есть требование сделать столбец varchar (500) уникальным.
Установка ограничения уникальности не будет работать, поскольку она пересекает ограничение размера уникальности.
Тогда, какова была бы лучшая стратегия, чтобы сделать колонку уникальной?

Ответы [ 2 ]

4 голосов
/ 03 октября 2011

Создайте другое поле с HASH этого varchar(500) и поместите UNIQUE CONSTRAINT в поле хеша: HASHBYTES('md5', MyLongVarcharField)

Это приведет к снижению производительности, но если у вас есть varchar(500), где вынеобходимо обеспечить уникальность Я предполагаю, что производительность в любом случае не находится на первом месте в ваших соображениях.

РЕДАКТИРОВАТЬ:

Чтобы прояснить, вероятность получения двух строкто же самое 128-битное хеш-значение 1 in 340,282,366,920,938,000,000,000,000,000,000,000,000.Маловероятно, но не категорически невозможно , что вы могли бы столкнуться.

Если вы все еще обеспокоены этим, вы можете использовать SHA или SHA1 алгоритмы, которые имеют 160 бит.

0 голосов
/ 04 октября 2011

Вы можете использовать триггер DML на INSERT и UPDATE. Это позволяет использовать хеш. Я выбрал триггер AFTER для простоты, но это легко сделать и с помощью триггера INSTEAD OF.

create trigger dml_EnforceUniqueVal
on dbo.UniqueBigColumn
after insert, update
as  
    declare @CountOfRepeats int
    select @CountOfRepeats = COUNT(*)
    from UniqueBigColumn
    where somestring in
    (
        select somestring
        from inserted
    )

    if @CountOfRepeats > 1
        rollback
go
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...