如何创建一个由两个外键组成的主键,'是相同的键',无论值是什么顺序?

时间:2017-03-16 11:46:08

标签: sql sql-server

我正在尝试使用朋友系统设置后端,用户可以在其中发送朋友请求并成为朋友等。

为实现这一目标,我制作了一个带有主键的友谊表(User1Id,User2Id)。 User1Id将始终是首先发送好友请求的用户。

如何让我的数据库处理主键,以便主键(123,456)的条目与(456,123)的键相同?

1 个答案:

答案 0 :(得分:1)

除了实际列User1Id, User2Id之外,您还可以创建两个持久计算列,并将这些列作为主键:

CREATE TABLE [dbo].[Test](
    [ID1] [int] NOT NULL,
    [ID2] [int] NOT NULL,
    [SortedID1]  AS (case when [ID1]<[ID2] then [ID1] else [ID2] end) PERSISTED NOT NULL,
    [SortedID2]  AS (case when [ID1]<[ID2] then [ID2] else [ID1] end) PERSISTED NOT NULL,
 CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
    [SortedID1] ASC,
    [SortedID2] ASC
))

在上面的示例中,列SortedID1的值最小为ID1ID2SortedID2为最大值。因此,无论您如何在SortedID1, SortedID2(123, 456)中输入这些值,ID1对始终为ID2