2009-06-10 4 views
2

갤러리를 만들고 있습니다. 사용자가 그룹이나 개인별로 사진을 볼 수있는 사람을 선택할 수 있기를 바랍니다. 나는 두 개의 열 (user_id, photo_id)을 가진 테이블 can_see을 가져야한다고 생각합니다. 이것은 개인을 위해 작동해야한다. 그러나 만일 내가 거기에 group_id을 던지면 그것은 작동하지 않을 것이다. 그룹을 선택했을 때 group_id 대신 선택한 그룹의 각 개인을 해당 테이블에 추가하는 것이 가장 좋은 방법이라고 생각합니다. 그러나이 테이블에서 나중에 검색 할 항목을 더 많이 만듭니다. 여전히 최선의 접근 방법입니까?사용 권한/가시성에 관한 갤러리 데이터베이스 디자인 질문


는 여기에 내가 생각하고있는 내용은 다음과 같습니다 당신이 검색 할 항목의 금액을 제거하고 싶은 경우에, 나는 다음과 같은 접근 방식에 갈 것

users: id, username, ... 
photos: id, album_id, ... 
albums: id, user_id (owns all photos in album), .... 
can_see: user_id, photo_id 
groups: id, user_id(owner), name 
member_of: user_id, group_id 

답변

2

. 특정 사용자의 사진에 액세스하려는 경우

User Table - UserID, UserName 
Group Table - GroupID, GroupName 
User Group Table - GroupID, UserID 
Photo Table - PhotoID, UserID 

, 당신은 사용자 테이블에서 사용자 ID를 얻고 사진을 테이블에 그 ID로 조회를 할 것입니다.

그룹의 사진에 액세스하려면 사용자 그룹 테이블에서 사용자 ID를 가져 와서 사진 테이블에서 해당 ID를 조회하면됩니다.

*** 자세한 코멘트

괜찮 내가 당신을 위해 그것을 밖으로 철자하자 ... 여기 행동의 커플 사진 소유자 또는 나의 이해이다이어야 에 의해 수행 수 있습니다. 1. 사진 소유자가 단일 사용자에게 viwership 액세스 권한을 부여 할 수 있습니다. 그러면 새 사용자에 대해 사용자 테이블 에 새 레코드가 생성됩니다. 기존 사용자의 경우 에 해당하지 않습니다. 또한 기존 또는 새로 생성 된 사용자 ID가있는 사진 테이블에 새로운 레코드가 생성됩니다. 2. 사진 소유자가 사용자 그룹에게 시청 권한을 부여 할 수 있습니다. 이 작업은 새 그룹에 대해 그룹 테이블에 새 레코드를 만들고 기존 그룹에 대해서는 기존 그룹에 대해 새 레코드를 만듭니다. 그룹에 속한 모든 신규 사용자 은 사용자 테이블에 새로운 레코드 을 추가해야합니다. 결국 사진 테이블은 만큼 많은 레코드로 업데이트되고 그룹의 사용자는 입니다.

지금 사진에 액세스 할 수 ... 여러 경우

  1. 사진에 대한 액세스 권한을 요청할 수있는 그룹에 속하지 않는 단일 사용자가 있습니다.
  2. 일부 그룹에 속한 단일 사용자가 사진에 대한 액세스를 요청할 수 있습니다. 당신이 당신의 질문 I을 개정하기 때문에 이러한 경우 eiher에서

, 나는. 액세스에 대한 사진 (이 실제로 앨범해야 응용 프로그램에서 입력이 단지 사용자 이름 &있을 것이다 을 가정하고 여전히 이것이 경우인지 확실하지 않습니다.이 경우 사용자 테이블에서 조회를 수행하여 사용자 이름에 대해 사용자 ID를 가져오고 사진 테이블의 다른 조회를 에 요청합니다.이 사용자 ID가 요청 된 사진에 액세스 권한이 있는지 확인하거나 (레코드가 존재하는지 여부는 에 의해 확인되지 않음).

그래서 다음 질문은 ... 그룹 & 사용자 그룹 테이블이 필요합니까? 이 은 사진 소유자가 에게 UI에서 액세스 권한 을 쉽게 부여하고 취소하도록 요구됩니다. 이 테이블을 사용하면 에 UI를 작성하여 그룹이 만든 사진 소유자와 각 그룹의 회원을 쉽게 표시 할 수 있습니다.

질문에 누락 된 항목이 있습니다 ... 예를 들어, 에 대한 액세스 권한 요청이 어떻게하나요? 정보가 응용 프로그램의 입력으로 에 제공됩니까? 모든 의견과 답변 업데이트는 가정의 많은 을 기반으로합니다. 그래서 지금 우리가 요구 사항이 명확 ;-)

+0

나는 당신이나 내가 오해가 있다고 생각합니다. 사진을 검색하지 않으므로 누가 사진을 볼 권한이 있는지 확인하려고합니다. 이 설정으로 어떻게 할 수 있습니까? "사용자 그룹 테이블"이 어떻게 작동하는지 잘 모르겠습니다. 같은 그룹에 속한 5 명의 사용자가 있다면 어떻게됩니까? 그룹 이름이 5 번 반복됩니까? 그것은 단지 나쁜 디자인입니다. 내 설정으로 내 질문을 기각합니다 ... – mpen

+0

동의. 반복 그룹 이름을 사용하는 사용자 그룹 테이블의 이전 디자인은 올바른 디자인이 아닙니다. 나는 내 생각을 반영하기 위해 디자인을 조금 수정했다. 검색을 통해 실제로 액세스하는 것을 의미했습니다. – msvcyc

+0

나는 아직도 그것을 얻지 않는다. 사진을 소유 한 개인 사용자 * 또는 사진 전체가 * 소유 한 것처럼 들리게 만듭니다. 사용자 A가 사진 B를 업로드 한 다음 사진 B를보고 싶은 사용자 C가 오는 경우 어떻게해야합니까? 권한을 부여 받았는지 어떻게 확인합니까? 당신에 따르면 사용자 테이블에서 UserID를 끌어 올린 다음 사진 표를 확인하지만 사진 표는 누가 그 사진을 소유했는지 설명합니다. 아직 가시성 테이블이 없습니다. – mpen

0

내가 생각하는 또 다른 솔루션에서 철자해야 이유를 알고, 우리는 사용자가 사진을 볼 수 있다면 확인하는 group_id 열을 포함하도록 can_see 테이블을 ammend 수 있습니다 :

SELECT 1 FROM can_see WHERE user_id=USERID AND photo_id=PHOTOID 

또는

SELECT 1 FROM can_see JOIN member_of ON can_see.group_id = member_of.group_id WHERE member_of.user_id=USERID AND can_see.photo_id=PHOTOID 

그것은 종종 null 수 있습니다 여분의 열을, 그리고 내가 t는 사용 권한을 확인하기 위해 1 대신 2 개의 쿼리를 수행해야한다는 것을 의미하지만 can_see 테이블을 조금 더 작게 유지하므로 사용 권한을 설정 한 후에 그룹을 수정할 수 있음을 의미합니다.

관련 문제