2010-08-03 6 views
0

내 응용 프로그램 사용자는 청소년, 개인 또는 조직의 구성원의 세 가지 유형 중 하나 일 수 있습니다. 내 사용자 테이블에서 부울 필드 십대 (null이 아님)과 외래 키 organization_id (null)이 있습니다.여러 유형의 사용자를 어떻게 처리합니까?

teen가 true이고 organization_id가 null 인 경우 사용자는 십대입니다. 십대들은 조직에 속할 수 없습니다.
teen가 false이고 organization_id가 null 인 경우 사용자는 개인입니다.
teen가 false이고 organization_id가 null이 아닌 경우 사용자는 조직의 구성원입니다.

이렇게하는 더 좋은 방법이 있습니다. 나는 십대가 사실이고 organization_id가 null이 아닌 경우가 있다는 것을 좋아하지 않습니다.

새 테이블 인 organizations_users를 추가하고 사용자 테이블에서 organization_id 외래 키를 제거하는 것이 더 좋습니까? 필자가 보게되는 단점은 사용자가 개인인지 또는 조직인지 여부를 판단하는 데 더 오래 걸리고 적절한 경우 데이터를 가져 오는 것입니다.

더 좋은 방법이 있습니까?

답변

2

십대, 개인 또는 구성원이있는 역할 열이 있으면 코드가 단순 해집니다. 아마도 이러한 역할을 자신의 테이블로 정규화하고 외래 키를 사용하십시오.

Roles 
1  Teen 
2  Individual 
3  Member of an Organization 
+0

+1 : 나는 다음을 제안합니다. – JNK

+0

사용자가 조직의 구성원 인 경우 조직 테이블의 데이터를 어떻게 검색합니까? – birderic

+0

@birderic의 경우 조회가 변경되지 않습니다. 회원의 조직 데이터는 계속 저장됩니다. 이러한 값 중 일부를 계산할 수 있다는 사실을 고려하면 약간의 중복성이 있지만 중복성은 설계 및 코드를 단순화하고 동시에 유연성을 구축합니다. 그런데 사람들이 여러 역할을 할 수 있기 시작하면 다른 테이블을 사용하여 사용자와 역할 간의 관계를 일대 다 (one to many)로 전환하게됩니다. –

0

2 개의 테이블을 사용하십시오. 표 1은 사용자 정보가 포함 된 사용자 테이블입니다. 또한 다음 테이블의 ID에 대한 외래 키도 포함됩니다.

표 2는 UserType입니다. ID는 ID입니다. 여기에는 '십대', '개인'및 '조직'이 포함됩니다.

조회를 수행하려면 단순히 조인을 수행하십시오.

1

당신이이 디자인에 너 자신을 매달 았던 것처럼 보입니다. 일반적으로, 매우 특별한 경우와 달리 추상화 (모델)를 실제 세계와 동기화하는 것이 좋습니다. 예를 들어, 십대는 13 세에서 19 세 사이의 사람입니다 (정의에 따라 다름). 십대는 조직인 수영 클럽의 회원이 될 수 있습니다. 나이를 불문 한 사람은 조직의 구성원 일 수도 있고 없을 수도 있습니다. 내 대답보다 더 나은 그것은 미래에 새로운 사용자 유형에 대한 여지가 -

teeen_model_v1

+0

필자의 경우 십대 청소년은 조직에 소속되지 못합니다. 당신은 그것을 허용하는 것이 더 좋다고 말하고 있지만 그것을 강하게 프로그램하고 있습니까? – birderic

+0

예, 모델이 일반적인 추상화 (대부분의 인간의 두뇌에 이미 연결되어있는 추상화)를 따르도록 허용하십시오. 귀하의 예에서 십대 청소년은 회원 테이블에 항목이 없을 것입니다. –

관련 문제