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

时间:2018-05-07 09:47:03

标签: sql-server database mssql-jdbc

我有一个名为Followers的表,其中包含一个PK列和两个FK列,它们将存储名为User的表的整数。但是我不希望在列中复制值 - 两个FK的组合需要始终不同。我该怎么做?

2 个答案:

答案 0 :(得分:1)

为两列创建单个唯一键

答案 1 :(得分:0)

独特的indexconstraint将解决您的问题。独特的约束在幕后实现为唯一索引,因此您选择任一解决方案都是微不足道的。

为了演示,让我们假设以下设计方案。

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
  

请注意,通常还建议在外键列上包含非聚簇索引以便于连接。