2012-07-19 2 views
0

하나 이상의 사용자 유형 (user, admin, superuser)이있는 시스템을위한 데이터베이스를 설계하고 있습니다. 다른 사용자 계정 유형을 처리하는 여러 가지 방법을 읽었으며 그 중 하나는 일반 필드가있는 "사용자"의 단일 테이블을 가지고 올바른 "userType"값을 전달하는 것입니다 추가 정보는 해당 테이블을 참조하십시오.MySQL 아키텍처 및 다중 사용자 유형

저를 바라 보는 한 가지 점은 해당 사용자에 대한보다 구체적인 데이터를 원한다면 userType을 기반으로 두 번째 쿼리를 실행해야한다는 것입니다. 더 구체적인 사용자 정보를 처음에는 접할 수없는 것 같습니다.

userType (type = 1 -> user 테이블로 이동, type = 2-> admin 테이블로 이동)을 기반으로 일종의 논리를 수행 한 다음 db를 다시 눌러야합니다. 나는 무엇인가 여기에서 멀리 바라보고 있냐?

감사합니다.

+0

어쩌면 내가 누락되었지만 admin 테이블에서 왼쪽 조인을 수행하는 동안 사용자 테이블을 쿼리 할 수 ​​있어야합니다. 맞습니까? – Wolph

+0

내가 중요한 점은 추가 정보를 조사 할 테이블을 모른다는 것입니다. 어떤 유형의 사용자 유형이라도 있다고 가정하면, 더 많은 역할 특정 정보를 얻기 위해 이동할 표를 알지 못합니다. TypeId와 tableName을 가지고 Type 테이블을 가지고 쿼리에 합치면 Typeable 테이블을 만들면 될 것입니다. – ackerchez

+0

저장하려는 정보를 매핑해야하는 것처럼 들립니다. 각 유형에 대해. 그런 다음 별도의 테이블에 보관할 것인지 여부를 결정할 수 있습니다. – ethrbunny

답변

0

여러 테이블을 사용해야하는 경우 선택한 테이블에서 UNION을 사용하여 하나의 쿼리로 모든 테이블을 보거나 각각을 초기 테이블에 조인하고 if 문을 사용하여 표시 할 열을 선택할 수 있습니다.

SELECT * 
FROM user 
LEFT JOIN admin ON admin.user_id = user.user_id AND user.type = 'admin' 
LEFT JOIN superuser ON superuser.user_id = user.user_id AND user.type = 'superuser' 

당신은 관리자/수퍼 유저와있는 것들에 대한 행이 아닌 사용자 NULL를 얻을 수 있습니다 :

+0

그래서 사용자가 항상 모든 테이블에 대해 모든 테이블을 조인 할 것을 제안합니다. 그것은 가장 간단한 방법처럼 들립니다. – octern

+0

지저분하지만 작동 할 것입니다. – ethrbunny

0

는 개인적으로 나는이 문제에 대한 가장 논리적 인 해결책은 다음과 같이 그 일을 생각합니다. 그리고 모든 경우에 여분의 필드가 필요하지 않은 경우 쿼리에서 생략해야합니다 (필드를 선택하지 않으면 Postgres와 같은 일부 데이터베이스가 자동으로이 작업을 수행합니다).

관련 문제