我正在尝试使用朋友系统设置后端,用户可以在其中发送朋友请求并成为朋友等。
为实现这一目标,我制作了一个带有主键的友谊表(User1Id,User2Id)。 User1Id将始终是首先发送好友请求的用户。
如何让我的数据库处理主键,以便主键(123,456)的条目与(456,123)的键相同?
答案 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
的值最小为ID1
和ID2
,SortedID2
为最大值。因此,无论您如何在SortedID1, SortedID2
和(123, 456)
中输入这些值,ID1
对始终为ID2
。