2011-08-28 8 views
1

I 사용자가 다음과 같은 옵션이 어디 PHP와 MySQL을 사용하여 웹 사이트를 개발하고 :사용자 설정/개인 정보 보호 데이터베이스 디자인

  • 이메일을 통해 알림을받을 수는
  • 숨기기/표시 페이스 북/트위터는
링크

사용자는 친구/비 친구에게 볼 수있는 정보와 특정 친구가 특정 사진/앨범을 볼 수있는 정보에서 자신의 프로필의 개인 정보를 제어 할 수도 있습니다.

나는이 테이블을 견고하고 어떤 것들을 고려해야하는지 궁금합니다. Facebook은 각 사용자의 개인 정보 설정과 옵션을 호기심에서 어떻게 관리합니까?

내 솔루션은 지금까지의 라인을 따라입니다

:

ID - 기본 키

MEMBER_ID - 기본 키와 외래 키 (회원 테이블 'ID')

facebook_viewable - 아니요의 경우 int (1) - 0, 예인 경우 1

email_notifications - 아니요와 1의 경우 int (1) - 0

+4

일부는 페이스 북의 트위터와 관련없는 웹 사이트를 작성할 수 있습니다. –

+1

Google Plus ...? – unleashed

+2

관련이 없지만 int가 아닌 tinyint가 필요합니다. 결국 (1)은 데이터의 크기에 영향을 미치지 않으므로 0과 1은 여전히 ​​int만큼 많은 공간을 차지합니다. 그것은 일반적인 오해입니다. – Aaron

답변

7

먼저 둘 다 기본이 될 경우 id과 을 둘 다 가질 필요는 없습니다. 실제로 member_id이 필요하므로 다른 id을 삭제할 수 있습니다.

강건하기 위해서는 원하는 설정을 열이 아닌 행으로 옮기십시오. 테이블을 변경하여 열을 추가하는 것보다 행을 추가하는 것이 데이터베이스 관점에서 훨씬 쉽습니다.

필요한 정보는 개인 정보 규칙 유형 목록과 회원 테이블과 개인 정보 규칙 유형 테이블 간의 교차 테이블입니다.

MEMBER 
    id int not null PRIMARY KEY 
, name nvarchar(50)... 
, (and so forth) 

PRIVACY_RULE 
    id int not null PRIMARY KEY 
, rule_description nvarchar(50) 

MEMBER_PRIVACY 
    member_id int not null 
, privacy_rule_id int not null 
, rule_value tinyint 
, PRIMARY KEY (member_id, privacy_rule_id) 

이 방법은, 개인 정보 보호 규칙 ID 프로그래밍 실제 규칙을 적용하는 데 사용되며 값이 교차 테이블에 쉽게 추가 할 수있는 응용 프로그램 코드에서 일정하게 : 스키마는 다음과 같이 될 것이다. 새로운 개인 정보 규칙을 만들 때 PRIVACY_RULE에 하나의 레코드를 삽입 한 다음 응용 프로그램 코드를 변경하면됩니다. 데이터베이스 스키마 변경이 필요하지 않습니다.

이 동일한 기본 구조는 훨씬 더 유연해질 수 있습니다. 예를 들어 이진 플래그 이외에도 여러 가지 유형의 값을 가질 수 있으며 PRIVACY_RULE 테이블의 추가 "rule type"특성을 사용하여 이러한 값의 해석을 제어 할 수 있습니다. 주제와 너무 멀리 떨어져 있기를 원하지 않으므로이 부분에 대한 자세한 내용을 알고 싶으면 알려주십시오.

+0

멋진 사진, "내 사진을 볼 수있는 사람 : 모든 사람 | 친구 | 사용자 정의"는 어떻게 처리하겠습니까? –

+3

필자가 내 대답에 대해 언급하기 시작 했으므로 원하는 경우 "rule_value"를 비트 플래그에서 열거 형으로 확장하는 것이 쉽습니다. 그것은 친구 | 친구 | 친구의 친구와 같은 다중 값 설정을 처리 할 수 ​​있습니다. 멤버가 소유 한 객체에도 규칙을 적용하여 사용자 정의 할 수 있습니다. 그것은'MEMBER_PRIVACY'처럼 보이지만 객체에 FK를 포함하는 다른 테이블을 필요로합니다 (photo/page/...) –