[SQLD] 1장 데이터 모델과 SQL - 정규화
2025. 8. 18. 15:16
과목명 주요 항목 세부 항목
데이터 모델링의 이해 데이터 모델과 SQL 정규화

 

정규화

정규화란, 데이터 중복을 제거하고, 데이터 무결성을 유지하고,

이상현상 방지를 위한 테이블을 구조적으로 정리하는 방법이다.

 

대표적으로 1NF, 2NF, 3NF가 있다.

더 복잡한 방법으로는 BCNF, 4NF, 5NF가 있다.


제1 정규형

개념

제 1 정규형이란, 릴레이션의 모든 속성이 원자값을 가지는 것이다.

 

1. 각 컬럼은 하나의 값만 가진다.

2. 반복되는 그룹이 없어야 한다.

 

예시

[제 1 정규형 위반]

학번 이름 과목
C111999 김홍익 DB, 운영체제

해당 예시에서 과목 속성에 중복된 값이 들어가므로 제1 정규형을 위반한다.

 

 

[제 1 정규형 만족]

학번 이름 과목
C111999 김홍익 DB
C111999 김홍익 운영체제

DB, 운영체제를 따로 분리하여

하나의 셀에는 오직 하나의 값만 들어가 있으므로 제1 정규형을 만족한다.


제2 정규형

개념

제 2정규형이란, 제 1정규형을 만족하고, 부분함수 종속이 없는 것이다.

 

1. 제 1정규형을 만족한다.

2. 부분함수 종속을 제거한다.

 

예시

[제2 정규형 위반]

학번 과목 교수명 학과
1 DB 김교수 컴퓨터
2 운영체제 이교수 컴퓨터
3 알고리즘 박교수 소프트

위 예시에서 기본키는 (학번, 과목)이다.

하지만 교수명은 과목에만 종속되고, 학과는 학번에만 종속된다.

따라서 기본키의 일부에만 의존하는 속성이 존재하므로 부분적 종속이고, 이는 제2 정규형을 위반한다.

*기본키: 테이블에서 각 행을 유일하게 식별할 수 있는 키

 

 

[제2 정규형 만족]

학번 학과
1 컴퓨터
2 컴퓨터
3 소프트
과목 교수명
DB 김교수
운영체제 이교수
알고리즘 박교수

각 테이블에서 부분 함수 종속이 없도록, 기본키에만 의존하는 테이블로 따로 분리하여 정규화 과정을 수행한다.

이는 제2 정규형을 만족한다.


제3 정규형

개념

제3 정규형이란, 제2 정규형을 만족하고, 이행적 함수 종속이 없는 것이다.

 

1. 제2 정규형을 만족한다.

2. 이행적 함수 종속을 제거한다.

 

예시

[제3 정규형 위반]

학번 이름 학과 학과장
1 철수 컴퓨터 김교수
2 영희 소프트 이교수

위 예시에서 기본키는 학번이고, 학번을 통해서 학과를 알 수 있다.

그런데, 학과장은 학번 > 학과 > 학과장 경로로 결정되므로 이행적 종속이 발생하므로 제3 정규형 위반이다.

 

*이행적 종속: 기본키가 아닌 속성이 또다른 비기본키를 거쳐서 종속되는 것

즉, 릴레이션에서 A > B > C 라는 함수 종속이 있을 때, A > C가 성립하는 경우를 이행적 종속이라 한다.

 

 

[제3 정규형 만족]

학번 이름 학과
1 철수 컴퓨터
2 영희 소프트
학과 학과장
컴퓨터 김교수
소프트 이교수

이행적 종속을 제거하기 위해 테이블을 분리한다.

학과장은 학과 테이블에서 직접 관리되므로, 제3 정규형을 만족한다.


BCNF

개념

BCNF란, 제3 정규형을 만족하고, 모든 결정자가 후보키인 것을 말한다.

 

1. 제3 정규형을 만족한다.

2. 모든 결정자가 후보키이다.


BCNF는 다른 정규형들에 비해서 어려운 개념일 수도 있다.

결정자와 후보키부터 비교해보겠다.

 

결정자와 후보키

*결정자(determinant): 다른 속성을 고유하게 결정할 수 있는 속성 (또는 집합)

*후보키(candidate key): 각 행을 유일하게 식별할 수 있는 최소 속성 (또는 집합)


후보키 중 하나를 선택해서 쓰는게 기본키이다.

모든 후보키는 결정자가 될 수 있지만, 모든 결정자가 후보키인것은 아니다.

 

결정자와 기본키, 후보키

처음 공부하는 과정에서 결정자와 후보키, 기본키의 개념이 다소 헷갈릴 수 있다.

하지만 기본키는 후보키 중에서 고르는 것인 반면, 결정자는 후보키가 아니어도 된다.

사번 부서번호 부서위치
101 10 서울
102 20 부산

 

  • 정규형: 제2 정규형
  • 기본키 = 사번
  • 종속성
    • 사번 → 부서번호
    • 부서번호 → 부서위치

 

사번 > 부서번호 이므로 사번이 결정자이다.

부서번호를 통해서 부서위치도 알 수 있으므로 부서번호도 결정자이지만, 모든 직원은 구별 못하므로 후보키는 아니다.

즉, 결정자는 유일하게 식별해야 한다는 조건 없이, 그냥 어떤 속성을 정의할 수 있다면 결정자이다.

 

예시

[BCNF 위반]

강의실 시간 교수
101 9 김교수
102 10 박교수

위 3NF 예시에서 후보키는 (강의실, 시간)이다.

하지만 여기서 교수가 정해지면 강의실도 정해진다.

따라서 결정자인 교수는 후보키가 아니며, 이는 BCNF를 위반한다.

 


[BCNF 만족]

교수 강의실
김교수 101
박교수 102
강의실 시간 교수
101 9 김교수
102 10 박교수

따라서 교수를 기본키(후보키)로 가지는 테이블을 만들면 BCNF 조건을 만족한다.


핵심

1. 제1 정규형

- 원자값

 

2. 제2 정규형

- 부분 함수 종속

 

3. 제3 정규형

- 이행적 함수 종속

 

4. BCNF

- 모든 결정자가 후보키

- 3NF는 만족하지만 BCNF는 위반하는 경우 구분하기