정의
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 함
다시말해, 데이터 정규화는 모든 필드와 레코드가 논리적으로 구성된 것으로
중복을 방지할 뿐만 아니라 관계형 데이터베이스를 보다 효율적으로 사용하도록 하는 방법
장점 +
- 데이터베이스 크기 감소
- 쿼리 단순화
- 유지 보수 용이
- 성능 향상
단점 -
릴레이션 분해로 인해 많은 조인(Join)연산이 발생하므로 질의에 대한 응답 시간이 느려질 수 있음
정규화 과정
정규화는 제 1정규화에서 제 5정규화 까지 있지만,
실무에서는 대체로 제 3정규화까지의 과정을 거침
제1 정규화 ( 1NF )
속성(Attribute)의 원자성을 확보하고 원자값이 아닌 도메인을 분해
릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 한다.
✔︎ 원자값이란 더 이상 쪼개질 수 없는 단위
예를 들어 위처럼 릴레이션이 이루어져 있다면, 조건에 의해 제1 정규화에 만족하지 못함
조건에 만족하기 위해선 아래와 같이 속성 값을 분리해줘야 함
제1 정규화의 문제점
기본키가 아닌 속성들이 기본키에 완전 함수 종속되지 못하고 부분 함수 종속되어 있음
기본키로 식별되는 개체와 무관한 속성이 존재
두가지 상이한 정보가 포함
위와 같은 릴레이션이 이루어져 있다면, 어떤 이상현상이 발생할까?
- 삽입 이상 : 학생이 새 과목을 수강 신청할 때 반드시 학생의 학과와 지도교수를 알아야 함
- 삭제 이상 : 300번 학생이 C400 과목을 취소하면, 해당 과목에 대한 정보가 모두 사라잠
- 갱신 이상 : 100번 학생이 지도교수를 변경할 때, P1인 행을 모두 찾아서 변경해주어야 함
제2 정규화 ( 2NF )
기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)
제1 정규화이면서, 기본키(primary key)에 속하지 않은 속성 모두가 기본키에 완전 함수 종속임
각 속성들이 모두 완전 함수 종속이 되도록 아래와 같이 릴레이션을 분리해줘야 함
제2 정규화의 문제점
이행적 함수 종속성이 존재
- 삽입 이상 : 지도교수가 학과에 소속되어 있음을 추가할 때 반드시 지도 학생이 있어야 함
- 삭제 이상 : 300번 학생이 자퇴하는 경우 P3 교수의 학과 정보가 사라짐
- 갱신 이상 : 지도교수의 학과가 변경되는 경우 모두 찾아서 변경시켜주어야 함 (지도교수가 동일한 학생이 여러 명 있는 경우)
제3 정규화 ( 3NF )
기본키를 제외한 컬럼간의 종속성을 제거
제2 정규화이면서, 이행적 함수 종속성을 제거한 정규화를 말함
즉, 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 제3 정규화라고 함
(기본키 이외의 속성이 그 외 다른 속성을 결정할 수 없는 것)
이행적 함수 종속 관계에 있는 속성을 분리해줘야 함
Reference Path
'CS' 카테고리의 다른 글
교착상태 (Deadlock) (0) | 2023.01.09 |
---|---|
트랜잭션 (0) | 2022.12.27 |
B+Tree (0) | 2022.12.11 |
Hash / Hash Table (0) | 2022.12.10 |
Primary Index / Secondary Index / Composite Index (0) | 2022.12.03 |