2011-12-29 45 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