상세 컨텐츠

본문 제목

db 테이블 생성 시 외래키 역할과 외래키를 설정하고 안하고의 차이는?

IT/DB

by JR 2025. 5. 16. 00:49

본문

300x250
반응형

 

 

 

 

외래키(Foreign Key)는 데이터베이스에서 테이블 간의 관계를 정의하고 데이터의 무결성을 보장하기 위해 사용되는 중요한 제약 조건입니다.

 

아래에 외래키의 역할과 외래키를 설정했을 때와 안 했을 때의 차이를 설명해드릴게요.


✅ 외래키(Foreign Key)의 역할

  1. 테이블 간의 관계를 설정
    예: orders 테이블의 customer_id → customers 테이블의 id를 참조
  2. 데이터 무결성(정합성) 보장
    • 외래키는 참조 대상이 존재할 때만 데이터를 삽입하거나 갱신할 수 있게 제한
    • 존재하지 않는 고객 ID로 주문을 넣는 걸 막음
  3. 삭제/수정 시 자동 제어 (옵션 설정 시)
    • ON DELETE CASCADE: 참조 대상이 삭제되면 외래키 행도 같이 삭제
    • ON DELETE SET NULL: 참조 대상 삭제 시 외래키 값을 NULL로 변경

🔄 외래키 설정 여부에 따른 차이

 

항목 외래키 설정 O 외래키 설정 X
관계 명시 명확하게 관계 설정됨 (ERD 가능) 논리적 관계만 존재 (개발자 인지 필요)
무결성 보장 데이터 정합성 강제됨 잘못된 참조 삽입 가능 (고아 데이터 발생 가능)
삭제/수정 연쇄 제어 CASCADE, RESTRICT 등 활용 가능 직접 코드로 처리해야 함
쿼리 이해도 JOIN 관계 명확해짐 JOIN 구조 파악 어려움
유지보수성 구조적 안정성 확보 예기치 못한 버그 가능성↑
 

📌 예시

🎯 외래키 설정 예 (MySQL 기준)

CREATE TABLE customers (
  id INT PRIMARY KEY,
  name VARCHAR(100)
);

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  FOREIGN KEY (customer_id) REFERENCES customers(id)
);
 

→ orders에 삽입 시, 존재하지 않는 customer_id는 오류 발생

 

🛑 외래키 미설정 예

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT
);
 
 

→ customer_id = 9999 같은 존재하지 않는 ID도 삽입 가능 → 데이터 불일치 가능성↑


✅ 외래키 사용 권장 여부?

  • 정규화된 관계형 DB에서는 외래키 설정을 강력히 권장합니다.
  • ❗다만, 성능이 극도로 중요한 경우(예: 초고속 삽입 시스템, 일부 NoSQL-like MySQL 구조)에서만 생략 고려

 

 

 

 

300x250
반응형

관련글 더보기