-
DB - 정규화
정규화
-
관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화 하는 작업.
-
이상 현상 발생 가능성을 줄이는 것이 목표이다.
-
정규형의 조건
- 무손실 조인을 보장해야 한다. (하나의 릴레이션을 분해하고 다시 조인했을 때 데이터 손실이 없어야 한다.)
- 함수적 종속성을 보존해야 한다.
이상현상
- 삽입 이상
-
테이블에 데이터를 삽입할 때 의도와는 상관없는 불필요한 값들을 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능한 경우.
- ex) 학번, 과목 동아리로 구성된 학생 테이블에서 새로운 동아리가 신설되고 아직 동아리원이 한 명도 없는 경우에 새로운 동아리를 등록하기 위해서는 학번, 이름값이 필요하다.
-
- 삭제 이상
-
테이블에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 경우.(연쇄 삭제)
-
ex) 동아리a에 속한 인원이 단 한명일대 그 인원을 삭제하면 동아리a에 대한 정보도 사라진다.
-
-
갱신 이상
-
테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는 경우.
-
ex) 학생a의 동아리가 b에서 c로 변경되었을 경우 모든 튜플에서 학생a의 동아리를 c로 변경해주지 않으면 불일치성이 생기게 된다.
-
함수적 종속성
- 테이블 R에서 X와 Y를 임의의 애트리뷰트 집합이라고 할 때, X의 값이 Y의 값을 유일하게 결정한다면 X는 Y를 함수적으로 결정한다 라고 하고 X -> Y로 표기한다.
제 1정규형
- 모든 속성의 도메인이 원자값 만으로 되어있는 정규형이다.
제 2정규형
-
테이블 R이 제 1정규형이고, 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형이다.
-
완전 함수적 종속이란 X -> Y라고 가정했을 때, X의 어떠한 속성을 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우를 말한다.
제 3정규형
-
테이블 R이 제 2정규형이고, 기본키가 아닌 모든 속성이 기본키에 대해 이행 함수적 종속을 만족하지 않는 정규형이다.
-
이행 함수적 종속이란 X -> Y, Y -> Z의 경우에서 추론될 수 있는 X -> Z의 종속 관계를 말한다.
BCNF 정규형
- 테이블 R이 제 3정규형이고, 모든 결정자가 후보키인 정규형이다.
제 4정규형
-
테이블 R이 BCNF정규형이고, 다중 값 종속이 존재하지 않는 정규형이다.
-
다중 값 종속이랑 X -> Y, X -> Z인 경우이다. 이럴 때 R1(X, Y) R2(X, Z)로 분해한다.
제 5정규형
- 테이블 R이 제 4정규형이고, 모든 조인 종속이 후보키를 통해서만 성립이 되도록 한 정규형이다.
정규화의 장단점
-
장점
-
이상 현상이 발생하는 문제점을 해결할 수 있다.
- 데이터베이스 구조 확장이 용이하다.
-
- 단점
- 릴레이션간 연산(Join)이 많아진다. 이로 인해 응답 시간이 느려질 수 있다.
- 조회하는 SQL문장에서 조인이 많이 발생하여 이로 인해 성능 저하가 나타나는 경우 무결성이 깨지지 않는 한에서 반정규화를 적용하는 전략이 필요하다.
reference
goodgid.github.io/DB-Normalization(1)/
goodgid.github.io/DB-Normalization(2)/
'CS > DB' 카테고리의 다른 글
DB - 파티셔닝과 샤딩 (0) 2021.02.12 DB - NOSQL (0) 2021.02.12 DB - 스키마 (0) 2021.02.12 DB - ORM (0) 2021.02.11 DB - Join (0) 2021.02.11 -