참조 무결성을 위한 FOREIGN KEY 제약 조건
-
- 다음은 ERD(Entity Relation Diagram)로서 테이블을 생성하기에 앞서 데이터베이스 모델링 과정에서 업무를 분석한 후 얻어낸 개체와 관계를 다이어그램으로 나타낸 것입니다.
-
- ERD 를 보고 데이터베이스를 구현할 때에는 부서나 사원과 같은 개체는 테이블로 정의하고 소속이란 관계는 참조의 무결성을 위한 특정 컬럼에 외래 키 제약 조건으로 정의합니다.
-
참조 무결성은 두 테이블 사이(사원, 부서)의 주종관계에 의해서 결정되는데 주체가 되는 테이블은 부모 테이블이 되고 종속이 되는 테이블은 자식 테이블이 됩니다.
사원은 회사 내에서 존재하는 부서에 소속되어야 합니다.
-
위와 같이 표현하면 부서가 주체(부모 테이블) 사원이 종속(자식 테이블)이 됩니다.
-
주체 관계가 애매한 경우 먼저 정의되어야 하는 테이블이 부모 테이블, 나중에 정의되어야 하는 테이블이 자식 테이블이 됩니다.
-
외래 키(FOREIGN KEY) 제약 조건은 자식 테이블인 사원 테이블 (EMP)의 부서 번호(DEPNTO) 컬럼에 부모 테이블인 부서 테이블(DEPT)의 부서번호(DEPTNO)를 부모 키로 지정하는 것입니다.
-
이때 주의할 점은 부모 키가 되기 위한 컬럼은 반드시 부모 테이블의 기본키(PRIMARY KEY)나 유일키(UNIQUE)로 설정되어 있어야 한다는 것입니다.
EX) 외래키 제약 조건을 설정해봅시다.
CREATE TABLE EMP07
( EMPNO NUMBER(4) CONSTRAINT EMP07_EMPNO_PK PRIMARY KEY,
ENAME VARCHAR2(10) CONSTRAINT EMP07_ENAME_NN UNIQUE,
JOB VARCHAR2(9),
DEPTNO NUMBER(2) CONSTRAINT EMP07_DEPTNO_FK REFERENCES DEPT(DEPTNO));
EX) EMP07 테이블에 부서 테이블에 존재하지 않는 부서번호를 갖는 사원 정보를 추가해 봅시다.
'2. Database > 2_1 Oracle' 카테고리의 다른 글
[Oracle] INTERVAL DAY TO SECOND - 두 날짜 사이 기간 저장하기 (0) | 2020.05.19 |
---|---|
[Oracle] ROLLBACK이란? (0) | 2020.05.18 |
[Oracle] INSERT ALL - 여러 테이블에 데이터 추가하는 방법 (0) | 2020.05.15 |
[Oracle] REGEXP_REPLACE() - 특정 패턴을 찾아 바꾸는 함수 (1) | 2020.03.26 |
[Oracle] REGEXP_COUNT() - 특정 문자의 개수를 세는 함수 (0) | 2020.03.26 |