정규화(Normalization)
관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 테이블을 여러 단계로 나누는 과정(무손실 분해하는 과정)
정규화 단계(원부이 결다조)
단계 | 조건 |
제1정규형(1NF) | 원자값으로 구성 |
제2정규형(2NF) | 부분 함수 종속 제거(완전 함수적 종속 관계) |
제3정규형(3NF) | 이행 함수 종속 제거 |
보이스-코드 정규형(BCNF) | 결정자 후보 키가 아닌 함수 종속 제거 |
제4정규형(4NF) | 다치(다중 값) 종속 제거 |
제5정규형(5NF) | 조인 종속 제거 |
1. 제1정규형(1NF; First Normal Form)
모든 속성이 원자값을 가져야 한다. 즉, 각 칸에 하나의 값만 저장되어야 한다.
- 테이블 내의 속성값은 원자값을 가지고 있어야 한다.
- 원자값 : 쪼갤 수 없는 가장 작은 단위
- 이메일 주소가 속성에 2개 이상 가지고 있는 경우 원자값이 아니기 때문에 속성 1개만 가지도록 저장하면 1차 정규화를 만족한다.
2. 제2정규형(2NF; Second Normal Form)
제1정규형을 만족하면서, 부분적 함수 종속성을 제거해야 한다. (완전 함수적 종속 관계)
- [고객명], [서비스 이름]이 [서비스 이용 기간]에 영향을 주고, [서비스 이름]이 [서비스 가격]에 영향을 주는 관계를 부분 함수 종속 관계라고 한다.
- [고객명], [서비스 이름], [서비스 가격], [서비스 이용 기간]을 한 테이블에 두는 것은 부분 함수 종속성으로 인해 2차 정규화를 만족하지 못한다.
- 부분 관계인 [서비스 이름], [서비스 가격] 관계를 별도의 테이블로 두면 부분 함수 종속 관계가 제거되어 2차 정규화를 만족한다.
3. 제3정규형 (3NF; Third Normal Form)
제2정규형을 만족하면서,이행적 함수 종속성을 제거해야 한다.
- 이행적 함수 종속성이란 A → B, B → C일 때 A → C가 성립하는 종속 관계이다.
- 기본키가 아닌 속성들끼리의 의존성을 제거해야 한다.
- [책번호]가 [출판사]에 영향을 주고, [출판사]가 [홈페이지]에 영향을 주는 관계인 A → B이고, B → C이면서 A → C 관계가 같이 있는 경우를 이행 함수 종속 관계라고 한다.
- [책번호], [출판사], [홈페이지]를 한 테이블에 두는 것은 이행 함수 종속성으로 인해 3차 정규화를 만족하지 못한다.
- [책번호]는 [홈페이지]에 직접 영향을 주는 관계가 아니기 때문에(A → C 관계) [책번호], [출판사] 테이블과 [출판사], [홈페이지] 테이블로 분리하여 이행 함수 관계를 제거하여 3차 정규화를 만족한다.
4. 보이스-코드 정규화(BCNF; Boyce and Codd Normal Form)
제3정규형을 강화한 형태로, 모든 결정자가 후보키가 되어야 한다는 조건을 추가로 요구한다.
- 결정자란 다른 속성의 값을 결정하는 속성을 의미한다.
- [학번], [과목명]이 [교수명]에 영향을 주고, [교수명]이 [과목명]에 영향을 주는 관계로서, [교수명]은 [과목명]에 영향을 주지만 한 테이블에 같이 존재하고 [교수명]은 키가 아닌 상황이므로 결정자인 [교수명]이 후보키가 아니다.
- [학번], [과목명], [교수명]을 한 테이블에 두는 것은 [교수명]이 결정자이지만 후보키가 아니기 때문에 보이스-코드 정규화를 만족하지 못한다.
- [교수명]은 [과목명]에 직접 영향을 주기 때문에 [교수명], [과목명] 테이블로 분리하여 교수명이 후보키 역할을 하도록 하여 보이스-코드 정규화를 만족한다.
5. 제4정규형(4NF; Fourth Normal Form)
다치 종속성을 제거하고, 특정 속성값에 따라 선택적인 속성을 분리한다.
- 다치 종속성이란 한 속성이 두 개 이상의 독립적인 다치 종속성을 가질 때 발생한다.
- 제4정규형은 이러한 다치 종속성을 제거하는 것을 목표로 한다.
- [개발자]마다 [자격증] 값들이 여러 개 존재하고, 특정 [개발자]마다 [언어] 값들이 여러 개 존재하는 경우 다치 종속 관계라고 한다.
- [개발자]별로 여러 [자격증] 값을 가지고 있고, [개발자]별로 여러 [언어] 값을 가지고 있으므로 [개발자], [자격증] 테이블과 [개발자], [언어] 테이블로 분리하여 관리하면 다치 종속 관계를 제거하기 때문에 4차 정규화를 만족한다.
6. 제5정규형(5NF; Fifth Normal From)
조인 종속성을 제거한다.
- 제5정규형은 가능한 모든 조인 종속성이 제거된 상태로, 더 이상 테이블을 분해할 수 없는 상태를 말한다.
- 제4정규형에 대해 조인 연산을 수행하면 4차 정규화 수행 전 데이터와 다르게 되는 문제인 조인 종속이 발생한다.
- 조인 종속 관계를 제거하기 위해서는 모든 속성 관계인 [개발자], [자격증]과 [개발자], [언어] 뿐 아니라 [자격증], [언어] 관계에 대한 테이블을 만들어 줌으로써 조인했을 때 정확히 원래의 데이터로 복원할 수 있게 한다.
이상 현상(Anomaly)
데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상
이상 현상 | 설명 |
삽입 이상 | 정보 저장 시 해당 정보의 불필요한 세부 정보를 입력해야 하는 경우 |
삭제 이상 | 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우 |
갱신 이상 | 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우 |
예시
[이상 현상 설명 테이블]
[삽입 이상]
- 202003 학번을 가진 '이철수'라는 학생을 등록할 경우, 지도교수가 정해지지 않으면 삽입할 수 없다.
[삭제 이상]
- '이 교수'라는 교수가 퇴사할 경우, '김영희' 학생 정보도 같이 삭제된다.
[갱신 이상]
- '홍길동'이라는 학생이 지도교수를 '이 교수'로 변경할 경우, '이 교수'의 교수번호가 2, 3 모두 있게 되어 중복된 값이 모순을 일으킨다.
함수 종속(FD; Functional Dependency)
릴레이션에서 속성의 의미와 속성 간 상호 관계로부터 발생하는 제약조건
결정자/종속자
X → Y 관계일 때, X는 결정자(Determinant)이고, Y는 종속자(Dependent)이다.
함수 종속 종류
종류 | 설명 |
부분 함수 종속 (Partial Functional Dependency) |
릴레이션에서 기본키가 복합키일 경우, 기본키를 구성하는 속성 중 일부에게 종속된 경우 |
완전 함수 종속 (Full Functional Dependency) |
릴레이션에서 X → Y 관계가 있을 때, Y는 X의 전체 속성에 대해 종속하고 부분 집합 속성에 종속하지 않는 경우 |
이행 함수 종속 (Transitive Functional Dependency) |
릴레이션에서서 X → Y, Y → Z 종속 관계가 있을 때, X → Z가 성립되는 경우 |
반 정규화(De-Normalization)
정규화된 엔티티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
- 비정규화, 역정규화라고도 불린다.
반 정규화 특징
- 반 정규화된 데이터 구조는 성능 향상과 관리의 효율성이 증가한다.
- 데이터의 일관성 및 정합성이 저하된다.
- 유지를 위한 비용이 별도로 발생하여 성능에 나쁜 영향을 미칠 수 있다.
- 반 정규화를 위해서는 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화에 우선순위를 둘 것인지를 비교하여 조정하는 과정이 중요하다.
반 정규화 기법
'certification > 정보처리산업기사' 카테고리의 다른 글
[SW] 테스트 기법에 따른 분류(화이트박스 테스트, 블랙박스 테스트) (0) | 2024.10.19 |
---|---|
[Network] TCP 연결 해제 과정(4-way 핸드셰이크) (0) | 2024.10.19 |
[Network] OSI 7계층 (0) | 2024.10.19 |
[OS] 메모리 할당 알고리즘(최초 적합, 최적 적합, 최악 적합) (0) | 2024.10.18 |
[OS] 운영체제 기본 명령어 활용 (0) | 2024.10.18 |