본문 바로가기

자바 웹 개발자가 될거야/DB

[Oracle] 기본키, 외래키 2개 이상일 때 테이블 만들기

① 기본키를 2개로 조합하여 테이블 만들기

 

- 기본키가 2개이상일 때는 Table Level 문법을 사용한다.

- 아래 표 대로 테이블을 만들어 보겠다.

- COPY_ID와 TITLE_ID가 PK여야 하는 상황이다.

 

더보기
CREATE TABLE title_copy(
			copy_id NUMBER(10),
			title_id NUMBER(10) CONSTRAINT tc_id_fk REFERENCES title(title_id),
			status VARCHAR2(15) CONSTRAINT tc_status_nn NOT NULL
				CONSTRAINT tc_status_ck CHECK (status IN ('AVAILABLE','DESTROYED','RENTED','RESERVED')),
			CONSTRAINT tc_id_pk PRIMARY KEY (copy_id, title_id));

 

※ 제약조건명은 내맘대로 지은거니까 사용자 마음대로 변경해도 된다.

 

 

② 기본키 3개를 조합하여 테이블 만들기

 

- 기본키 2개일때와 크게 달라지는 점은 없다.

- 컬럼명만 하나 더 써주면 되기때문 !

 

 

 

더보기
CREATE TABLE reservation(
res_date date,
member_id number(10) constraint rv_mid_fk references member(member_id),
title_id number(10) constraint rv_tid_fk references title(title_id),
constraint rv_rmt_pk primary key(res_date, member_id, title_id));

 

 

③ 외래키 2개를 조합하여 테이블 만들기

 

- 외래키는 기본키와 달리 참조하는 테이블과 컬럼을 써줘야 하기때문에 헷갈릴 수 있다.

- 이 상황 역시 Table Level 문법으로 진행하겠다.

 

 

더보기
CREATE TABLE rental(
		book_date date default sysdate,
		member_id number(10) constraint r_mid_fk references member(member_id),
		copy_id number(10),
		act_ret_date date,
		exp_ret_date date default sysdate+2,
		title_id number(10),
		constraint r_bdate_pk primary key(book_date, member_id, copy_id, title_id),
		constraint r_ctid_fk foreign key(copy_id, title_id) references title(copy_id, title_id));

 

 

- 참조하는 테이블이 다르다면 Constraint ~ References절을 따로 써주면 된다.