Уникальное ограничение на два внешних ключа всегда должно быть другой комбинацией

У меня есть таблица с именем Followers, которая содержит один столбец PK и два столбца FK, в которых будут храниться целые числа таблицы с именем User. Однако я не хочу иметь реплицированные значения в столбцах - комбинация двух FK всегда должна быть разной. Как я могу это сделать?


person Milos Novakovic    schedule 07.05.2018    source источник
comment
Возможный дубликат Добавить уникальное ограничение для комбинации двух столбцов   -  person Michał Turczyn    schedule 07.05.2018
comment
Без DDL и четкого описания вашего требования возможны только предположения. Считаете ли вы, что набор значений (1, 2) отличается от (2, 1) - игнорируя столбец первичного ключа вашего идентификатора?   -  person SMor    schedule 07.05.2018


Ответы (2)


Создайте один уникальный ключ для обоих столбцов

person Aswani Madhavan    schedule 07.05.2018

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

Чтобы продемонстрировать, давайте предположим следующий надуманный сценарий.

create table User (
  Id int identity primary key,
  name varchar(255) not null
);
go

create table Follower (
  Id int identity primary key,
  UserId int foreign key references User(Id),
  FollowerId int foreign key references User(Id)
);
go

Чтобы обеспечить уникальность UserId и FollowerId, добавьте следующий уникальный индекс.

create unique index ux_follower_userid_followerid
  on Follower
  (
    UsrId
    ,FollowerId
  );
go

Обратите внимание, что обычно рекомендуется также включать некластеризованные индексы в столбцы внешнего ключа для облегчения соединений.

person pim    schedule 07.05.2018