Как создать уникальную комбинацию столбцов базы данных сервера SQL

Я пытаюсь создать таблицу отношений, которая соединяет пользователей.

У меня есть следующая структура:

1. id
2. fromuserid
3. touserid
4. state (none, send, accepted, rejected)

Я хочу иметь ограничение, что любая пара из / в должна быть уникальной. Я имею в виду, что не должно быть записи, как

1, **123,124**, send 
2, **124,123**, send

Прежде всего я создал ограничение, что от!= До. Работает отлично:

CONSTRAINT [CK__FromUserId_ToUserId] CHECK (FromUserId != ToUserId), 

Затем я попытался создать уникальный индекс, ограничение и т. Д., Ничего не помогло.

CONSTRAINT [CK_FromUserId_ToUserId_Combination] UNIQUE (FromUserId, ToUserId)

или же

CREATE UNIQUE NONCLUSTERED INDEX [IX_FromUserId_ToUserId_Combination] 
  ON USERLINKS (FromUserId, ToUserId)

Оба прекрасно работают, чтобы отклонить записи, такие как:

1, 123,124,send 
2, 123,124,send

Но никто не работает, чтобы отклонить записи, такие как:

1, 123,124,send 
2, 124,123,send

пожалуйста, порекомендуйте

2 ответа

Решение

Вы можете сделать это с помощью вычисляемых столбцов. Добавьте столбцы "lessId" и "greatId", а затем создайте для них индекс:

alter table relationships
    add leastId as (case when fromuserid < touserid then fromuserid else touserid end);

alter table relationships
    add greatestId as (case when fromuserid < touserid then touserid else fromuserid end);

create unique index relatinonships_leastId_greastestId_Combination
    on relationships(leastId, greatestId, combination);

Используйте триггеры INSTEAD OF INSERT

http://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx

Другие вопросы по тегам