정보처리기능사 실기를 공부하다보면 데이터베이스 파트에서 정규화 과정에 대해 보게 될 것인데 이 파트가 데이터베이스 파트 3대장 중 하나로 외우기 힘들다 이번 글에서는 이러한 데이터베이스 3대장 중 하나인 데이터베이스 정규화 과정에 대해 알아보겠다
데이터베이스 정규화란?
데이터베이스 설계에서 정규화(Normalization)는 데이터를 구조화하여 중복을 최소화하고 데이터 무결성을 유지하는 과정으로 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 간다
이 과정을 통해 데이터베이스의 성능을 최적화하고 관리의 효율성을 높일 수 있으며 정규화된 데이터 모델은 일관성, 정확성, 단순성, 비중복성, 안정성 등을 보장한다
다음으로 순서대로 데이터베이스 정규화 과정에 대해 소개해보겠다
1NF (제1 정규형: First Normal Form)
목표: 데이터의 원자성(Atomicity)을 보장하여 중복 데이터를 제거하고 각 컬럼이 단일 값을 갖도록 한다
조건: 테이블의 각 컬럼은 하나의 값만 가져야 하며 모든 레코드는 고유해야 한다
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
비정규형:
학생ID | 학생이름 | 수업
-------|------------|-----------------
1 | 김철수 | 수학, 영어
2 | 이영희 | 과학, 역사
1NF:
학생ID | 학생이름 | 수업
-------|------------|-------
1 | 김철수 | 수학
1 | 김철수 | 영어
2 | 이영희 | 과학
2 | 이영희 | 역사
2NF (제2 정규형: Second Normal Form)
목표: 부분 종속성(Partial Dependency)을 제거하여 기본 키 전체에 대해 종속적인 컬럼만 남긴다
조건: 테이블이 1NF를 만족해야 하며 기본 키의 일부가 아닌 속성들은 기본 키 전체에 종속되어야 한다
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1NF:
학생ID | 학생이름 | 수업 | 수업시간
-------|------------|-------|-----------
1 | 김철수 | 수학 | 09:00
1 | 김철수 | 영어 | 10:00
2 | 이영희 | 과학 | 09:00
2 | 이영희 | 역사 | 11:00
2NF:
학생 테이블:
학생ID | 학생이름
-------|-----------
1 | 김철수
2 | 이영희
수업 테이블:
학생ID | 수업 | 수업시간
-------|-------|-----------
1 | 수학 | 09:00
1 | 영어 | 10:00
2 | 과학 | 09:00
2 | 역사 | 11:00
3NF (제3 정규형: Third Normal Form)
목표: 이행 종속성(Transitive Dependency)을 제거하여 비키 속성들이 서로 종속되지 않도록 한다
조건: 테이블이 2NF를 만족해야 하며 기본 키에만 의존하지 않는 비키 속성들이 없어야 한다
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2NF:
학생ID | 학생이름 | 수업 | 수업시간 | 교사이름
-------|------------|-------|-----------|----------
1 | 김철수 | 수학 | 09:00 | 박선생님
1 | 김철수 | 영어 | 10:00 | 이선생님
2 | 이영희 | 과학 | 09:00 | 최선생님
2 | 이영희 | 역사 | 11:00 | 김선생님
3NF:
학생 테이블:
학생ID | 학생이름
-------|-----------
1 | 김철수
2 | 이영희
수업 테이블:
수업 | 수업시간 | 교사ID
-------|-----------|-------
수학 | 09:00 | 1
영어 | 10:00 | 2
과학 | 09:00 | 3
역사 | 11:00 | 4
교사 테이블:
교사ID | 교사이름
-------|---------
1 | 박선생님
2 | 이선생님
3 | 최선생님
4 | 김선생님
BCNF (보이스-코드 정규형: Boyce-Codd Normal Form)
목표: 모든 결정자가 후보 키가 되도록 한다
조건: 테이블이 3NF를 만족해야 하며 모든 결정자가 후보 키 여야 한다
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
3NF:
학생ID | 수업 | 교실
-------|------|------
1 | 수학 | 101
1 | 영어 | 102
2 | 과학 | 101
2 | 역사 | 103
BCNF:
학생 테이블:
학생ID | 학생이름
-------|-----------
1 | 김철수
2 | 이영희
수업 테이블:
수업 | 교실
-------|-----
수학 | 101
영어 | 102
과학 | 101
역사 | 103
학생-수업 테이블:
학생ID | 수업
-------|-----
1 | 수학
1 | 영어
2 | 과학
2 | 역사
4NF (제4 정규형: Fourth Normal Form)
목표: 다치 종속성(Multi-Valued Dependency)을 제거하여 한 컬럼의 값이 다른 컬럼의 값과 독립적이 되도록 한다
조건: 테이블이 BCNF를 만족해야 하며 다치 종속성을 제거해야 한다
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
BCNF:
학생ID | 수업 | 프로젝트
-------|------|----------
1 | 수학 | 프로젝트1
1 | 영어 | 프로젝트2
2 | 과학 | 프로젝트1
2 | 역사 | 프로젝트3
4NF:
학생-수업 테이블:
학생ID | 수업
-------|------
1 | 수학
1 | 영어
2 | 과학
2 | 역사
학생-프로젝트 테이블:
학생ID | 프로젝트
-------|----------
1 | 프로젝트1
1 | 프로젝트2
2 | 프로젝트1
2 | 프로젝트3
5NF (제5 정규형: Fifth Normal Form)
목표: 조인 종속성(Join Dependency)을 제거하여 테이블을 재구성해도 데이터가 손실되지 않도록 한다
조건: 테이블이 4NF를 만족해야 하며 모든 조인 종속성을 제거해야 한다
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
4NF:
학생ID | 수업 | 프로젝트 | 교사
-------|------|-----------|-------
1 | 수학 | 프로젝트1 | 박선생님
1 | 영어 | 프로젝트2 | 이선생님
2 | 과학 | 프로젝트1 | 최선생님
2 | 역사 | 프로젝트3 | 김선생님
5NF:
학생-수업 테이블:
학생ID | 수업
-------|------
1 | 수학
1 | 영어
2 | 과학
2 | 역사
수업-프로젝트 테이블:
수업 | 프로젝트
------|----------
수학 | 프로젝트1
영어 | 프로젝트2
과학 | 프로젝트1
역사 | 프로젝트3
수업-교사 테이블:
수업 | 교사
------|-------
수학 | 박선생님
영어 | 이선생님
과학 | 최선생님
역사 | 김선생님
팁
데이터베이스 정규화는 이러한 많은 과정을 외워야 하기에 정보처리기능사 실기 데이터베이스 문제 파트에서 힘든데 이걸 쉽게 외우는 팁으로는
1
도부이결다조 or 원부이결다조
로 외우면 된다 각각
- 도메인이 원자값 (1NF)
- 부분적 함수 종속 제거 (2NF)
- 이행적 함수 종속 제거 (3NF)
- 결정자이면서 후보키가 아닌 것 제거 (BCNF)
- 다치 종속 제거 (4NF)
- 조인 종속성 이용 (5NF)
좀 더 쉽게 바꾸면
두부이걸다줘로 외우면 된다