2011-05-04 1 views
1

현재 웹 응용 프로그램을 개발 중입니다. 이를 위해 사용자 인증을위한 데이터베이스를 만들어야합니다.사용자 인증을위한 테이블 생성 - 개선의 여지가 있습니까?

내가 마음에 다음과 같은 것이있다 :

create table users 
(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
username VARCHAR(100) NOT NULL, 
password VARCHAR(60) NOT NULL, 
PRIMARY_KEY(id), 
UNIQUE(username) 
); 

create table roles 
(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
role VARCHAR(100) NOT NULL, 
PRIMARY_KEY(id), 
UNIQUE(role) 
); 

create table user_roles 
(
user_id SMALLINT UNSIGNED NOT NULL, 
role_id SMALLINT UNSIGNED NOT NULL, 
PRIMARY_KEY(user_id) 
UNIQUE (user_id, role_id), 
); 

암호는 고정 된 크기를하지만 난 테이블에 둘 다 charvarchar 열은 char 열이 어디 선가 읽은 때문에 varchar를 사용 varchar으로 변환됩니다.

또한 외래 키 제한 조건을 사용하는 것이 유리합니까?

+0

mysql 태그의 철자가 잘못되었습니다. 두번. – BoltClock

답변

3
  1. ID에 SMALLINT을 사용하지 마십시오. 진지하게. 왜 아무도 그렇게하지 않을거야!? 더 큰 정수 유형을 사용하십시오.
  2. user_roles의 기본 키가 작동하지 않습니다. (user_id, role_id)을 기본 키로 만들고 쿼리 할 필드에 별도의 (고유하지 않은) 인덱스를 넣습니다.
  3. user_roles을 다른 테이블에 연결하는 외래 키를 추가 할 수 있습니다. ON DELETE CASCADE을 사용하면 사용자 또는 역할을 삭제 한 경우 오래된 링크가 삭제됩니다.
관련 문제