Home 데이터베이스 정규화 과정
Post
Cancel

데이터베이스 정규화 과정

정보처리기능사 실기를 공부하다보면 데이터베이스 파트에서 정규화 과정에 대해 보게 될 것인데 이 파트가 데이터베이스 파트 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 원부이결다조

로 외우면 된다 각각

  1. 도메인이 원자값 (1NF)
  2. 부분적 함수 종속 제거 (2NF)
  3. 이행적 함수 종속 제거 (3NF)
  4. 결정자이면서 후보키가 아닌 것 제거 (BCNF)
  5. 다치 종속 제거 (4NF)
  6. 조인 종속성 이용 (5NF)

좀 더 쉽게 바꾸면

두부이걸다줘로 외우면 된다

This post is licensed under CC BY 4.0 by the author.

에러, 휴먼 에러, 결함의 차이점

6월 28일 Today I Learned