DB/ORACLE
외래키(foreign key)
0bliviat3
2023. 8. 31. 16:18
오라클의 제약조건중 하나인 외래키는 데이터의 중복을 막기위해 정규화시 생성해 사용한다.
외래키는 부모테이블에서 파생되는 자식테이블에서 부모테이블의 기본키를 참조하는 키로
이를 사용해 테이블과 테이블을 연결해 사용이 가능하고 원하는 테이터를 논리적 결합의 형태로 사용이 가능하다.
외래키의 생성문법)
// 테이블 생성시 외래키 생성하는 방법
create table 테이블명(
외래키명 타입,
constrait 외래키별칭 foreign key (외래키명)
references 부모테이블명 (부모테이블 기본키명)
);
// 외래키 추가로 생성시
alter table 자식테이블명 add 외래키명 타입;
alter table 자식테이블명 add constraint 외래키 별칭
foreign key (외래키명) references 부모테이블명 (부모테이블 기본키명);
외래키 생성시 부모테이블의 기본키로 참조해 만드는것이 일반적인 방법이지만
유니크한 키라면 기본키가 아니어도 생성은 가능하다.
그러나 기본키는 인덱스의 역할이 가능하므로 검색의 성능을 고려한다면 기본키로 만드는것이 좋다.
참조무결성 위배)
부모테이블을 참조하고 있는 자식테이블이 존재하는 경우
부모테이블의 튜플을 삭제 혹은 수정 또는 부모테이블 자체를 삭제, 수정시 참조 무결성을 위배하게 된다.
이런 경우 별도의 제약조건을 걸어주어야 갱신 혹은 삭제가 가능한데
오라클의 경우 삭제를 위한 제약조건만이 지원되고 갱신을 위한 제약조건은 지원되지 않는다.
삭제를 위한 제약조건)
on delete cascade
그렇다면 갱신을 위해선 어떻게 해야하는가..
갱신을 위한 제약조건은 오라클에선 지원하지 않으므로 별도의 트리거 생성이 필요하다.
트리거에 대해선 다음 포스팅에서 다루도록 하겠다.