2011-04-19 3 views
0

개별 사용자와 사용자 그룹 모두에 대한 사용 권한을 저장하려고합니다. 내 MySQL 데이터베이스에서 나는 권한 이름과 권한 ID를 저장하는 권한 테이블을 가지고있다. 나는 ID를 포함하는 사용자 이름, 암호 등을 저장하는 사용자 테이블을 가지고 있으며 그룹 이름과 그룹 ID를 저장하는 그룹 테이블이 있습니다.mysql 데이터베이스에서 어떤 방법으로 권한을 저장하는 것이 더 효율적입니까?

지금 가장 효율적인 옵션은 무엇입니까?

int group id | int permission id 

int user id | int permission id 

를하거나 이런 식으로 하나 개의 테이블을 가지고 더 나은 것,이 같은 두 테이블, 하나 포함하는 사용자 권한 및 하나 포함하는 그룹 권한, 그래서 뭔가를 만들려면

int id | int permission id | enum('user','group') 

답변

1

두 가지 접근 방식간에 성능 차이가 많이 있을지는 의문입니다. 그러나 모든 성능 및 최적화 질문과 마찬가지로 감정과 추측은 중요하지 않으며 프로파일 결과 만 중요합니다. 어느 것이 더 효율적 이냐는 것은 데이터, 데이터베이스, 액세스 패턴 및 상황에 따라 "효율적인"(공간 시간 개발자의 노력 최종 화폐 비용)이 무엇인지에 달려 있습니다.

즉, 두 테이블을 사용하는 것이 그룹 권한 테이블에서 사용자 그룹 테이블로, 사용자 권한 테이블에서 사용자 테이블로 다시 외래 키를 가질 수 있으므로 더 나은 구조입니다. 비록 하나의 테이블에서 더 빠르더라도 여전히 2와 함께 갈 것입니다 : 데이터 무결성은 몇 μs의 프로세서 시간을 낭비하는 것보다 중요합니다. 신뢰할 수 없거나 깨진 데이터에 신속하게 액세스하는 데 많은 시간이 걸리지 않습니다.

0

첫 번째 방법은 시간 효율적으로 보이지만 두 번째 방법은 공간 효율적으로 보입니다. 고유 인덱스의 속도는 두 번째 경우에는 1, 3 번째 필드에 대해 색인을 생성해야합니다.


좀 더 자세히 살펴보면, 두 번째 방법으로 수행 할 경우 얻을 수있는 이점은 그다지 가치가 없습니다. IMO. 제 3의 길은 있을지도 모르지만, 여러분이 처음으로 올린 두 사람의 우월함이 있습니다. 간단하고 깨끗하며 빠릅니다.

2

두 개의 테이블을 사용하는 것이 좋습니다.

먼저 그룹 권한의 첫 번째 테이블을 확인하고 사용자 권한을 검색 할 수있는 그룹 권한이없는 경우 검색 시간을 줄일 수 있습니다.

둘째, 다른 프로그래머가 쉽게 이해할 수 있습니다.

관련 문제