본문 바로가기
Self Study/SQLD

[SQLD] 정규화(Normalization)

by Lynnet 2022. 11. 3.
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