본문 바로가기

DATABASE/sql

[Database] 외래키

반응형

외래키란?

외래키는 테이블 간의 참조 무결성을 위한 제약조건이다.

외래키는 두 테이블을 서로 연결할 때 사용하는 키 이다.

 

다른 테이블의 기본키를 참조하여 외래키 값으로 사용한다.

 

참조 무결성

- 자식 릴레이션의 외래키와 부모 릴레이션의 기본키는 도메인이 동일해야 한다.

- 외래키는 NULL값이 될 수도 있다.(사원은 하나의 부서를 갖는다. 하지만 신입사원은 부서가 미정일 수 있다.)

 

물품리스트 TABLE

{물품ID(ITEM_ID), 물품이름(ITEM_NM), 물품제조사(ITEM_MAF)}

 

지급관리 TABLE

{물품ID(ITEM_ID), 지급대상(USER), 지급날짜(OUT_DATE), 지급수량(OUT_CNT)}

 

물품리스트 테이블에서 물품ID가 기본키 이고

지급관리 테이블에서 물품ID를 외래키로 참조하고 있다.

 

지급하는 물품들은 물품리스트 테이블에 있는 물품ID에서 벗어날 수 없다.

 

지급관리 테이블에 물품리스트에 없는 물품을 INSERT 하면 참조 무결성 제약조건에 의해 오류가 발생한다.

 

 

외래키에 의한 관계는 두가지가 있다.

 

1. 식별관계

- 식별관계란 외래키를 기본키로 사용하는 관계를 식별 관계라고 한다.

- 부모테이블의 키가 자식테이블에 기본키에 포함되기 때문에 반드시 부모 테이블에 데이터가 존재해야 자식테이블에       데이터를 입력할 수 있다. --> 부모 데이터가 없으면 자식 데이터가 생길 수 없다.

- ERD에서 실선으로 표시한다.

장점

- 데이터의 정합성 유지를 DB에서 한번 더 할 수 있다.

- 자식 테이블에 데이터가 존재한다면 부모 데이터도 반드시 존재한다고 보장할 수 있다.

단점

- 요구사항이 변경되었을 경우 구조변경이 어렵다.

 

2. 비식별관계

- 외래키들을 기본키로 사용하지 않고 일반 속성으로 취급하는 관계를 비식별 관계라고 한다.

- 부모테이블에 데이터가 없더라도 자식테이블에 데이터를 추가할 수 있다.

- EX)신입사원은 부서번호가 없을 수 있지만 신입사원 테이블에 튜플을 추가할 수 있다.

- ERD에서 점선으로 표시한다.

장점

- 변경되는 요구사항을 유동적으로 수용할 수 있다.

- 부모 데이터와 독립적인 자식 데이터를 생성할 수 있다.

단점

- 자식 데이터가 존재해도 부모 데이터가 존재하지 않을 수 있다.

 

 

 

 

 

반응형

'DATABASE > sql' 카테고리의 다른 글

[Mybatis]동적 SQL  (0) 2020.11.07