Sql server 如何在sqlserver中维护好友请求数据

Sql server 如何在sqlserver中维护好友请求数据,sql-server,database,database-design,Sql Server,Database,Database Design,我的应用程序中有一个要求,一个用户可以向另一个用户发送好友请求。我们使用SQL Server数据库作为后端。桌子的结构是这样的 CREATE TABLE FriendStatus (FriendStatusId BIGINT PRIMARY KEY IDENTITY(1,1), FromUserId BIGINT, ToUserId BIGINT, StatusId TINYINT, SentTime DATETIME2, ResponseTime DATETIME2); 我有几个与此相关的问

我的应用程序中有一个要求,一个用户可以向另一个用户发送好友请求。我们使用SQL Server数据库作为后端。桌子的结构是这样的

CREATE TABLE FriendStatus
(FriendStatusId BIGINT PRIMARY KEY IDENTITY(1,1),
FromUserId BIGINT,
ToUserId BIGINT,
StatusId TINYINT,
SentTime DATETIME2,
ResponseTime DATETIME2);
我有几个与此相关的问题: 如果用户A向用户B发送好友请求,那么用户B向用户A发送的好友请求是否仍然有效?我觉得应该是这样,让我知道是否有更好的方法来处理这个问题


一旦用户b批准了用户的好友请求,将用户数据存储在一个名为friends table的单独表中是一个好主意吗?一旦用户B批准用户A请求,则需要将两条记录插入friends表,其中col1包含用户A,col2包含用户B。同时,我们是否也应该在col1中插入用户B的记录,并在col2中插入用户A的记录?或者两条记录是不必要的?

我将从Facebook上举几个例子来回答

如果用户A向用户B发送好友请求,则该好友请求 从用户B到用户A仍然有效吗

否,将出现一个对话框
您已经收到来自{name}
的好友请求。同样从B的角度来看,指向A的
发送好友请求
链接应更改为
使用相应的代码响应好友请求

将用户数据存储在名为friends…(朋友)的单独表中是一个好主意吗

不,一张唱片就够了。此外,您还可以使用一个新列来维护状态
status={blocked | friends | pending}


那是我的主意。你是自由的,因为申请是你的。也要以用户的身份思考。

我将从Facebook上举几个例子来回答

如果用户A向用户B发送好友请求,则该好友请求 从用户B到用户A仍然有效吗

否,将出现一个对话框
您已经收到来自{name}
的好友请求。同样从B的角度来看,指向A的
发送好友请求
链接应更改为
使用相应的代码响应好友请求

将用户数据存储在名为friends…(朋友)的单独表中是一个好主意吗

不,一张唱片就够了。此外,您还可以使用一个新列来维护状态
status={blocked | friends | pending}

那是我的主意。你是自由的,因为申请是你的。也要以用户的身份思考

一旦用户b批准了用户的好友请求,将用户数据存储在一个名为friends table的单独表中是一个好主意吗

不,在数据库中复制数据几乎从来都不是一个好主意。如果两个位置的相同数据具有两个不同的值,则可能会出现异常。哪个值是正确的值

这里有一个维持这种关系的方法

User
----
User ID
User Name
...

Friend
------
User ID 1
User ID 2
...
在Friend表中,主键是(用户ID 1,用户ID 2)。您还将在上有一个唯一的索引(用户ID 2,用户ID 1)。如果您希望每个关系有一行或两行,则由您决定

一行意味着您必须用一个并集进行两次选择。一个选择使用主键,另一个选择使用唯一索引

两行表示使用主键进行选择

FriendRequest表具有相同的一行/两行选项

FriendRequest
-------------
User ID 1
User ID 2
Status
Sent Time Stamp
Accepted Time Stamp
...
每个请求可以有一行或两行。在这种情况下,我更喜欢一行,因为我可以确定是哪个用户发起了好友请求

一旦用户b批准了用户的好友请求,将用户数据存储在一个名为friends table的单独表中是一个好主意吗

不,在数据库中复制数据几乎从来都不是一个好主意。如果两个位置的相同数据具有两个不同的值,则可能会出现异常。哪个值是正确的值

这里有一个维持这种关系的方法

User
----
User ID
User Name
...

Friend
------
User ID 1
User ID 2
...
在Friend表中,主键是(用户ID 1,用户ID 2)。您还将在上有一个唯一的索引(用户ID 2,用户ID 1)。如果您希望每个关系有一行或两行,则由您决定

一行意味着您必须用一个并集进行两次选择。一个选择使用主键,另一个选择使用唯一索引

两行表示使用主键进行选择

FriendRequest表具有相同的一行/两行选项

FriendRequest
-------------
User ID 1
User ID 2
Status
Sent Time Stamp
Accepted Time Stamp
...

每个请求可以有一行或两行。在这种情况下,我更喜欢一行,因为我可以确定是哪个用户发起了好友请求。

您问我们的业务规则是什么?您问我们的业务规则是什么?