본문 바로가기

[DB]DataBase/[SQL]

[SQLD] 정규화(Normalization)

728x90
반응형

정규화

중복 데이터를 허용하지 않는 방식으로 테이블을 설계하는 방식을 '정규화' 라고 한다.

데이터 모델링에서 테이블 간 데이터 중복을 최대한 허용하지 않아야 저장공간의 효율적 사용과 업무 프로세스의 성능을 기대할 수 있다.

  • 하나의 엔터티에 많은 속성을 넣게 되면 해당 엔터티를 조회할 때 마다 많은 양의 데이터가 조회되므로 최소한의 데이터를 하나의 엔터티에 넣도록 테이블을 분리하는 과정
  • 데이터의 일관성, 최소한의 데이터 중복(데이터 무결성(Integrity)), 최대한의 데이터 유연성을 위한 과정
  • 데이터 중복을 제거함으로써 데이터 모델의 독립성을 확보
  • 데이터 이상현상을 줄이기 위한 데이터 베이스 설계 기법
  • 엔터티를 상세화하는 과정으로 논리 데이터 모델링 수행 시점에서 고려
  • 제 1 정규화 ~ 제 5 정규화 구성되고, 실질적으로 제 3 정규화까지만 수행

이상현상(Abnormality)

정규화를 하지 않아서 발생하는 현상(삽입이상, 갱신이상, 삭제이상)

 

정규화 단계

제 1 정규화(1NF)

테이블의 컬럼(속성)이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분리한다.

-> 각 컬럼(속성)의 값이 반드시 하나의 값만 입력되도록 행을 분리하는 단계

제 1 정규화 - 1단계

컬럼 단위로 중복되는 데이터는 행을 분리한다.

제 1 정규화 - 2단계

행 단위로 중복되는 데이터는 테이블을 분리하고 기본키(PK)를 사용하여 연결한다.

제 1 정규화 - 2단계 (종속성)

이때 함수적 종속성을 가지도록 분리한다. 기본키 1개에 의해서 함수적 종속성이 생기도록 하는 정규화를 제 1 정규화라고 한다.

➝ 중복 속성에 대한 분리가 1차 정규화의 대상이 되며, 로우 단위의 중복도 1차 정규화의 대상이 되지만 컬럼 단위로 중복이 되는 경우도 1차 정규화의 대상이다.

제 2 정규화(2NF)

제 2 정규화란 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분리하는 것이다.

완전 함수 종속은 기본키의 부분집합이 결정자가 되어서는 안됨을 의미한다.

2개 이상의 컬럼을 묶어서 기본키의 역할을 하는 경우, 묶인 복합키 중 1개의 키에만 종속된 컬럼이 있으면 부분 함수 종속성이 발생했다고 하며 테이블을 분리해서 부분 함수 종속성 문제를 해결해야 한다.

즉 PK(Primary Key)가 2개 이상일 때 발생하며, PK의 일부와 종속되는 관계가 있다면 분리한다.

제 2 정규화

제 3 정규화(3NF)

제 3 정규화는 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리하는 것이다.

이행 종속은 A->B, B->C가 성립할 때, A->C가 성립하는 것을 의미한다.

(A,B)와 (B,C)로 분리하는 것이 제 3 정규화이다.

제 3 정규화

 

함수적 종속성(기본키) -> 부분 함수 종속성(복합키) -> 이행 함수 종속성(일반 컬럼의 종속성) 순서로 종속 관계를 구현한다.

 

BCNF(Boyce-Codd Normal Form) 정규화

제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분리한다.

(결정자가 후보키가 아닌 다른 컬럼에 의해 종속되면 안됨)

제 4 정규화

여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분리하여 다중 값 종속성을 제거한다.

제 5 정규화

조인에 의해서 종속성이 발생되는 경우 분리한다.

정규형

  • 제1정규형
    • 모든 속성은 반드시 하나의 값을 가져야 한다.
  • 제2정규형
    • 엔터티의 일반속성은 주식별자 전체에 종속이어야 한다.
  • 제3정규형
    • 엔터티의 일반속성 간에는 서로 종속적이지 않다.

결정자와 종속관계

A 속성이 B 속성 값을 결정하게 되면, A는 B의 '결정자'라고 하고, 'B는 A에 종속된다.'고 표현한다.

반응형