gpt4 book ai didi

SQL - Friendship 表的最佳实践

转载 作者:行者123 更新时间:2023-12-02 09:10:13 25 4
gpt4 key购买 nike

Before you show me duplicates, please note that I've searched through the site an have found some examples but not quite specific to my problem :)

在 SQL 中创建 Friendship 表的最佳方法是什么,但要确保每一行都是唯一的,因为无论属于哪一列,都不会允许使用相同的 UserID 和 FriendID ?

我有这个粗略的例子

CREATE TABLE [dbo].[Friendship](
[UserID] [uniqueidentifier] NOT NULL,
[FriendID] [uniqueidentifier] NOT NULL,
[FriendshipStatus] [int] NOT NULL
)

Users 表有 2 个外键,分别来自 UserID 和 FriendID。

目前,我可以在用户之间插入友谊两次,从而创建一个副本。示例

UserID    FriendID    FriendshipStatus
Guid 123 Guid 789 1
Guid 789 Guid 123 1

我如何确保这种完整性得到执行,也许是2 PK?某种唯一索引?或者您会建议更好的 table 设计吗?另外,您会添加一个自动递增的 FriendshipID 吗?如果是这样,您能解释一下原因吗?

最佳答案

FRIENDSHIP 表的主键设置为:

  • 用户ID
  • friend ID

...将确保您不能按顺序出现重复项。这意味着,它将阻止您添加用户 ID“123”和 friend ID“789”的重复项。如果您包含状态列,情况就不再是这样,因为不同的状态值将允许用户 ID 和 friend ID 列重复。

停止反向对

为了停止反向对(用户 ID“789”和 friend ID“123”),您需要包含逻辑来检查该对是否已存在于存储过程、函数或触发器的表中。如果反向操作尚不存在,则 userid

INSERT INTO FRIENDSHIP
SELECT @userid, @friendid, 1
FROM FRIENDSHIP f
WHERE NOT EXISTS(SELECT NULL
FROM FRIENDSHIP t
WHERE (t.userid = @friendid AND t.friendid = @userid)
OR (t.userid = @userid AND t.friendid = @friendid)

关于SQL - Friendship 表的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4219979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com