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 문: 중복 제거와 고유 값 추출
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
  • 전체
    오늘
    어제
    • 분류 전체보기 (512) N
      • 상품 추천 (33) N
      • MongoDB (4)
      • 일기장 (4)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • 파이썬 (127)
        • Basic (40)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (48)
        • 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리뷰
    리뷰관리
    믈레코비타멸균우유
    셀레니움
    unity
    C#
    스크립트 실행 순서
    상품 리뷰 크롤링
    리뷰이관
    쇼핑몰리뷰
    파이썬
    list
    카페24리뷰이관
    codingtips
    rtsp
    devlife
    codingcommunity
    programmerlife
    ipcamera
    learntocode
    appdevelopment
    라떼우유
    스마트스토어리뷰
    cv2
    programming101
    리스트
    유니티
    Python
    긴유통기한우유
    스크립트 실행
  • 최근 댓글

  • 최근 글

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

티스토리툴바