본문 바로가기
IT지식/데이터베이스

[데이터베이스] 정규화에 대해 공부해보자

by five-sun 2022. 12. 15.
728x90

정보처리기사 공부를 하면서 정규화에 대해서 조금 공부했었지만 다시 한번 공부하며 정리해보도록 하자.

두부이결다조!

 

정규화(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)

  • 다음과 같은 규칙들을 만족해야 한다.
  • 각 컬럼이 하나의 속성만을 가져야한다.
  • 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
  • 각 컬럼이 유일한 이름을 가져야 한다.
  • 칼럼의 순서가 상관없어야한다.

Before
After

-제2 정규형(2NF)

  • 다음과 같은 규칙들을 만족해야 한다.
  • 1정규형을 만족해야 한다.
  • 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 한다. (모든 칼럼이 완전 함수 종속을 만족해야 한다.)

완전 함수 종속이란 기본키의 부분집합이 결정자가 되어선 안되는 말이다.

Before
After

-제3 정규형(3NF)

  • 2 정규형을 만족해야 한다.
  • 기본키를 제외한 속성들 간의 이행 종속성 (Transitive Dependency)이 없어야 한다.

이행 종속성이란 A->B, B->C일 때, A->C가 성립하면 이행 종속이라고 한다.

Before
After

-BCNF(Boyce-Codd Normal Form)

BCNF는 제3 정규형을 강화한 버전이다.

  • 3정규형을 만족해야 한다.
  • 모든 결정자가 후보키 집합에 속해야 한다.

모든 결정자가 후보키 집합에 속해야 한다는 뜻은, 후보키 집합에 없는 칼럼이 결정자가 되어서는 안된다는 뜻.

Before
After

-제4 정규형 이상도 있지만 보통 정규화는 BCNF까지만 하는 경우가 많다. 그 이상의 경우 정규화의 단점이 나타날 수도 있기 때문이다

 

출처: https://code-lab1.tistory.com/48

 

[DB] 정규화(Normalization)란? 정규화 예시, 1NF, 2NF, 3NF, BCNF

정규화(Normalization)란? 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계

code-lab1.tistory.com

 

728x90