2014-07-14 5 views
0

내 권한을 저장하는 데이터베이스 설계를 계획하고 있으므로 내 사용자는 비트 단위로합니다.PostgreSQL 비트 조작 디자인

말은, 내 사용자 테이블 '
(1001'조 '),
(것 username VARCHAR(100), permbits BIT VARYING(64)

내 허락 테이블 내 사용자 테이블의 열 permname VARCHAR(100), permbits BIT VARYING(64)

예 행이 열을가 램보기 기록 '내 파마 테이블, 001)

예 행은
(것' '0001),
('0010 '기록 삭제) ,
(1000 '편집 기록'),
을 (, 0100 '레코드 만들기')

그래서 조 편집 및보기 기록 허가를했을
램은

혼자보기 레코드 권한이있는 것입니다 내 질문은
입니다. 1) 만들 수있는 최대 권한 수는 얼마입니까?
2) 비트 조작 (즉, 사용자 권한을 확장하고 권한 테이블의 해당 권한에 매핑)으로 어떻게 이동해야합니까?
3)이 디자인이 좋습니까? 누구든지 더 나은 대안을 제안 할 수 있습니까?

이 질문에 대한 조언을 감사드립니다.

+0

가능한 경우이 디자인을 사용하지 마십시오. 아래의 Dwayne에 의해 제안 된 것과 같은 일반적인 관계형 모델링은 일반적으로 훨씬 더 색인 가능합니다. –

답변

2

올바른 용액 등

CREATE TABLE user_permissions (
    user_id  int REFERENCES users(id), 
    permission_id int REFERENCES permissions(id), 
    unique(user_id,permission_id) 
); 

어떤 비트 필드를 사용하지 않는 테이블을 통해 사용자 및 권한 사이 대다 관계를 이용하는 것이다. 사용자와 권한을 연결하는 레코드가 있으면 사용자에게 해당 권한이 있음을 나타냅니다 (다른 필드를 추가하여 해당 권한을받은 이유 /시기 등을 나타낼 수 있음). 레코드가 없으면 사용자에게 해당 권한이 없음을 의미합니다.

+0

그러면 비트 마스크가 사용되는 위치에 대해 통찰력을 주시겠습니까? – Pals

+0

"bitmask"는 필요하지 않습니다. 1 비트 : 위의 "접합점"테이블에 튜플이 있음. (위의 방법으로 스키마 변경없이 비트 세트를 확장 할 수도 있습니다) – wildplasser