Sql server 两个外键上的唯一约束始终是不同的组合

Sql server 两个外键上的唯一约束始终是不同的组合,sql-server,database,mssql-jdbc,Sql Server,Database,Mssql Jdbc,我有一个名为Followers的表,其中包含一个PK列和两个FK列,它们将存储名为User的表的整数。但是,我不想在列中复制值-两个FK的组合必须始终不同。如何操作?为两列创建一个唯一键为两列创建一个唯一键一个唯一键或将解决您的问题。唯一约束在幕后实现为唯一索引,因此您对任一解决方案的选择都很简单 为了演示,让我们假设以下人为场景 create table User ( Id int identity primary key, name varchar(255) not null );

我有一个名为Followers的表,其中包含一个PK列和两个FK列,它们将存储名为User的表的整数。但是,我不想在列中复制值-两个FK的组合必须始终不同。如何操作?

为两列创建一个唯一键

为两列创建一个唯一键

一个唯一键或将解决您的问题。唯一约束在幕后实现为唯一索引,因此您对任一解决方案的选择都很简单

为了演示,让我们假设以下人为场景

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
请注意,通常建议在外键列上也包含非聚集索引,以方便连接

一个独特的解决方案将解决您的问题。唯一约束在幕后实现为唯一索引,因此您对任一解决方案的选择都很简单

为了演示,让我们假设以下人为场景

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
请注意,通常建议在外键列上也包含非聚集索引,以方便连接


如果没有DDL和对您的需求的清晰描述,则只有猜测是可能的。您是否考虑不同于(2, 1)的值集(1, 2)-忽略您的标识主键列?可能没有DDL的副本和对您的需求的清晰描述,只有猜测是可能的。您是否考虑不同于(2, 1)的值集(1, 2)-忽略您的标识主键列?