2011-12-29 27 views
1

我希望用户按照发布的顺序查看最近发布的帖子,但前提是创建帖子的用户授予用户查看它们的权限。很像谷歌+圆圈列表。社交网络好友列表,朋友圈子,帖子分享的数据库设计

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

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,如果没有登录,您可以选择有效的职位名单,它会显示由的朋友创建的登录用户

  • 帖子创建

    1. 帖子登录的用户可见的所有朋友
    2. 通过的朋友创建的帖子登录的用户可见的挚友
    3. 帖子使用的东西设置为公共

    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,因此只有公共帖子可见。

    然后,您使用此选择的结果在随后的选择中获取每个帖子的相关评论。

  • +0

    很酷,我认为你的方式比我的更好:)所以我们不需要post_view呢?您可以与朋友分享并排除朋友约翰,爱丽丝等的条件是什么? – 001 2011-12-29 01:42:20

    +0

    与朋友的分享应通过在FRIEND表中输入来处理。 Facebook为亲密朋友添加了一个功能,以便模仿此功能,您可以在好友表中为好友Y或N以及POST表添加一个标志,并有三个可见选项。我已经修改了原始答案中的SQL,以反映这个问题 – 2011-12-29 05:09:37

    +0

    感谢Trevor,好吧,让我明白这一点,你将如何满足所有朋友对john,bob和alice期望可见的条件或者Specific对于朋友X,Y ,Z除Q,R,S外。或者除了groupZ,朋友A,B,C以外的所有朋友。 – 001 2011-12-29 06:26:36