SQL 배우기 - 서로 다른 테이블간 1:1 관계를 맺기

어제 SQL 공부를 하면서 테이블을 생성한 내용 중 사용자에 대해 개인설정 값을 추가하는 방법에 대해 추가적으로 알아본다.


우선 셋팅 테이블을 생성한다.

-- setting table 생성


create table settings (

id SERIAL PRIMARY KEY, -- PK

private BOOLEAN, -- BOOLEAN : 참 TRUE / 거짓(FALSE)

adding_photos VARCHAR(15),

user_id INTEGER UNIQUE REFERENCES users(id) --FK;개인설정 유저(1:1) / UNIQUE 옵션을 넣어야 한다. 1:1 연결을 위함 

) ; 


users 테이블과 settings 테이블간의 관계 설정을 위해 

settings 테이블에 외부키(FK)를 user_id로 생성을 하였다. 


다만, 사용자 세팅은 1명의 사용자당 1개만 존재할 수 있기 때문에 UNIQUE 옵션을 넣어서 1:1 연결규약을 설정한다.


-- 세팅 레코드 추가

insert into

settings(private, adding_photos, user_id)

values

(FALSE, 'MANUAL', 1),  --참거짓값은 ''로 하지 않아도 됨 

(FALSE, 'AUTO', 2),

(TRUE, 'AUTO', 3); 


이렇게 레코드를 추가하였다.

private 컬럼의 경우 boolean 타입으로 컬럼을 생성하였기 때문에 문자열을 ''로 감싸주지 않아도 된다고 한다. 


select 문을 이용해서 추가한 데이터를 확인해보자


위와 같이 정상적으로 생성된것을 확인할 수 있다.


여기서 3번 유저에 대한 setting 값을 추가한다는 가정으로 insert 문을 추가해보았다. 

-- 추가데이터

insert into

settings(private, adding_photos, user_id)

values

(FALSE, 'MANUAL', 3) ;  


이렇게 실행해보니 고유 제약 조건 위반에 대한 에러문구가 노출되는것을 확인하였다. 



고유제약 조건을 걸기 위해선 UNIQUE 옵션 꼭 기억하자.


댓글