이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다. Java(TM) 플랫폼 : 1.8.0_321 Oracle IDE : 4.1.5.21.78 |
외래 키(FOREIGN KEY)
설명
외래 키(이하 FK)는 다른 테이블의 열을 참조하여 존재하는 값만 입력할 수 있는 제약 조건이다.
예를 들어 한 학원에서 강의 시스템을 관리하는 데 '강의실' 테이블과 '강의' 테이블이 있다고 가정하자
각 '강의'마다 '강의실'이 배정해야 한다고 할 때, 한 직원이 '강의' 테이블의 '강의실코드' 컬럼에 실수로 'R05'를 기입하면 어떻게 될까?
다른 직원들이 그 자료를 참조했을 때 혼란을 겪게 될 것이다. '강의실코드'가 'R05'에 해당하는 강의실은 존재하지 않기 때문이다. FK는 이러한 상황을 방지해 줌으로서 데이터의 무결성에 기여하는 제약 조건이라고 할 수 있다.
문법
인라인(inline) 제약 조건 정의
-- 제약 조건 이름 미기입 시
CREATE TABLE [테이블 이름](
(다른 열 정의 문법 생략),
[열 이름] [열 자료형] REFERENCES [참조 테이블(참조할 열)]
);
-- 제약 조건 이름 기입 시
CREATE TABLE [테이블 이름](
(다른 열 정의 문법 생략),
[열 이름] [열 자료형] CONSTRAINT [제약 조건 이름] REFERENCES [참조 테이블(참조할 열)]
);
아웃오브라인(out-of-line) 제약 조건 정의
CREATE TABLE [테이블 이름](
[지정할 열 이름] [지정할 열 자료형],
(다른 열 정의 문법 생략),
CONSTRAINT [제약 조건 이름] FOREIGN KEY [지정할 열 이름] REFERENCES [참조 테이블(참조할 열)]
);
사용 예시
CREATE TABLE TB_CLASSROOM (
CROOM_IDX NUMBER(3) PRIMARY KEY,
CROOM_INFO VARCHAR2(20)
);
-- TB_CLASSROOM 테이블의 CROOM_IDX를 FK로 사용하는 TB_CLASS 테이블 생성
CREATE TABLE TB_CLASS (
CLASS_IDX NUMBER(3) PRIMARY KEY,
CLASS_INFO VARCHAR2(100),
CROOM_IDX NUMBER(3),
CONSTRAINT FK_CLASS_CODE FOREIGN KEY(CROOM_IDX) REFERENCES TB_CLASSROOM(CROOM_IDX)
);
INSERT INTO TB_CLASSROOM (CROOM_IDX, CROOM_INFO)
VALUES (101, '네이버반');
INSERT INTO TB_CLASSROOM (CROOM_IDX, CROOM_INFO)
VALUES (102, '카카오반');
INSERT INTO TB_CLASSROOM (CROOM_IDX, CROOM_INFO)
VALUES (103, '라인방');
INSERT INTO TB_CLASSROOM (CROOM_IDX, CROOM_INFO)
VALUES (104, '쿠팡방');
4개의 강의실을 데이터를 생성했다. 이제 아래의 쿼리들을 실행해 보자.
INSERT INTO TB_CLASS (CLASS_IDX, CLASS_INFO, CROOM_IDX)
VALUES (501, '알고리즘 강의', 101);
INSERT INTO TB_CLASS (CLASS_IDX, CLASS_INFO, CROOM_IDX)
VALUES (502, '코딩테스트 풀이', 102);
INSERT INTO TB_CLASS (CLASS_IDX, CLASS_INFO, CROOM_IDX)
VALUES (503, '웹 개발 필수 기본 지식', 103);
INSERT INTO TB_CLASS (CLASS_IDX, CLASS_INFO, CROOM_IDX)
VALUES (504, '네트워크의 이해', 104);
SELECT * FROM TB_CLASS;
아래의 INSERT 쿼리도 실행해 보자.
INSERT INTO TB_CLASS (CLASS_IDX, CLASS_INFO, CROOM_IDX)
VALUES (505, '물리적 경로와 가상 경로의 이해', 105);
TB_CLASSROOM 테이블의 CROOM_IDX 열이 105에 해당하는 레코드가 없으므로 INSERT가 실행되지 않고 오류가 발생한다.
'개발 지식 > [DBMS] Oracle' 카테고리의 다른 글
[Oracle] 제약 조건(6) - 디폴트(DEFAULT) (0) | 2022.06.28 |
---|---|
[Oracle] 제약 조건(5) - 체크(CHECK) (0) | 2022.06.27 |
[Oracle] 제약 조건(3) - 기본 키(PRIMARY KEY) (0) | 2022.06.25 |
[Oracle] 제약 조건(2) - UNIQUE (0) | 2022.06.24 |
[Oracle] 제약 조건(1) - 제약 조건(CONSTRAINT) 제어, NOT NULL (0) | 2022.06.23 |