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

how to maintain friend requests data in sqlserver

我在我的应用程序中有一个要求,其中一个用户可以将好友请求发送给另一个用户。我们使用 SQL 服务器数据库作为后端。 table的结构是这样的

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 批准了用户 A 的好友请求,将用户数据存储在一个名为好友 table 的单独 table 中是否是个好主意?一旦用户 B 批准了用户 A 的请求,则需要向朋友 table 中插入两条记录,其中 col1 包含用户 A,col2 包含用户 B。同时我们还应该在 col1 中插入一条包含用户 B 的记录,并且col2 中的用户 A?或者两条记录是不必要的?

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

If user A sends a friend request to user B, then the friend request from user B to User A should still valid?

否,出现一个对话框You have already recieved a Friend Request from {name}。同样从 B 的角度来看,A 的 link 到 Send Friend Request 应该用相应的代码更改为 Respond to friend request

Is it a good idea to store the users data in a separate table called friends...?

不,一条记录就够了。此外,您可以有一个新列来维护状态 status={blocked|friends|pending}

嗯,这就是我的想法。您是免费的,因为该应用程序是您的。也作为用户思考。

Is it a good idea to store the users data in a separate table called friends table once User b approves user A friend request ?

不,在数据库中复制数据几乎不是一个好主意。如果两个地方的相同数据具有两个不同的值,您可能会出现异常。哪个值是正确的值?

这是维持关系的一种方法

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

Friend
------
User ID 1
User ID 2
...

在好友table中,主键是(用户ID 1,用户ID 2)。您还将在 (User ID 2, User ID 1) 上有一个唯一索引。如果您想为每个关系设置一行或两行,则由您决定。

一行意味着你必须用 UNION 做两个 SELECTS。一个 SELECT 使用主键,一个 SELECT 使用唯一索引。

两行表示您使用主键执行 SELECT。

您有与 FriendRequest 相同的一行/两行选择 table。

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

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