社交网络数据库设计 - FriendBlock关系

问题描述 投票:1回答:1

我正在做一个社交网站,需要用户能够互相加好友或者互相屏蔽。在我看来,两个用户可以是 Requestee (int), 待定, NULL. 我想用一个单一的视图来显示每个确认关系的单行。我的视图正确地显示了关系,但我不得不做了一个变通的办法,以只显示1行关系,而不将表与自己联合起来,并交换顺序或请求者和被请求者。

有人有什么办法可以清理这个问题吗?

谢谢,- Greg

关系表。

请求者(int)或阻止对方。在我看来,2个用户可以是Friend,Pending,Block,或者NULL。我想...

这是我最后用的。

SELECT DISTINCT 
                      CASE WHEN f.Requestor < f.Requestee THEN f.Requestor ELSE f.Requestee END AS UserA, 
                      CASE WHEN f.Requestor < f.Requestee THEN f.Requestee ELSE f.Requestor END AS UserB, CASE WHEN b.Requestor IS NULL AND b.Requestee IS NULL 
                      THEN CASE WHEN f.AcceptedTimestamp IS NULL THEN 'Pending' ELSE 'Friend' END ELSE 'Block' END AS Type
FROM         dbo.Relationship AS f LEFT OUTER JOIN
                          (SELECT     Requestor, Requestee
                            FROM          dbo.Relationship
                            WHERE      (IsBlock = 1)) AS b ON f.Requestor = b.Requestor AND f.Requestee = b.Requestee OR f.Requestor = b.Requestee AND f.Requestee = b.Requestor

谁能想到更好的办法?

sql-server database-design social-networking
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.