정규화(Normalization)

Yunsung·2024년 12월 23일
post-thumbnail

정규화는 데이터베이스 설계에서 데이터 중복을 줄이고 무결성을 유지하기 위한 프로세스입니다.
정규화를 통해 데이터를 구조화하면서 저장 공간을 절약하고, 데이터 갱신, 삭제, 삽입 시 발생할 수 있는 이상 현상을 방지할 수 있습니다.

여기서는 BCNF까지만 다루도록 하겠습니다.

정규화의 목적

  • 데이터 중복 방지.
  • 데이터 무결성 유지.
  • 데이터베이스의 관리 효율성 향상.

핵심 규칙

  1. 하나의 테이블은 한 가지 주제를 표현해야 한다.
  2. 중복된 데이터는 별도의 테이블로 분리.

제 1 정규형(1NF)

모든 데이터는 원자값을 가져야 한다. (하나의 컬럼에 여러 값이 들어있지 않아야한다.)

  • 예시: 고객 테이블이 아래와 같이 구성되어 있다고 가정합니다.

    고객ID이름구매 물품
    1홍길동치약, 칫솔
    2전우치비누
  • 문제점: 구매 물품을 별도의 테이블로 분리

    1NF 변환 후:

    • 고객 테이블:

      고객ID이름
      1홍길동
      2전우치
    • 구매 물품 테이블:

      고객ID구매 물품
      1치약
      1칫솔
      2비누

제 2 정규형(2NF)

1NF 만족 + 부분 함수 종속 제거.(기본 키의 일부에 종속된 컬럼은 분리.)
쉽게 말해 일반속성은 주식별자 "전체"에 종속이어야 한다.

  • 예시: 아래 테이블에서 기본 키는 (학생ID, 과목)입니다.

    학생ID과목점수학생 이름
    1수학90홍길동
    1영어85홍길동
    2수학88전우치
  • 문제점: 학생 이름은 학생ID에만 종속되므로, 과목과는 관계가 없습니다.

  • 해결방법: 학생 정보를 별도의 테이블로 분리.

    2NF 변환 후

    • 학생 테이블

      학생ID학생 이름
      1홍길동
      2전우치
    • 성적 테이블

      학생ID과목점수
      1수학90
      1영어85
      2수학88


    제 3정규형(3NF)

    2NF 만족 + 이행적 종속 제거.(주식별자를 제외한 일반속성들 간의 종속이 있으면 안된다.)
    이행적 종속: A → B, B → C 관계가 있을 때, A가 C를 간접적으로 결정하는 경우

  • 예시: 아래 테이블에서 상품번호는 상품명에 종속되어 있습니다.

    고객ID이름우편번호지역
    1홍길동12345서울특별시
    2전우치67890부산광역시
  • 문제점: 지역은 우편번호에 종속되어 있으므로 중복 데이터가 발생!

  • 해결방법: 우편번호와 지역 정보를 별도의 테이블로 분리.

  • 3NF 변환 후

    • 고객 테이블

      고객ID이름우편번호
      1홍길동12345
      2전우치67890
    • 우편번호 테이블

      우편번호지역
      12345서울특별시
      67890부산광역시


BCNF

3NF 만족 + 모든 결정자가 후보 키여야 함.

  • 결정자(Determinant): 어떤 속성 값을 기준으로 다른 속성을 고유하게 결정할 수 있는 속성(또는 속성 집합).
    예: 학번 → 이름에서 학번은 결정자(이름은 중복될 수 있기때문)
  • 후보 키: 후보키는 테이블에서 각 행을 고유하게 식별할 수 있는 최소 속성들의 집합을 의미.(유일성, 최소성)

그렇다면❗❗ BCNF가 필요한 이유는❓

  • 3NF는 대부분의 데이터 중복 문제를 해결하지만, 결정자가 후보키가 아닌 경우 데이터 이상(Anomaly)이 발생할 가능성이 남아 있다.

  • BCNF는 이러한 문제를 해결하기 위해 모든 결정자를 후보키로 만드는 것을 목표로함.

  • 예시: 강의 테이블에서 강의실은 강사에 따라 결정.

    강의실시간강의강사
    20110:00수학홍길동
    20215:00과학홍길동
    20310:00영어김철수
    20415:00체육전우치
    • 문제점: 강사가 강의실을 결정하지만, 강의는 기본키의 일부가 아니고, 후보 키가 아님.

    • 해결방법: 강의와 강사를 별도의 테이블로 분리

    • 강의-강사 테이블

      강의강사
      수학홍길동
      과학홍길동
      영어김철수
      체육전우치
    • 강의실 시간표 테이블

      강의실시간강의
      20110:00수학
      20115:00과학
      20210:00영어
      20315:00체육



정규화의 장단점

장점:

  1. 데이터 중복 제거로 저장 공간 절약.
  2. 데이터 무결성 유지 및 이상 현상 방지.
  3. 데이터 갱신 및 관리 효율성 향상.

단점:

  1. 테이블 수 증가로 인해 JOIN 연산이 많아짐 -> 성능 저하.
  2. 설계 및 구현이 복잡해짐.
profile
풀스택 개발자로서의 도전을 하는 중입니다. 많은 응원 부탁드립니다!!😁

0개의 댓글