상세 컨텐츠

본문 제목

2.1 정규화

SQLD

by bumychoi 2025. 5. 4. 12:48

본문

데이터베이스의 이상현상 (Anomaly) - 데이터를 입력, 수정, 삭제하는 과정에서 의도치 않게 일관성이 깨지는 것

1)삽입이상

2)갱신이상

3)삭제이상

 

 

정규화 - 데이터의 중복을 최소화하면서 테이블을 보다 잘 조작된 상태로 분해하는 과정

정규화는 일반적으로 입력, 수정, 삭제 성늘은 일반적으로 올라가고, 조회성능은 조건에 따라 향상될 수도 있지만 대부분 많은 조인이 발생되어 성능은 하락.

항상 조회성능이 떨어뜨리는 것은 아님. 정규화가 잘 되어 있지 않으면 불필요한 트랜잭션이 발생하는 등 전체 시스탬 성능이 하락함

 

제1 정규화 -릴레이션의 속성값이 모두 원자값, 중복값 제거, 기본기 설정

 하나의 속성값만을 가짐, 유사한 속성이 반복되않는 상태

제1정규형로 만드는 것을 제1정규화

 

제2 정규화 - 기본기 2개 이상의 속성으로 이루어진 경우 함수의 종속성을 제거

주식별자 두개이상으로 구성된 복합식별자인 경우 

 

제3 정규화 - 이행 함수종속성 제거, 기본키를 제외한 칼럼간의 종속성의 제거

BCNF - 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해

 

**데이터베이스 정규화(Normalization)**는 데이터의 중복을 줄이고, 일관성을 유지하며, 효율적인 데이터 관리를 위해 테이블을 구조화하는 과정입니다.

먼저, 이 대답은 gptonline.ai/ko에서 더 자세한 실습과 예제로도 확인하실 수 있습니다!


📌 왜 정규화가 필요할까?

예를 들어 이런 테이블이 있다고 가정해보겠습니다:

학생ID이름과목명교수명
1 철수 수학 김교수
2 영희 과학 박교수
1 철수 과학 박교수

문제점:

  • 이름 "철수"가 중복됨
  • 과목명과 교수명 정보도 반복됨
  • 교수 이름이 바뀌면 여러 행을 수정해야 함

🧱 정규화 단계 요약

🔹 제1정규형 (1NF)

  • **모든 필드에 원자값(atomic value)**만 있어야 함 → 반복 컬럼 제거
    예: 하나의 셀에 "수학, 과학" 이 같이 여러 값이 들어 있으면 안 됨.

🔹 제2정규형 (2NF)

  • 부분 종속 제거 (기본키가 여러 개일 때 발생)
    → 반복되는 정보를 다른 테이블로 분리

🔹 제3정규형 (3NF)

  • 이행적 종속 제거 (A → B → C 관계를 끊음)
    → 비핵심 속성이 다른 비핵심 속성에 종속되면 안 됨.

🎓 예시로 보는 정규화 과정

비정규화 테이블:

학생ID이름과목명교수명

🔸 1NF 적용 (반복 제거)

학생ID이름과목ID
1 철수 101
1 철수 102
2 영희 102
과목ID과목명교수명
101 수학 김교수
102 과학 박교수

🔸 2NF 적용 (부분 종속 제거)

  • 이름은 학생ID에만 종속 → 학생 테이블 분리
학생ID이름
1 철수
2 영희

| 수강정보 |

학생ID과목ID
과목ID과목명교수ID
교수ID교수명

🔸 3NF 적용 (이행 종속 제거)

  • 교수명이 교수ID에 종속되므로 교수 테이블 분리

✅ 정규화의 장점

  • ✅ 데이터 중복 최소화
  • ✅ 데이터 무결성 보장
  • ✅ 저장공간 절약
  • ✅ 변경 시 유지보수 용이

⚠️ 단점도 있어요

  • 조인이 많아져서 쿼리 복잡도 증가
  • 너무 과도하면 성능 저하 가능

그래서 일부 시스템에서는 **비정규화(denormalization)**도 일부러 하기도 합니다.


 

'SQLD' 카테고리의 다른 글

MSSQL 실습  (2) 2025.05.08
2.2 관계와 조인의 이해  (0) 2025.05.04
1.5 식별자  (0) 2025.05.03
1.4.1 관계  (0) 2025.04.28
1.3.1 속성의 개념  (0) 2025.04.28

관련글 더보기