2014-05-22 2 views
-2

그래서 나는 테이블 사용자와 데이터베이스를 가지고 있습니다. 사용자는 운영자, 소유자 또는 둘 다 또는 둘 다 될 수 있습니다.하나의 수치 데이터베이스 열 대 여러 개의 부울 열 사용

나는 dB 열

또는 내가

더 나은 방법은 무엇입니까 소유자

의 운영자 2 1 열 hasUserRight 를 만들 수 있습니다에 될 것이다 논리 값의 isModerator 및 isOwner 에 이것을 디자인 할 수 있습니다 DB를 디자인하는 이유는 무엇입니까?

+0

"무엇이 더 좋았습니까?"는 의견에 근거한 답변이 분명히 나타 났습니까? – Gabe

답변

1

두 가지 역할 만있는 경우 두 가지 솔루션이 모두 작동합니다. 그러나 나는 역할 당 하나의 칼럼이 읽기가 더 쉬울 것이므로 선호해야한다고 다른 사람들이 동의한다.

그러나 세 번째 역할을 추가해야 할 때 문제가 발생합니다. 이것이 분명히 일어나지 않을 것이라는 것을 알고 있다면, 좋습니다. 그러나 그것이 일어날 수 있다면, 당신은 그 결과를 생각해야합니다. 새로운 역할 "관리자"를 추가하고 관리자가 중재자 여야한다고 가정 해 봅시다.

해결 방법 1 : isModerator, isOwner

는 isRevisor를 추가합니다. 모든 작성된 코드는 이전과 같이 실행됩니다. isRevisor에 대한 코드를 추가 할 수 있습니다. isModerator가 false 인 경우 isRevisor를 true로 설정할 수 없도록 check 제약 조건을 추가합니다. 끝난.

=>베이스 (DDL)의 변경 만

해결책 2 : hasUserRight 0 = 없음, 1 = 중재자, 2 = 소유자 3 = 모든 = 중재자 + 소유자의 제약 hasUserRight (0,1 2, 3)

(그것은 다른 값이 무엇을 의미하는지 명확하지 때문에 내가 이것을 권하고 싶지 않다)

당신은 더 값이 필요합니다. 4 = 사회자 + revisor, 5 = 모든 = 사회자 + 소유자 + revisor (또는 더 나은 3 = all = 중재자 + 소유자 + 관리자 및 5 = 중재자 + 소유자?). (1)의 hasUserRight가 더 이상 모든 중재자를 선택하지 않기 때문에 코드가 손상됩니다. 코드를 수정해야합니다. contraint를 (0,1,2,3,4,5)의 hasUserRight로 변경하십시오. => 코드

는 + 데이터베이스 (DDL)의 변화로 변경

해결책 3 : hasUserRight 0 = 없음, 1 = 중재자, 2 = 소유자 3 = 모든 = 중재자 + 소유자 및 값 0을 잡고 테이블 UserRight explnational 텍스트와 함께 3에.

다시 말해, 4 = 중재자 + 관리자, 5 = 모두 = 중재자 + 소유자 + 관리자 (또는 3 = 모두 = 중재자 + 소유자 + 관리자 및 5 = 중재자 + 소유자? 롤 테이블에 추가하십시오. (1)의 hasUserRight가 더 이상 모든 중재자를 선택하지 않기 때문에 코드가 손상됩니다. 코드를 수정해야합니다. 제한을 변경할 필요가 없습니다. 외래 키는 유효한 값만 허용합니다.

=> 코드 만이

해결 방법 4를 변경합니다

USER_ROLE 테이블 역할과 다리 테이블을 간단히 테이블 역할의 새로운 역할을 삽입합니다. 원하는 경우 테이블 user_role에 항목을 추가하십시오. 끝난. 삽입 만 있으면됩니다. 그러나 dbms는 각 리 보자가 중재자임을 보장 할 수는 없습니다. 너 자신에 대해 신경 써야 할 것이다. 코드 나 데이터베이스 (DDL)

당신이 솔루션 2, 3 (hasUserRight을)를 참조로 전혀

는 => 변경 나쁜 없습니다. 선호하는 것이 든 더 적절한 것이 든 해결책 1 또는 4를 결정하십시오.

0

두 번째 해결 방법에 문제가 발생합니다. 사용자가 소유자이자 운영자 인 경우 어떻게해야합니까? 0이 소유자 또는 중재자가 아닌 것으로 가정하면 해당 상황에 대해 네 번째 숫자 값을 지정해야합니다. 이 레이아웃이 잘 문서화되어 있더라도 여전히 직관적이지는 않습니다.

첫 번째 해결책은 훨씬 명확하고 이해하기 쉽습니다.

+0

네, 맞습니다. – Rahul

2

사용자 역할에 대해 명확하게 이야기하고 있으며, 두 번째 옵션은 각 역할에 플래그를 사용하는 것입니다. 이렇게하면 특정 역할 수로 제한되며 이해하기 쉽지 않습니다. 첫 번째 옵션은 정규화되지 않고 추가 기능이 추가 작업 등이됩니다.

역할과 userrole 테이블이있는 테이블을 추가하면보다 일반적인 솔루션을 얻을 수 있습니다.

관련 문제