2014-07-19 2 views
0

두 개의 다른 유형 사용자 테이블이 있습니다. 그 중 하나는 등록 된 사용자를위한 일반 사용자 테이블입니다. 다른 하나는 등록되지 않은 사용자를위한 것입니다. 이 두 테이블을 다른 테이블과 함께 사용해야합니다. 예를 들어;하나의 테이블처럼 두 테이블을 사용하려면

registered_users : 사용자 ID, 사용자 이름, 비밀번호, 이름, 성별, 이메일, IP

unregistered_users : 사용자 ID, 이름, 성별, IP

some_table : ID, 제목, 내용, 사용자 ID

어떻게 사용자 테이블과 some_table을 조인 할 수 있습니까?

나는 약간의 의견이 있지만 그 중 누구도 옳다고 느끼지 않습니다.

  1. 사용 널 모든 테이블 regUser 열과 unRegUser 컬럼 값 및 조인 등 개의 테이블이 방법 부적합한 때문에 널 셀 많지 모든 테이블.
  2. some_table과 같은 모든 테이블에 userType 열을 추가하고 각 쿼리 에 "if"가있는 경우. 그러나이 방법은 길고 자원을 소비합니다.
  3. 아이디 컬럼 유형은 문자열 될 경우 (R13은, U32은 - R은 : 등록 U : 미등록) 및 "문자열"등을 사용하지만, 이것은 어렵다 "경우"
  4. 는 "ID로 접속 테이블을 만들고 type, userid "를 입력하고 userid 대신이 ID를 으로 사용하십시오. "if"가 필요합니다.
  5. "ID, regUser, unRegUser"와 같은 연결 테이블을 만들 때 null이 입니다.

두 개의 사용자 테이블을 결합하여 다른 사용자 테이블을 생성하십시오. 물론 우리는 다시 null 컬럼을 가진다.

어떤 방법이 가장 좋을까요? 또는 어느 누구도 다른 견해를 가지고 있습니다.

+3

두 테이블을 사용할 수 있습니다 reg_status

0 - Unregisterd 1 - Registered 

에 쿼리를 구축 할 수 있습니까? 그게 이상한거야 그냥 '활성'열이있는 사용자 테이블을 가지고 – andrew

+0

당신은 무엇을 위해 등록되지 않은 사용자가 필요합니까? 그들이 등록하지 않으면 DB에서 어떻게 끝날까요? – didierc

+0

이중 사용자 ID의 가능성은 말할 것도 없습니다. –

답변

2

는이 USER_ID를 사용하고 그것을 보조 테이블을 참조 할 수 있습니다 사용자에게

create table users 
(
user_id int not null auto_increment primary key 
username varchar(500), 
password varchar(500), 
email varchar(400), 
ip  varchar(800), 
reg_status enum(0,1), 
); 

라고 대신 당신이 하나의 테이블을 만들 수있는 두 개의 테이블을 생성하여 복제하려고 왜 내용이 동일 할 때. 더 정규화 된 테이블을

을 원하는 경우에

그런 다음 등록/비 등록 사용자를위한 두 개의 테이블

create table users 
(
user_id int not null auto_increment primary key 
email varchar(400), 
ip  varchar(800), 
reg_status enum(0,1), 
); 


create table registered_users 
(
login_id int not null auto_increment primary key 
username varchar(500), 
password varchar(500), 
user_id - F.k (Foreign Key) 
); 
+0

물론 그렇습니다. 나는 오늘 이것을 생각하지 않기 위해 창피했다. 고마워요 :) – zenon

관련 문제