两个外键的唯一约束始终是不同的组合
Posted
技术标签:
【中文标题】两个外键的唯一约束始终是不同的组合【英文标题】:Unique constraint on two foreign keys to always be a different combination 【发布时间】:2018-05-07 09:47:02 【问题描述】:我有一个名为 Followers 的表,其中包含一个 PK 列和两个 FK 列,它们将存储名为 User 的表的整数。但是我不想在列中复制值 - 两个 FK 的组合需要始终不同。我该怎么做?
【问题讨论】:
Add unique constraint to combination of two columns的可能重复 没有 DDL 和对您的要求的清晰描述,只能猜测。您是否认为值集 (1, 2) 不同于 (2, 1) - 忽略您的身份主键列? 【参考方案1】:为两列创建一个唯一键
【讨论】:
【参考方案2】:独特的index 或constraint 将解决您的问题。唯一约束在幕后实现为唯一索引,因此您对任一解决方案的选择都是微不足道的。
为了演示,让我们假设以下人为场景。
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
请注意,通常建议在外键列上也包含非聚集索引以促进连接。
【讨论】:
以上是关于两个外键的唯一约束始终是不同的组合的主要内容,如果未能解决你的问题,请参考以下文章