2011-12-29 1 views
1

최근 게시물을 게시 된 순서대로 보려하지만 해당 게시물을 만든 사용자가 볼 수있는 권한을 사용자에게 부여해야합니다. 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, 당신은 모든 친구를 볼 로그인 한 사용자의 친구에 의해 생성 된 사용자 로그인

  • 게시물에 의해 생성

    1. 게시물을 표시합니다 유효한 게시물의 목록을 선택할 수 있습니다
    2. 의 친구가 만든 게시물

      처럼 친구에게 무언가를 사용하여 공공

    로 설정

  • 게시물을 닫 볼 로그인 한 사용자
    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가 필요하지 않니? 친구와 공유하고 친구 인 John, Alice 등을 제외 할 수있는 조건은 무엇입니까? – 001

    +0

    친구들과의 공유는 FRIEND 테이블에 항목이 있어야 처리됩니다. 페이스 북은 친한 친구들을위한 기능을 추가하여 친구와 비슷한 친구 Y 또는 N에 대한 플래그를 추가 한 다음 POST 테이블에 세 가지 표시 옵션을 추가 할 수 있습니다. 나는 이것을 반영하기 위해 원래의 대답으로 SQL을 수정했습니다 –

    +0

    Trevor에게 감사합니다.이 abit을 이해하게하겠습니다. 모든 친구가 볼 수있는 존, 밥, 앨리스에 대한 조건을 충족 시키시겠습니까? 아니면 특정 친구 X, Y , Q는 Q, R, S를 제외하고. 또는 groupZ, 친구 A, B, C를 제외한 모든 친구. – 001

    관련 문제