2014-11-03 4 views
3

내 데이터베이스에 users 테이블이 있으며 관리자 (관리자), 전문가 및 학생의 세 가지 사용자 역할이 있습니다.데이터베이스에 일대 다 열을 저장하는 가장 좋은 방법

테이블에 users 테이블에 자신의 역할을 저장하려고했지만 내 질문에 무엇을 저장해야합니까?

예를 들어 관리자 용으로 1, 전문가 용으로 2, 학생용으로 3을 사용해야합니다. 아니면 한 명만 - 관리자는 'A', 전문가는 'E', 학생은 'S'입니까? 또는 전체 문자열 '관리자'에 대한 관리자 등등, 또는 무엇?

편집

얘들 아, 내가 가장 효율적인 방법을 원한다. 여러분 중 일부는 다른 테이블을 갖겠다 고 말했지만이 관계가 많지는 않지만 사용자가 하나의 역할 만 가질 수 있기 때문에 많은 관계가 있습니다.

+1

이 사용 사례 및 사양 요구 사항에 따라 달라집니다,하지만 나를 있었다면, 나는 그것이 더 역동적 – mituw16

답변

5

별도의 접합 테이블을 가질 수도 있습니다. 예를 들어, 은 열이 id, user_idrole_id 인 열을 갖습니다. 지금 그들은 단지 1

있는 경우에도이 방법은 각 사용자는 앞으로 여러 역할을 할 수 있습니다 그리고 그 role_id는 역할과 관련된 모든 데이터를 수있는 새로운 roles 테이블의 역할을 가리 것이다.

또는 실제로 접합 테이블을 원하지 않으면 role_idusers 테이블에 직접 넣으십시오.

데이터베이스 "정규화"를 찾습니다. 기본적으로 열에서 반복되는 특정 데이터 집합이있는 경우 자체 테이블에 넣을 수 있습니다.

+0

모든 사용자가 오늘 사실 수 있습니다 하나 개의 역할 – Arman

+1

을 만들 정상화 뭔가를 할 것이지만, 영원히 계속 머물 것이라는 것을 보장 할 수 없다면,이 대답의 조언을 따르십시오. –

+0

@ 앤드류 이것은 내 대답이 아니므로 역할 열을 저장하는 방법을 원합니다. 그래서 새 테이블에 역할을 저장하는 방법은 무엇입니까? – Arman

1

두 개의 열 (role_nbr, , Admin과 같은 값을 갖는 역할)을 보여주는 별도의 테이블을 만들 수 있습니다. 2, 전문가; 3, 학생

사용자 테이블에 role_nbr을 포함하고 숫자를 사용하여 롤 테이블에 연결하여 역할 이름을 조회합니다. 이렇게하면 역할을 늘릴 수 있다면 별도의 테이블에 쉽게 추가 할 수 있습니다. 정상적인 작업에 대한 좋은 연구가 있습니다. 이것은 많은 정보가 저장되어있는 곳에 중복 된 정보를 저장하는 것을 피하는 데 도움이됩니다 (역할 이름과 같이 숫자 나 문자를 저장 한 이후로 어떻게 기억하겠습니까?)

0

enum 유형을 사용하십시오. 여기서는 ENUM 테이블 작성시 열 명세서에 명시 적으로 열거 허용 된 값들의 목록으로부터 선택된 값을 가지는 문자열 목적

CREATE TABLE users (
    -- the other columns 
    role ENUM('admin, 'expert', 'student') 
); 

예를이다.

이것은 enum 유형이 이미 값을 정의한 것을 의미한다 (및 행 당 하나의 값을 포함 할 수 있습니다 - 당신이 admin을하는 사용자가 동시에 student에 없습니다). 귀하의 경우에는 admin, expertstudent입니다.이 더

DOCS