프로그래밍/DataBase

참조키,외부키(foreign key)

MAKING_ 2020. 10. 15. 10:33
반응형

외부키(foreign key)

-오라클에서의 테이블은 외부키 제약조건(foreign key constraint)이라는 것을 통해 서로 연결될 수 있다. 외부키 열(들)은 NULL이 아닌 값을 갖는 자식 테이블에 행이 추가될 때는, 반드시 참조된 열(들)과 같은 값을 가지는 부모 테이블 내의 행이 존재해야 한다. 만약 부모 테이블에 대응되는 행이 없는 경우에는 추가 작업이 실패한다. 테이블간의 부모-자식 관계, 즉 참조 무결성의 기본이다.

 

[구현 예제.](부모 테이블의 대한 제약 조건은 '제약조건&기본키'부분을 참고 바람.)

 

-테이블을 만들고 외부키 정의 ----------------------------------------------

SQL> CONN SCOTT/TIGER

SQL> GRANT SELECT ON EMP TO HR_AUDIT

2        /

 

SQL> CONN HR_AUDIT/HR_AUDIT

SQL> CREATE TABLE ANOTHER_EMP AS

2        SELECT *

3                FROM SCOTT.EMP

4        /

 

SQL> ALTER TABLE ANOTHER_EMP

2        ADD CONSTRAINT ANOTHER_DEPT_FK

3        FOREIGN KEY (DEPTNO) REFERENCES ANOTHER_DEPT (DEPTNO)

4        /

--------------------------------------------------------------------------

 

-Another_dept 테이블의 존재 하지 않는 값 삽입시 에러 확인.-------------------

SQL> INSERT INTO ANOTHER_EMP (EMPNO,ENAME,DEPTNO,JOB)

2        VALUES(8000,'DILON',50,'TECHGUY')

3        /

---------------------------------------------------------------------------

 

[유의 사항]

-부모 테이블 내의 참조될 열은 반드시 유일키이거나 기본키이어야 한다.

-외부키는 하나 이상의 열로 구성될 수 있으며, 이와 같은 외부키를 복합 외부키라 부른다.

  복합 외부키는 부모 테이블 열들에 대응되는 자식 테이블 열들을 가진다.

-자식 테이블에 레코드를 추가할 때에는 부모테이블의 대응되는 열이 NULL 값을 가지는 여부

  여부에 관계 없이 NULL 값을 추가할 수 있다. 이는 상당한 혼란을 일으킬 수 있으므로 자식

  테이블 열에 NOT NULL 제약 조건을 이용해 미리 막아야한다.

-외부키는 자체 참조 제약조건이 될 수 있다. 즉, 외부키로 같은 테이블을 가리킬 수 있다.

  이와 같은 외부키의 예를 scott 스키마의 emp테이블에서 찾을 수 있다. mgr열은 같은 테이블

  의 empno열을 가리키는 외부키이다.

반응형