두 가지 역할 만있는 경우 두 가지 솔루션이 모두 작동합니다. 그러나 나는 역할 당 하나의 칼럼이 읽기가 더 쉬울 것이므로 선호해야한다고 다른 사람들이 동의한다.
그러나 세 번째 역할을 추가해야 할 때 문제가 발생합니다. 이것이 분명히 일어나지 않을 것이라는 것을 알고 있다면, 좋습니다. 그러나 그것이 일어날 수 있다면, 당신은 그 결과를 생각해야합니다. 새로운 역할 "관리자"를 추가하고 관리자가 중재자 여야한다고 가정 해 봅시다.
해결 방법 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를 결정하십시오.
"무엇이 더 좋았습니까?"는 의견에 근거한 답변이 분명히 나타 났습니까? – Gabe