충분히 쌓여가는
Normalization 정규화 본문
정규화(Normalization)
- 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정
이상 현상(Anomaly)
- 데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상
데이터베이스 이상 현상
이상 현상 | 설명 |
삽입 이상 | 정보 저장 시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우 |
삭제 이상 | 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우 |
갱신 이상 | 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우 |
이상 현상 설명 테이블
학번 | 이름 | 교수번호 | 지도교수 |
202301 | 홍길동 | 1 | 김 교수 |
202302 | 김영희 | 2 | 이 교수 |
삽입 이상
학번 | 이름 | 교수번호 | 지도교수 |
202301 | 홍길동 | 1 | 김 교수 |
202302 | 김영희 | 2 | 이 교수 |
202303 | 이철수 | ? | ? |
- 202303 학번을 가진 '이철수'라는 학생을 등록할 경우 지도교수가 정해지지 않으면 삽입할 수 없음
삭제 이상
학번 | 이름 | 교수번호 | 지도교수 |
202301 | 홍길동 | 1 | 김 교수 |
- '이 교수'라는 교수가 퇴사할 경우 '김영희' 학생 정보도 같이 삭제됨
갱신 이상
학번 | 이름 | 교수번호 | 지도교수 |
202301 | 홍길동 | 3 | 박 교수 |
202302 | 김영희 | 2 | 이 교수 |
- '홍길동'이라는 학생이 지도교수를 변경할 경우 '김 교수'의 정보('김 교수'의 교수번호 1번)가 없어짐
정규화 단계
단계 | 조건 |
1정규형(1NF) | 원자값으로 구성 |
2정규형(2NF) | 부분 함수 종속 제거(완전 함수적 종속 관계) |
3정규형(3NF) | 이행함수 종속 제거 |
보이스-코드 정규형(BCNF) | 결정자 후보 키가 아닌 함수 종속 제거 |
4정규형(4NF) | 다치(다중 값) 종속 제거 |
5정규형(5NF) | 조인 종속 제거 |
1차 정규화(1NF)
- 테이블 내의 속성 값은 원자 값을 가지고 있어야 함
- 원자 값으로 구성, 반복 속성/중복 제거가 필요함
- 이메일 주소가 속성에 2개 이상 가지고 있는 경우 원자값이 아니기 때문에 속성 1개만 가지도록 저장하면 1차 정규화를 만족함
2차 정규화(2NF)
- 부분함수 종속 제거(완전 함수 종속 관계), 주식별자 아닌 속성을 분리함
- <고객명, 서비스 이름>이 <서비스 이용 기간>에 영향을 주고, <서비스 이름>이 <서비스 가격>에 영향을 주는 관계를 부분함수 종속 관계라고 함
- <고객명, 서비스 이름, 서비스 가격, 서비스 이용 기간>을 한 테이블에 두는 것은 부분함수 종속성으로 인해 2차 정규화를 만족하지 못함
- 부분 관계인 <서비스 이름, 서비스 가격> 관계를 별도의 테이블로 두면 부분 함수 종속 관계가 제거되어 2차 정규화를 만족함
3차 정규화(3NF)
- 이행함수 종속 제거, 속성에 종속적인 속성을 분리함
- 이행함수 종속 관계: <책번호>가 <출판사>에 영향을 줌[A -> B], <출판사>가 <홈페이지>에 영향을 줌[B -> C]
- <책번호, 출판사, 홈페이지>를 한 테이블에 두는 것은 이행함수 종속성으로 인해 3차 정규화를 만족하지 못함
- <책번호>는 <홈페이지>에 직접 영향을 주는 관계가 아니기 때문에(A -> C 관계), <책번호, 출판사> 테이블, <출판사, 홈페이지> 테이블로 분리하여 이행 함수 관계를 제거하여 3차 정규화를 만족함
보이스-코드 정규화(BCNF)
- 결정자 함수 종속, 모든 결정자가 후보 키
- <학번, 과목명>이 교수명에 영향을 줌, <교수명>이 <과목명>에 영향을 주는 관계
- <교수명>은 <과목명>에 영향을 주지만, 한 테이블에 같이 존재하고 <교수명>은 키가 아닌 상황이므로 결정자인 <교수명>이 후보 키가 아님
- <학번, 과목명, 교수명>을 한 테이블에 두는 것은 <교수명>이 결정자이지만 후보 키가 아니기 때문에 보이스-코드 정규화를 만족하지 못함
- <교수명>은 <과목명>에 직접 영향을 주기 때문에 <교수명, 과목명> 테이블로 분리하여 교수명이 후보 키 역할을 하도록 하여 보이스-코드 정규화를 만족함
4차 정규화(4NF)
- 다치(다중 값) 종속 제거, 특정 속성값에 따라 선택적인 속성을 분리함
- 다치 종속 관계: <개발자>마다 <자격증> 값들이 여러 개 존재하고, 특정 <개발자>마다 <언어> 값들이 여러 개 존재하는 경우
- <개발자> 별로 여러 <자격증> 값을 가지고 있고, <개발자> 별로 여러 <언어> 값을 가지고 있으므로 <개발자, 자격증>, <개발자, 언어> 테이블로 분리하여 관리하면 다치 종속 관계를 제거하기 때문에 4차 정규화 만족함
5차 정규화(5NF)
- 4차 정규화 테이블에 대해 조인 연산(⋈)을 수행하면 4차 정규화 수행 전 데이터와 다르게 되는 문제인 조인 종속이 발생함
- 조인 종속 제거
- 조인 종속 관계를 제거하기 위해서 모든 속성 관계인 <개발자, 자격증>, <개발자, 언어> 뿐 아니라 <자격증, 언어> 관계에 대한 테이블을 만들어줌으로써 조인했을 때 정확히 원래의 데이터로 복원할 수 있게 함
참고자료
수제비 정보처리기사 실기 3-10 ~ 3-17
'IT > Computer Science' 카테고리의 다른 글
IPC(Inter Process Communication) (1) | 2023.02.06 |
---|---|
GET방식 / POST 방식 (0) | 2023.02.03 |
Agile 애자일 (0) | 2023.02.01 |
Test Driven Develop(TDD) (0) | 2023.01.31 |
DB Index (0) | 2023.01.30 |