SKN/02. DB

06. 정규화

claovy☘️ 2025. 2. 19. 10:08

1. 정규화

01. 정규화?

  • 중복 데이터를 제거하여 안정성과 확장성을 도모한다.
    • 안정성 : 함수 종속을 기반으로 데이터 성격에 맞는 엔터티가 도출
    • 확장성 : 데이터의 정체성이 그대로 반영되어 업무 변경이 반영되기 수월해진다

02. 함수 종속

  • 속성 X의 값을 이용해 속성 Y의 값을 유일하게 식별 O / X에 대해 하나의 Y가 연관
  • 릴레이션 내에 존재하는 속성 간의 종속성
  • 결정자와 결정자의 값에 의해 유일하게 식별되는 값을 종속자 라고 한다.
  • 대표 속성이 나머지 속성을 유일하게 식별할 수 있다면, 대표 속성과 나머지 속성 사이에는 연관 관계가 성립한다. 이를 함수 종속이라고 한다.

2. 정규화 종류

1 정규형 => 도메인 값 제거
  • 모든 속성은 반드시 하나의 값을 가져야 한다. (속성은 원자값을 지녀야 한다.)
  • 다가 속성(Multivalued Attributes)과 복합 속성(Composite Attributes)에 대해 판단하여 처리한다.
    • 다가 속성 : 하나의 인스턴스에 하나의 속성이 여러 값을 가지게 되는 속성
    • 복합 속성 : 여러 속성이 하나의 속성으로 묶여있는 속성
  • 다가 속성과 관련된 1 정규형 처리 방법은 다음과 같다.

  • (1)과 같이 속성을 추가해서 인스턴스별로 하나의 속성에 하나의 값이 들어갈 수 있게 할 수 있다. 다만 이렇게 처리할 경우 속성의 갯수가 더 적을 경우가 많거나 추가한 속성의 수보다 많은 값은 처리할 수 없다. 속성이 한정적이고 제한적으로 존재할 때 처리할 수 있는 방법이다.
  • (2)와 같이 엔터티를 따로 추출해서 1대 다 관계로 처리할 수 있다. 새로 생성된 엔터티의 인스턴스들을 구분하기 위해 속성들을 모두 식별자(복합키)로 활용하는 경우이다. (인스턴스의 구분 기준을 고려하여 식별자를 선정한다.)
  • (3)의 경우는 (2)에서 추가적인 속성으로 인조식별자를 추가하여 인스턴스를 구분하고 나머지 속성은 비식별자로 처리하는 경우이다.

[복합 속성과 관련된 1정규형 처리 방법]

  • 주소라는 속성은 여러 속성이 하나로 묶인 복합속성의 의미가 될 수 있다.
  • 업무상 주소를 구분해서 사용하고자 하는 경우가 많을 때 속성을 구별하며, 하나의 주소로 다룰 때가 많을 때는 속성을 구분해서 사용하는 것은 좋지 않다.
2 정규형 => 부분함수 종속 제거

  • 부분함수 종속 : 하나의 컬럼에만 종속되는 속성이 있는 것 => 별도의 테이블로 분리
  • 후보 식별자 속성과 일반 속성 간의 종속성을 판단하여 처리한다.

 

3 정규형

  • 이행적 종속성(Transitive Dependency)을 제거하고 일반속성 간에 종속관계가 없도록 처리한다.
  • 이행적 종속성 : 일반 속성 간의 종속 관계가 있을 때 
  • 일반 속성에 결정자 속성과 종속자 속성이 있는 경우 다른 엔터티로 구별하여 분리한다.
BCNF

  • 모든 결정자는 주식별자가 되도록 한다.
  • 결정자 속성이 일반 속성이며 종속자 속성이 주식별자에 포함되어 있다.

 

4 정규형

 

  • 다가 종속인 속성들간에 서로 직접적인 연관이 없으면 다가 종속인 속성들은 새로운 엔터티로 분해하여 다가종속 관계를 제거한다.
  • 보유자격증과 관심분야는 각각 다가 속성이면서 서로 관련이 없으므로 엔터티를 분리한다.
5 정규형

  • 조인해서 원래의 릴레이션으로 복원할 수 있도록 분해하여 조인 종속성을 제거한다.
    • 무손실 조인(Lossiess Join) : 하나의 릴레이션을 여러 개의 릴레이션으로 분해하고 공통 속성으로 조인하여 데이터 손실 없이 다시 원래의 릴레이션으로 복원할 수 있음
    • 비부가적 조인 : 하나의 릴레이션을 여러 개의 릴레이션으로 분해하고 원본 릴레이션에 없는 데이터가 존재하지 않음
    → 5정규형은 무손실 분해가 되고 필요없는 데이터가 생기지 않는 비부가적 분해가 된 것이다.

'SKN > 02. DB' 카테고리의 다른 글

08. CONSTRAINTS  (0) 2025.02.19
07. DDL(Data Definition Language)  (0) 2025.02.19
05. 이상(Anomaly)  (0) 2025.02.19
03. DB Modeling 개요  (0) 2025.02.19
02. MySQL 개요  (0) 2025.02.18