정보처리기사 공부를 하면서 정규화에 대해서 조금 공부했었지만 다시 한번 공부하며 정리해보도록 하자.
두부이결다조!
정규화(Normalization)란?
정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 중복을 허용하지 않음으로써 무결성을 유지할 수 있고 DB의 저장 용량 역시 줄일 수 있다.
이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다.
정규화의 장점:
- 데이터베이스 변경 시 이상 현상을 제거할 수 있다.
- 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확상 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
- 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킬수 있다.
정규화의 단점:
- 릴레이션의 분해로 인해 릴레이션 간의 JOIN연산이 많아진다.
- 쿼리에 대한 응답 시간이 느려질 수도 있다.
- 만약 조인이 많이 발생하여 성능정하가 나타나면 반정규화를 적용할 수도 있다.
여기서 말하는 이상현상과 종속성이란?
이상현상 3가지
삽입 이상(Insertion Anomaly) : 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
삭제 이상(Deletion Anomaly) : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
갱신 이상(Update Anomaly) : 튜플 갱신 시 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불일치 현상
함수 종속성(FD : Functional Dependency)이란?
어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 관계를 종속성이라고 한다.
A -> B로 표기하며 A를 B의 결정자(Determinant)라고 한다.
A -> B이면 A는 B를 결정한다(Determine) 한다고 하고, B는 A에 종속한다(Dependent)라고 한다.
함수 종속성 규칙
자 이제 제 1정규형부터 알아보도록 하자
-제1 정규형(1NF)
- 다음과 같은 규칙들을 만족해야 한다.
- 각 컬럼이 하나의 속성만을 가져야한다.
- 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
- 각 컬럼이 유일한 이름을 가져야 한다.
- 칼럼의 순서가 상관없어야한다.
-제2 정규형(2NF)
- 다음과 같은 규칙들을 만족해야 한다.
- 1정규형을 만족해야 한다.
- 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 한다. (모든 칼럼이 완전 함수 종속을 만족해야 한다.)
완전 함수 종속이란 기본키의 부분집합이 결정자가 되어선 안되는 말이다.
-제3 정규형(3NF)
- 2 정규형을 만족해야 한다.
- 기본키를 제외한 속성들 간의 이행 종속성 (Transitive Dependency)이 없어야 한다.
이행 종속성이란 A->B, B->C일 때, A->C가 성립하면 이행 종속이라고 한다.
-BCNF(Boyce-Codd Normal Form)
BCNF는 제3 정규형을 강화한 버전이다.
- 3정규형을 만족해야 한다.
- 모든 결정자가 후보키 집합에 속해야 한다.
모든 결정자가 후보키 집합에 속해야 한다는 뜻은, 후보키 집합에 없는 칼럼이 결정자가 되어서는 안된다는 뜻.
-제4 정규형 이상도 있지만 보통 정규화는 BCNF까지만 하는 경우가 많다. 그 이상의 경우 정규화의 단점이 나타날 수도 있기 때문이다
출처: https://code-lab1.tistory.com/48
[DB] 정규화(Normalization)란? 정규화 예시, 1NF, 2NF, 3NF, BCNF
정규화(Normalization)란? 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계
code-lab1.tistory.com
'IT지식 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] PostgreSQL 공부해보기 (0) | 2023.02.09 |
---|---|
[데이터베이스] DB Index 를 공부해보자. (0) | 2022.12.15 |
[데이터베이스] DB 트랜잭션에 대해 공부해보자. (0) | 2022.12.14 |
[데이터베이스] ORM에 대해 공부해보자 (0) | 2022.12.14 |
[데이터베이스] SQL과 NoSQL (0) | 2022.12.14 |