OLTP와 OLAP에 대한 내용들을 정리하면서 데이터 모델링에 대한 내용도 같이 정리하였다.
이번 게시글은 OLTP에서 주로 사용하는 데이터 모델인 정규형들에 대해 다루며, 자료들은 데브코스 개인 발표 때 직접 만든 PPT를 이용하였다.
정규화의 정의와 목적
정규화는 데이터베이스의 데이터를 구조화하는 프로세스
- 데이터 중복 제거
- 데이터 무결성 향상
- 삽입, 삭제, 갱신 이상 방지
- 데이터베이스 구조의 유연성 증가
- 주로 OLTP에서 사용하는 데이터 모델
- OLTP에서는 데이터 삽입, 삭제, 갱신이 빈번하게 일어나기 때문
데이터의 이상 현상
삽입 이상
- 새로운 데이터를 삽입할 때 의도하지 않은 정보까지 함꼐 추가해야하는 문제
- 예: 학생 정보를 추가하려면 해당 학생이 수강하는 과목 정보도 반드시 함께 입력해야하는 경우
갱신 이상
- 데이터 수정시 일부만 변경되어 데이터의 불일치가 발생하는 문제
- 예: 학생의 전공을 변경할 때 여러 레코드를 동시에 수정하지 않으면 일관성이 깨지는 경우
삭제 이상
- 데이터 삭제시 의도치 않은 정보까지 함께 삭제되는 문제
- 예: 학생의 수강 정보를 삭제하면 해당 학생의 기본 정보까지 모두 사라지는 경우
→ 이러한 이상 현상들은 테이블을 적절히 분리하고 정규화함으로써 해결할 수 있음
정규형
여기서는 제3 정규형까지만 다룸
제1 정규형
- 모든 속성은 반드시 하나의 값만 가져야 한다.
| 이름 | 생년월일 | 직업 |
|---|
| 이지은 | 19930516 | 배우, 가수, 작곡가 |
- 직업 속성으로 해당 컬럼을 검색시 찾기가 힘듬
- 따라서 아래의 두개 테이블로 수정함으로써 제1 정규형을 만족
- 유사한 속성이 반복되는 경우도 1차 정규화 대상임
| 이름 | 생년월일 | 사이트1 | 사이트2 | 사이트3 |
|---|
| 이병헌 | 19700712 | 인스타그램 | 페이스북 | 싸이월드 |
| 이민정 | 19820216 | 인스타그램 | NULL | NULL |
- 없는 값은 NULL로 채워야하는 공간 낭비가 있음
제2 정규형
- 릴레이션의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야함.

- 위 사진의 왼쪽 테이블은 일반 속성인 음료명이 주식별 중 음료코드 속성에만 종속
- 주문되지 않은 음료는 입력을 할 수가 없음(삽입 이상)
- 음료명이 바뀔시 해당 음료를 주문한 주문 데이터가 모두 바뀌어야함(갱신 이상)
- 두번째 주문 행을 삭제시 카페라떼라는 커피는 아예 데이터에서 없어짐(삭제 이상)
- 이를 해소하는 것이 제2 정규화
제3 정규형
- 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.

- 일반 속성인 과목명이 다른 일반속성인 과목코드 속성에도 종속
- 과목명이 바뀔시 해당 과목을 포함하는 모든 수강신청 기록을 변경해야함(갱신 이상)
- 첫번째 수강신청 행을 삭제시 데이터베이스 과목 데이터는 아예 없어짐(삭제 이상)
- 새로운 과목을 추가하기 위해서는 학번 데이터가 필요함(삽입 이상)
- 이를 해소하는 것이 제3 정규화