728x90
정규화(Normalization)란?
- 다양한 유형의 검사를 통해서 데이터 모델을 좀 더 구조화하고 개선시켜 나가는 절차
- 관계형 스키마를 더 좋은 구조로 정제해 나가는 과성
- 함수적 종속성(속성 간의 관계 분석)을 기반으로 해서 일정한 조건을 만족하는 형태로 엔터티를 분해하는 과정
* 함수적 종속성 : 속성들 간의 관련성, 이를 이용하여 이상 현상이 일어나지 않는 테이블(릴레이션)로 설계하는 과정이 정규화이다.
| 정규화 종류 | 정규화내용 |
| 1차 정규화 | 복수의 속성값을 갖는 속정을 분리(중복 제거) |
| 2차 정규화 | 주식별자에 종속적이지 않는 속성을 분리, 부분종속 속성을 분리 |
| 3차 정규화 | 속성에 종속적인 속성의 분리, 이전종속 속성을 분리 |
| 보이스-코드 정규화 | 다수의 주식별자 분리 |
| 4차 정규화 | 다가 종속 속성 분리 (다치 종속 제거) |
| 5차 정규화 | 결합 종속일 경우 두개 이상의 N개로 분리 (조인 종속성 제거) |
정규화가 되지 않았을 때 문제점
- 중복된 정보로 인한 문제
- 특정 정보의 표현 불가
- Null값 보유
이상현상
: 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 할떄 발생할 수 있는 부작용
- 삽입 이상 : 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제ㅐ
- 갱신 이상 : 중복 튜플 중 일부만 변경하여 데이터가 불일치 하게 되는 문제
- 삭제 이상 : 튜플을 삭제하면 꼭 필요한 데이터까지 같이 삭제되는 데이터 손실 문제
함수종속
: X→ Y 일때
'X가 Y를 함수적으로 결정한다. ' = 'Y가 X에 함수적으로 종속되어 있다.'
릴레이션내의 모든 행을 대상으로 하나의 X값에 대한 Y값이 항상 하나인 경우를 의미한다.
함수 종속 관계를 판한할 때 현재의 속성 값을 기준으로 판단하면 안되고 속성에 들어올 수 있는 값들을 고려하여 판단해야한다.
일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성을 함수적으로 결정한다.
| 함수 종속 종류 | 설명 |
| 완전 함수 종속 (Full Functional Dependency) |
일반적으로 함수 송족은 완전 함수 종속을 의미하는데 X→ Y 일때 속성 집합의 일부분에는 Y가 종속되어 있지 않는다. |
| 부분 함수 종속 (Partial Functional Dependency) |
X→ Y 일때 속성 집함 X의 부분집합에도 Y가 함수적으로 종속도어 있을때 |
| 이행적 함수 종속 (Transitive Functional Dependency) |
함수 종속 관계 X→ Y , Y→ Z가 있으면 논리적으로 X→ Z가 성립된다.이것을 Z가 X에 이행적으로 함수 종속되었다고 한다. |
| 정규화 | 1차 정규화(Atomic Columns) |
| 정의 | 복수의 속성 값을 갖는 속성을 분리하는 것(중복과 반복을 없애는 것) (중복속성에 대한 분리 / 로우 단위의 중복 / 칼럼 단위의 중복이 되는 경우 모두 1차 정규화의 대상) |
| 원리 | •어떤 릴레이션에 속한 모든 도메인이 원자값만으로 이루어져있다. • 모든 속성에 반복는 그룹이 나타지않는다. • 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별 할 수 있어야 한다. |
| 방법 | •하나의 속성이 하나의 값을 가질 수 있도록 분해 ( 행 증가) •여러개의 속성 값을 같는 속성을 다른 관계로 분해 (새로운 엔터티 생성 ) |
| 비고 | •1차 정규화→ 1차 정규형 •1차 정규형은 모든 속성이 한개의 값을 갖는다. |
| 정규화 | 2 정규화(No Partial Dependecies부분 종속성) |
| 정의 | 부분 함수적 종속관계를 제거하는 것 |
| 원리 | •모든 컬럼이 완전 함수적 종속을 만족한다. |
| 방법 | •복합키가 구성되었을떄 부분적으로 종속된 속성을 분해 (새로운 엔터티 생성 ) → 부분 함수적 종속을 모두 제거 |
| 비고 | •2차 정규화→ 2차 정규형 •2차 정규형은 기본키(주키)에 대해 완전한 함수 종속관계를 가진다. |


| 정규화 | 3차 정규화(No Transitive Dependencies) |
| 정의 | 이행 함수적 종속을 제거 *(이행 규칙 : X → Y 이고 Y → Z 이면 X → Z이다.) |
| 원리 | •기본키가 아닌 속성들은 기본키에만 의존해얗나다. •릴레이션이 2차 정규화 되어있다. |
| 방법 | •직별자 외에 속성들 간의 종속이 존재하지 않도록 관계를 분해 |
| 비고 | •3차 정규화→ 3차 정규형 •3차 정규형은 기본키(주키)를 제외한 나머지 속성들 간의 종속이 존재하지 않는다. |
| 정규화 | 보이스-코드 정규화(Boyce-Codd NF) |
| 정의 | BCNF는 3 정규형보다 강한 정규형 (Strong 3NF라고도 한다.) |
| 원리 | •모든 결정자는 주식별자가 되어야한다. * 기본키가 둘 이상의 속성으로 구성된 합성키이고 합성키가 둘 이상 존재하는 경우 발생하는 이상현상을 방지하기 위해 고안 즉, 결정자 중 후보키가 아닌 것들을 제거 |
| 방법 | •결정자 중 후보키를 제거하도록 테이블을 분해 |
| 비고 | •BCNF를 만족한다면 3정규형도 만족하지만, 3정규형만 만족한다면 BCNF를 만족할지는 살펴봐야한다. |
728x90
반응형
'Self Study > SQLD' 카테고리의 다른 글
| [SQLD] 반정규화(De-Normalization) (0) | 2022.11.04 |
|---|---|
| [SQLD] 식별자(Identifiers) (0) | 2022.11.04 |
| [SQLD] 성능데이터 모델링 (0) | 2022.11.03 |
| [SQLD] 관계(Relationship) (0) | 2022.11.02 |
| [SQLD] 속성(Attribute) (0) | 2022.11.02 |