티스토리 뷰
정규화란?
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스
* 정규화의 목적
- 중복성 및 종속성 제거 : 유연성 향상, 데이터 보호, 테이블 규칙성, 테이블 간의 관계 설정
- 데이터베이스 변경시 이상(anomaly)현상 제거
1) 삽입 이상
삽입 이상
위와 같은 정규화 되지않은 데이터베이스에서 새로운 교수인 C를 데이터베이스에 삽입하려 할 때 그가 아직 맡은 강의가 없기 때문에 강의 코드를 null로 하지 않는 이상 테이블에 추가 할 수 없음
2) 삭제 이상
삭제 이상
위와 같은 정규화 되지않은 데이터베이스에서 C 교수의 운영체제 과목이 종료되어서 삭제하려고 할 때 그의 강의가 기록된 레코드를 삭제해야 하는데, 교수 레코드 자체가 사라지게 된다.
3) 갱신 이상
갱신 이상
위와 같은 정규화 되지않은 데이터베이스에서 B 교수의 전화번호가 변경되어 레코드를 수정하려 할 때 성공적인 갱신이 이루어지지 않을 수 있다.
☞ 이러한 문제들을 해결하기 위해 테이블의 구성을 논리적으로 변경하는 것을 정규화라고 한다.
* 정규화 과정
비공식적으로 관계형 데이터베이스 테이블이 제 3 정규화가 되었으면 '정규화 되었다' 라고 한다.
제 1 정규화(1NF; First Normal Form) - 중복되는 그룹 제거
정규화 되지 않은 테이블
위와 같은 테이블은 강의명 칼럼에 두개의 값을 가진다. 위 테이블을 제 1 정규화하면 다음과 같다.
제 1 정규화 된 테이블
제 2 정규화(2NF; Second Normal Form) - 부분 함수 종속성 제거
모든 기본 키의 특정 칼럼에 종속된 칼럼을 제거한다. 수강 과목은 이름 또는 학교에 종속되어 있으므로 이를 제거한다.(새로운 테이블 생성)
다음과 같은 테이블있다고 가정한다.
제 1 정규화 된 테이블
위 테이블은 제 1 정규화가 되었지만 여전히 갱신 이상의 위험이 존재한다.(중복성)
위 테이블의 후보 키는 { 이름 } 이 될 수있다. { 학교 }는 오로지 이름에만 종속된다.
이를 제거하면 다음과 같이 테이블을 분리할 수 있다.
제 2 정규화 된 테이블
제 3 정규화(3NF; Third Normal Form) - 이행 함수 족속성 제거
제 2 정규화로 갱신 이상을 제거했지만 그렇지 않은 테이블도 존재한다.
아래 테이블은 학번은 이름에 종속, 성적은 학번과 이름에 종속, 등급은 성적에 종속됨
이를 이행함수 종속성이라 한다.
제 2 정규화 된 테이블
위의 테이블은 중복되는 테이블이 없고, 함수 족속성도없는 제1, 2 정규화가 된 테이블이다.
하지만 여전히 이상현상이 존재한다.
만약 100점이 A라는 등급을 주고싶지만 학번과 이름이 기본키가 되는 테이블에서 null값을 삽입 할 수 없다. (삽입 이상) 그리고 B등급의 점수를 70점으로 하향하고 싶다면 해당 성적의 학생을 모두 변경해야함.(갱신 이상) 마지막으로 B 학생의 테이블을 삭제한다면? A등급에 해당하는 점수가 모두 삭제된다.(삭제 이상) 이를 해결하는 방법은 아래와 같다.
제 3 정규화 된 테이블
다음과 같이 테이블을 분리하면 간단하게 해결된다.
이외에도 BCNF, 4NF, 5NF, 6NF 등이 있다.(이는 대부분 3NF이다)
오타 및 질문사항은 댓글로 남겨주세요!
'데이터베이스' 카테고리의 다른 글
| 데이터베이스 제3정규화 (0) | 2026.05.17 |
|---|---|
| 데이터베이스 제2정규화 (0) | 2026.05.17 |
| 데이터베이스 제1정규화 (0) | 2026.05.17 |
| 가장 많이 사용된 데이터베이스(DBMS) TOP10 - 2026 최신버전 (0) | 2026.05.07 |
| 오라클 SPLIT 구분자로 자르기 함수 구현 (1) | 2020.05.13 |
| SELECT, ORDER BY 사용법 (3) | 2018.09.28 |
| 데이터베이스 책 추천 (0) | 2018.08.30 |
| [MySQL] Server에서 Client에게 접근 권한 주기 (0) | 2018.08.17 |
- Total
- Today
- Yesterday
- 배열
- 알고리즘
- 파이썬
- C
- 데이터베이스
- Android
- C++ 클래스
- 상속
- c#
- Java
- html
- C언어
- 자료구조
- 안드로이드
- 리스트
- 블루투스
- 정보처리기사
- 문자열
- DB연동
- OpenCV
- 문제풀이
- MySQL
- C++
- 아두이노
- String
- Class
- 파일처리
- 클래스
- 벡터
- 자바
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |