정규화(Normalization)의 정의
데이터베이스에서의 정규화(Normalization)란 관계형 데이터베이스 모델에서
데이터의 중복을 제거하여 삽입 , 갱신 , 삭제 이상현상을 방지하기 위해
무손실 분해를 하는 과정을 말한다.
테이블간에 데이터의 중복이 있는 경우 Insert, Update, Delete 할 때 이상현상
즉 테이블간, 데이터간 정합성이 깨지는 이상현상이 발생을 한다.
이러한 이상현상을 방지하기 위해 테이블간에 같은 필드가 중복해서 저장되지
않도록 테이블을 분리하는데 이것을 정규화라고 한다.
단 테이블을 분리하면서 데이터의 손실이 가해지면 안되는데 이것을 '무손실분해'
라고 한다.
정규화의 단계
단계 | 설명 |
1차 정규화 | 모든 속성이 원자값을 가지도록 분해 |
2차 청규화 | 부분함수 종속성 제거 |
3차 정규화 | 이행함수 종속성 제거 |
BCNF | 결정자 함수 종속성 제거 |
4차 정규화 | 다중값 종속성 제거 |
5차 정규화 | 후보키를 통한 Join 종속성 제거 |
1차 정규화
릴레이션 R의 모든 애트리뷰트가 원자값만을 갖는 경우 제1정규화를 만족한다.
2차 정규화 (부분함수 종속성 제거)
• 기본키가 모든 애트리뷰트의 결정자가 되는 완전함수종속성을 만족하는 경우
• 기본기카 2개 인 경우 그 중 하나만 가지고도 다른 애트리뷰트와 완전함수종속이
되는 경우가 있다면 그 릴레이션은 제2정규화를 만족하지 못한다.
• 기본키중에 하나인 <학번>만 가지고도 [학과이름]과 [학과전화번호]를 알수 있다.
(함수종속)
• 따라서 2개의 테이블로 분리해야 한다.
3차 정규화
• 키가 아닌 애트리뷰트에 다른 애트리뷰트가 함수종속되는 경우가 있다면 그 릴레이션은
제3정규형을 만족하지 못한다. (이행종속성)
• 기본키가 아닌 [학과이름]만 알아도 기본키가 아닌 [학과전화번호]를 알수 있다.
즉 기본키가 아닌 애트리뷰트들간에 함수종속이 있는 경우
BCNF
• 키가 아닌 애트리뷰트가 기본키에 속하는 어떤 애트리뷰트를 결정하는 경우
BCNF를 만족하지 못한다.
• 결국 BCNF를 만족하려면 모든 결정자를 후보키로 만들어야 한다.
즉 각 결정자를 키로 하는 테이블로 각각 분할해야 한다.
• 3NF이면서 BCNF가 아닌 경우의 조건
- 복수의 후보키를 가지고 있어야 한다.
- 후보키들이 복수의 애트리뷰트로 구성되어 있어아 한다.
- 후보키들이 서로 중첩된다.
• 기본키가 아닌 [C] 컬럼만으로도 기본키중 하나인 애트리뷰트를 알수 있는 경우
문) 렐레이션 R (A,B,C) 에서 다음과 같은 함수적종속성이 성립할 때, 3정규형을
만족하도록 릴레이션을 분할하라.. (키는 A이다)
A -> B , A -> C , C->B
답) A->C , C->B 로 인해 키가 아닌 애트리뷰트(B,C)간에 함수종속성이 있는
이행함수가 존재하므로 2정규형까지 만족한 상태임
이행함수가 존재하는 경우 그 다리역할을 하는 필드를 기준으로 분리하면 된다
따라서 (A,C) , (C,B) 로 분리한다
정규화의 장점
항목 | 설명 |
이상현상 제거 | 중복에 따른 이상현상을 방지하여 데이터의 정합성유지 |
저장공간 효율화 | 아무래도 데이터의 중복을 제거하므로 저장공간을 덜 쓴다. |
확장성 확보 | 데이터 신규 발생시 추가가 용이하다. |
정규화의 단점
항목 | 해결책 |
조회쿼리 수행시 테이블 분리로 인한 Join 의 증가로 인해 검색 속도 저하될수 있음 | 적절하게 필드의 중복을 통해 Join 수를 감소시킬 수 있다. -> 반정규화 (De-Normalization) |
'데이터베이스' 카테고리의 다른 글
빅데이터 분석 플랫폼을 위한 데이터 아키텍처 (0) | 2019.10.31 |
---|---|
데이터사이언스 (Data Science) - 빅데이터(Big Data) 분석 (0) | 2019.10.12 |
오픈소스 DB (0) | 2019.10.11 |
연관규칙의 측정도구 - 지지도, 신뢰도, 향상도 (0) | 2019.09.28 |
연관규칙 : Apriori 알고리즘 - 지지도 (0) | 2019.09.27 |