본문 바로가기
Database

오라클 PRIMARY KEY와 FOREIGN KEY 설정하기

by 굿센스굿 2024. 12. 3.
반응형


데이터베이스 설계에서 **PRIMARY KEY(기본 키)**와 **FOREIGN KEY(외래 키)**는 데이터 무결성과 관계를 유지하는 데 핵심적인 역할을 합니다. 이번 글에서는 PRIMARY KEY와 FOREIGN KEY의 개념과 차이점을 이해하고, 이를 Oracle DB에서 설정하고 활용하는 방법과 함께 실무 예제를 소개합니다.


1. PRIMARY KEY란?

**PRIMARY KEY(기본 키)**는 테이블 내에서 각 행을 유일하게 식별할 수 있는 컬럼(또는 컬럼 조합)을 말합니다.
다음과 같은 특징을 가집니다:

  • 값이 유일해야 합니다.
  • NULL 값을 허용하지 않습니다.
  • 테이블당 하나의 PRIMARY KEY만 설정할 수 있습니다.
  • 데이터 검색 및 참조에 중요한 역할을 합니다.

문법

CREATE TABLE 테이블명 (
    컬럼명 데이터타입 PRIMARY KEY
);

2. FOREIGN KEY란?

**FOREIGN KEY(외래 키)**는 다른 테이블의 PRIMARY KEY를 참조하여 두 테이블 간의 관계를 정의합니다.
FOREIGN KEY는 데이터의 참조 무결성을 보장하며, 부모-자식 관계를 형성합니다.

  • 외래 키에 삽입되는 값은 참조하는 PRIMARY KEY 값 중 하나여야 합니다.
  • NULL 값은 허용될 수 있습니다(조건에 따라 다름).
  • 부모 테이블(참조 대상 테이블)의 데이터 삭제/수정 시, 외래 키 제약 조건에 따라 동작이 결정됩니다.

문법

CREATE TABLE 테이블명 (
    컬럼명 데이터타입,
    FOREIGN KEY (컬럼명) REFERENCES 부모테이블(참조컬럼)
);

3. PRIMARY KEY와 FOREIGN KEY의 차이점

특징 PRIMARY KEY FOREIGN KEY

역할 테이블의 각 행을 고유하게 식별 다른 테이블의 PRIMARY KEY를 참조
NULL 허용 여부 허용되지 않음 허용될 수 있음
테이블당 개수 하나만 설정 가능 여러 개 설정 가능
데이터 무결성 테이블 내부의 무결성 보장 테이블 간의 관계와 참조 무결성 보장

4. PRIMARY KEY와 FOREIGN KEY 설정하기

(1) PRIMARY KEY 설정

단일 컬럼으로 설정

CREATE TABLE EMPLOYEES (
    EMPLOYEE_ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(100),
    DEPARTMENT_ID NUMBER
);

복합 키로 설정

CREATE TABLE ORDERS (
    ORDER_ID NUMBER,
    PRODUCT_ID NUMBER,
    QUANTITY NUMBER,
    PRIMARY KEY (ORDER_ID, PRODUCT_ID)
);

(2) FOREIGN KEY 설정

FOREIGN KEY 추가

CREATE TABLE DEPARTMENTS (
    DEPARTMENT_ID NUMBER PRIMARY KEY,
    DEPARTMENT_NAME VARCHAR2(100)
);

CREATE TABLE EMPLOYEES (
    EMPLOYEE_ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(100),
    DEPARTMENT_ID NUMBER,
    FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID)
);

FOREIGN KEY와 ON DELETE CASCADE

  • 부모 테이블의 데이터 삭제 시 자식 테이블 데이터도 함께 삭제되도록 설정.
CREATE TABLE EMPLOYEES (
    EMPLOYEE_ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(100),
    DEPARTMENT_ID NUMBER,
    FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID) ON DELETE CASCADE
);

5. 실무 활용 예시

예시 1: 학생과 강의 테이블 관계 설정

요구사항

  • 학생 테이블(STUDENTS): 학생 ID는 PRIMARY KEY.
  • 강의 테이블(ENROLLMENTS): 학생 ID와 강의 ID를 기반으로 수강 정보 저장.
  • 두 테이블 간 관계 설정.

SQL

CREATE TABLE STUDENTS (
    STUDENT_ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(100),
    MAJOR VARCHAR2(50)
);

CREATE TABLE ENROLLMENTS (
    ENROLLMENT_ID NUMBER PRIMARY KEY,
    STUDENT_ID NUMBER,
    COURSE_ID NUMBER,
    FOREIGN KEY (STUDENT_ID) REFERENCES STUDENTS(STUDENT_ID)
);

예시 2: 제품과 주문 관계 설정

요구사항

  • 제품(PRODUCTS): 제품 ID는 PRIMARY KEY.
  • 주문(ORDERS): 제품 ID를 참조하여 주문 기록 저장.
  • 주문 삭제 시 참조 무결성을 유지.

SQL

CREATE TABLE PRODUCTS (
    PRODUCT_ID NUMBER PRIMARY KEY,
    PRODUCT_NAME VARCHAR2(100),
    PRICE NUMBER
);

CREATE TABLE ORDERS (
    ORDER_ID NUMBER PRIMARY KEY,
    PRODUCT_ID NUMBER,
    QUANTITY NUMBER,
    FOREIGN KEY (PRODUCT_ID) REFERENCES PRODUCTS(PRODUCT_ID) ON DELETE SET NULL
);

예시 3: 다중 외래 키 설정

요구사항

  • 직원 테이블(EMPLOYEES): 직원은 부서와 상사를 참조.
  • 부서(DEPARTMENTS)와 상사(EMPLOYEES)를 각각 외래 키로 설정.

SQL

CREATE TABLE DEPARTMENTS (
    DEPARTMENT_ID NUMBER PRIMARY KEY,
    DEPARTMENT_NAME VARCHAR2(100)
);

CREATE TABLE EMPLOYEES (
    EMPLOYEE_ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(100),
    DEPARTMENT_ID NUMBER,
    MANAGER_ID NUMBER,
    FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID),
    FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEES(EMPLOYEE_ID)
);

6. PRIMARY KEY와 FOREIGN KEY 사용 시 주의사항

  1. 외래 키 성능
    • 외래 키는 자동으로 인덱스를 생성하지 않으므로, 성능 최적화를 위해 인덱스를 추가해야 합니다.
  2. 삭제와 업데이트 동작
    • ON DELETE CASCADE, ON DELETE SET NULL 등의 옵션을 적절히 설정하여 참조 무결성을 유지하세요.
  3. 데이터 타입 일치
    • PRIMARY KEY와 FOREIGN KEY로 연결된 컬럼의 데이터 타입은 반드시 일치해야 합니다.
  4. 테이블 생성 순서
    • FOREIGN KEY를 설정하려면 참조하는 테이블이 먼저 생성되어 있어야 합니다.

7. 결론

PRIMARY KEY와 FOREIGN KEY는 데이터베이스 설계에서 핵심적인 역할을 합니다.
PRIMARY KEY는 데이터의 고유성과 무결성을 보장하고, FOREIGN KEY는 테이블 간의 관계를 설정하여 참조 무결성을 유지합니다. 이 두 키를 적절히 설정하고 활용하면, 데이터베이스의 안정성과 성능을 모두 확보할 수 있습니다.

이제 PRIMARY KEY와 FOREIGN KEY를 활용해 체계적이고 견고한 데이터베이스 설계를 시작해 보세요! 😊

반응형