社交网络好友列表、朋友圈、帖子分享的数据库设计[关闭]

Posted

技术标签:

【中文标题】社交网络好友列表、朋友圈、帖子分享的数据库设计[关闭]【英文标题】:Database design for Social network friends list, friends circle, post sharing [closed] 【发布时间】:2011-12-29 01:18:58 【问题描述】:

我希望用户按照发布顺序查看最近的帖子,但前提是创建帖子的用户授予用户查看它们的权限。很像 google+ 圈子列表。

这是我的原创设计,如有任何改进建议,将不胜感激。

USER
Id
Name
...


POST
Id
Message
IsCloseFriendCanView
IsFamilyCanView
IsAcquaintanceCanView
IsDisabledComment
IsPostLock
CreatedByUserId
Created_Time
LastComment_Time 
...

POST_COMMENT
Id
PostId
Message
CreatedByUserId
Created_Time


FRIEND
Id
UserId
FriendUserId
IsCloseFriend
IsFamily
IsAcquaintance
IsBlocked
....

FRIEND_LIST (custom friends list only)
Id
UserId (owner)
FriendId
FriendListTypeId

FRIEND_LIST_TYPE 
Id
UserId
Name
...

POST_FRIEND (CAN VIEW)
Id
PostId
FriendId
....


POST_FRIEND_LIST (CAN VIEW - custom)
Id
PostId
FriendListTypeId
....

编辑:更新

【问题讨论】:

【参考方案1】:

不确定这是否是您想要的,但似乎您还需要一个表格来保存用户和朋友之间的关系

例如

FRIEND
user_id
friend_id
close_friend

在 POST 上,您需要确定它是否对“所有朋友”、“亲密朋友”或“公众”可见。

然后假设 $this_user 是登录用户或一些虚拟值,例如-1 如果未登录,您可以选择一个有效帖子列表,该列表将显示

    登录用户创建的帖子 登录用户的朋友创建的帖子对所有朋友可见 已登录用户的好友创建的帖子对密友可见 帖子设为公开

使用类似的东西

select p.id, p.message, 
  from POST p
 where createdbyuserid=$this_user 
    or (visible='F' 
        and exists (select 1 
                 from friend f 
                where p.createdbyuserid=f.user_id 
                  and f.friend_id=$this_user)
       )
    or (visible='C' 
        and exists (select 1 
                 from friend f 
                where p.createdbyuserid=f.user_id 
                  and f.friend_id=$this_user
                  and f.close_friend='Y')
       )
    or (visible='P')
 order by created_time

如果没有用户登录,则 $this_user 将设置为 -1,因此只有公开帖子可见。

然后您使用此选择的结果在后续选择中获取每个帖子的相关 cmets。

【讨论】:

酷,我认为你的方法比我的好:) 所以我们不需要 post_view 吗?您可以与朋友分享并排除朋友约翰、爱丽丝等的条件呢? 与朋友的分享应该通过在 FRIEND 表中的条目来处理。 Facebook 为密友添加了一项功能,因此为了模仿这一点,您可以在好友表中为密友 Y 或 N 添加一个标志,然后在 POST 表上,具有三个可见选项。我已经修改了原始答案中的 SQL 以反映这一点 谢谢特雷弗,好的,让我明白这一点,你如何满足所有朋友都可以看到约翰、鲍勃和爱丽丝的条件,或者特定于朋友 X、Y、Z 除了 Q, R,S。或除 groupZ、朋友 A、B、C 之外的所有朋友。 如果您需要排除特定的人,您是否打算对每个帖子都这样做?然后创建帖子的人需要指定哪些人可以看到它,在这种情况下,您可能确实需要一个 POST_VIEW 表,就像您最初建议的 post_id 和friend_Id 一样。根据登录用户是朋友,将帖子加入此表。前面的建议是基于您选择朋友的一个子集,然后允许他们比其他人看到更多,因此您最初的想法是 POST_VIEW。您可以选择所有朋友,然后使用减号排除特定集合。 见上面的更新,两个帖子视图表怎么样,一个用于朋友的帖子视图,另一个用于朋友列表的帖子视图,不知何故我们可以只有一个帖子视图表?

以上是关于社交网络好友列表、朋友圈、帖子分享的数据库设计[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

实战 SQL:微信微博等社交网络中的友好粉丝关系分析

开源社交网络 [关闭]

社交网络数据库设计 - 朋友/块关系

小程序分享给好友以及分享到朋友圈

关于JS交互--调用h5页面,点击页面的按钮,分享到微信朋友圈,好友

apiCloud 三方分享,微信好友分享,微信朋友圈分享,QQ分享,微博分享