数据库设计为社交网络朋友列表,朋友圈,帖子分享

时间:2011-12-29 01:18:58

标签: database-design social-networking

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

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

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 个答案:

答案 0 :(得分:1)

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

e.g。

FRIEND
user_id
friend_id
close_friend

在POST上你需要一些东西来识别“所有朋友”,“亲密朋友”或“公开”是否可见。

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

  1. 由登录用户创建的帖子
  2. 由所有朋友可见的登录用户的朋友创建的帖子
  3. 由亲密朋友可见的登录用户的朋友创建的帖子
  4. 设为公开的帖子
  5. 使用

    之类的东西
    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,因此只有公开帖子可见。

    然后使用此选择的结果为后续选择中的每个帖子获取相关评论。