Как создать уникальную комбинацию столбцов базы данных сервера 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