SQL : 외래 키 제약 조건(FOREIGN KEY)

2024. 11. 8. 22:03·SQL
반응형

데이터베이스 설계에서 테이블 간의 관계를 정의하는 것은 매우 중요합니다. 이를 위해 SQL에서는 외래 키 제약 조건(Foreign Key Constraint)을 제공합니다. 이번 포스팅에서는 외래 키 제약 조건에 대해 자세히 살펴보겠습니다.

외래 키 제약 조건이란?

외래 키 제약 조건은 한 테이블의 열(컬럼)이 다른 테이블의 기본 키(Primary Key) 또는 고유 키(Unique Key)를 참조하도록 만드는 제약 조건입니다. 이를 통해 테이블 간의 관계를 정의하고, 데이터 무결성을 보장할 수 있습니다.

예를 들어, 다음과 같은 두 개의 테이블이 있다고 가정해 봅시다:

departments 테이블
- department_id (기본 키)
- department_name

employees 테이블 
- employee_id (기본 키)
- employee_name
- department_id (외래 키)

여기서 employees 테이블의 department_id 열은 departments 테이블의 department_id 열을 참조하는 외래 키 제약 조건이 설정되어 있습니다.

외래 키 제약 조건의 특징

  1. 참조 무결성 보장: 외래 키 제약 조건을 통해 부모 테이블의 기본 키 또는 고유 키를 자식 테이블에서 참조하도록 함으로써, 데이터 간의 관련성을 유지할 수 있습니다.
  2. 데이터 삽입/수정 제한: 외래 키 제약 조건에 의해 자식 테이블에 부모 테이블에 없는 키 값을 삽입하거나 수정할 수 없습니다.
  3. 데이터 삭제 제한: 부모 테이블의 행을 삭제하려면 먼저 자식 테이블의 관련 행을 삭제해야 합니다. 이를 통해 데이터 무결성을 보장할 수 있습니다.
  4. ON DELETE/UPDATE 옵션: 부모 테이블의 데이터가 삭제/수정될 때 자식 테이블의 데이터를 어떻게 처리할지를 지정할 수 있습니다.

외래 키 제약 조건 생성 및 관리

외래 키 제약 조건은 다음과 같이 테이블 생성 시 또는 alter 명령을 통해 추가할 수 있습니다:

-- 테이블 생성 시 외래 키 제약 조건 추가
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(50),
    department_id INT,
    CONSTRAINT fk_department FOREIGN KEY (department_id)
        REFERENCES departments(department_id)
);

-- 기존 테이블에 외래 키 제약 조건 추가
ALTER TABLE employees
ADD CONSTRAINT fk_department FOREIGN KEY (department_id)
    REFERENCES departments(department_id);

이때 ON DELETE 및 ON UPDATE 옵션을 사용하여 부모 테이블의 데이터 변경 시 자식 테이블의 동작을 지정할 수 있습니다:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(50),
    department_id INT,
    CONSTRAINT fk_department FOREIGN KEY (department_id)
        REFERENCES departments(department_id)
        ON DELETE CASCADE
        ON UPDATE SET NULL
);

이 경우 부모 테이블의 행이 삭제되면 자식 테이블의 관련 행도 삭제되고, 부모 테이블의 행이 수정되면 자식 테이블의 관련 행의 department_id가 NULL로 설정됩니다.

외래 키 제약 조건은 데이터베이스 설계에서 매우 중요한 역할을 합니다. 이를 통해 테이블 간의 관계를 정의하고, 데이터 무결성을 보장할 수 있습니다. 외래 키 제약 조건을 적절히 활용하면 더 안정적이고 신뢰할 수 있는 데이터베이스를 구축할 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'SQL' 카테고리의 다른 글

데이터베이스 정규화(Normalization)  (1) 2024.11.21
[SQL 실전 팁] REPLACE로 안전하게 데이터 일괄 수정하기  (0) 2024.11.16
SQL 기본 문법  (0) 2024.11.12
SQL의 DISTINCT 문: 중복 제거와 고유 값 추출  (0) 2024.10.25
'SQL' 카테고리의 다른 글
  • 데이터베이스 정규화(Normalization)
  • [SQL 실전 팁] REPLACE로 안전하게 데이터 일괄 수정하기
  • SQL 기본 문법
  • SQL의 DISTINCT 문: 중복 제거와 고유 값 추출
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    카페24리뷰
    긴유통기한우유
    리뷰관리
    스크립트 실행 순서
    codingcommunity
    Python
    devlife
    programming101
    유니티
    rtsp
    codingtips
    list
    unity
    스마트스토어리뷰
    리스트
    믈레코비타멸균우유
    리뷰이관
    cv2
    스크립트 실행
    쇼핑몰리뷰
    카페24리뷰이관
    programmerlife
    appdevelopment
    라떼우유
    ipcamera
    상품 리뷰 크롤링
    파이썬
    learntocode
    C#
    셀레니움
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
SQL : 외래 키 제약 조건(FOREIGN KEY)
상단으로

티스토리툴바