社交网络好友列表、朋友圈、帖子分享的数据库设计[关闭]
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。您可以选择所有朋友,然后使用减号排除特定集合。 见上面的更新,两个帖子视图表怎么样,一个用于朋友的帖子视图,另一个用于朋友列表的帖子视图,不知何故我们可以只有一个帖子视图表?以上是关于社交网络好友列表、朋友圈、帖子分享的数据库设计[关闭]的主要内容,如果未能解决你的问题,请参考以下文章