본문 바로가기
Research/Database

데이터베이스 정규화(Normalization)

by RIEM 2023. 3. 23.

정규화(Normalization)란

데이터베이스 정규화(Database Normalization)는 데이터 중복(data redundancy)를 줄이는 방향으로 DB의 속성(attribute)를 조직해 나가는 프로세스다. 정규화는 데이터를 쪼개서 데이터 중복 문제를 해결하는 방식이다.

왜 데이터 중복을 줄여야 할까? DB를 비효율적으로 사용하기 때문이다. 게다가 CRUD 작업을 할 때 데이터가 1개가 아니기 때문에 한쪽만 바뀌게 되는 일관성 문제도 야기한다.

데이터를 쪼개는 이유

  • 불필요하거나 중복 데이터(data redundancy)를 제거하기 위해
  • 이상현상(Anomaly)를 방지하기 위해
  • 데이터를 논리적으로 저장하기 위해

 

정규화와 비정규화의 장단점 비교

정규화 : 중복을 최소하여 무결성을 확보하기 위함

  • 장점
    • 데이터변경 시 이상현상 제거
    • 효과적인 검색 알고리즘 생성
    • 데이터의 무결성
  • 단점
    • 여러 테이블을 조인으로 인한 응답 속도 저하

 

비정규화 : 읽는 시간에 최적화하기 위함

  • 장점
    • Join이 없어 신속한 조회
  • 단점
    • 데이터 수정, 삽입 시 비용이 높음
    • 상대적으로 낮은 무결성
    • 추가 저장으로 인한 메모리 공간

 

이상현상(Anomaly)

이상현상의 종류

  • 삭제 이상 : 데이터 삭제 시 무관한 다른 정보까지 연쇄적으로 삭제되는 현상
  • 삽입 이상 : 데이터 삽입 시 무관한 값들도 함께 삽입되는 현상
  • 수정 이상 : 데이터 수정 시 의도와 무관하게 데이터의 일부만 수정되어 데이터가 불일치되는 현상

최근 진행한 Stock Pyramid 프로젝트의 경우를 예를 들어보자.
비딩 정보와 래플 정보가 같은 테이블을 공유할 경우, 래플 정보를 생성하기 위해 인위적으로 비딩을 생성해줘야 한다는 삽입 이상 문제점이 발생한다. 이를 해결하기 위해 래플과 비딩 테이블을 따로 구분하는 정규화를 진행했다.

 

DBMS 정규화 절차

정규화 절차는 참 다양하다.

  • 제 1 정규화 : 속성(Attribute)의 원자성을 확보하고 원자값이 아닌 도메인을 분해
  • 제 2 정규화 : 기본키 2개 이상의 속성이 있을 경우, 종속성이 있는 부분을 분해해준다
  • 제 3 정규화 : 기본키 제외한 컬럼 간 조속성 제거
  • BCNF(Boyce-Codd Normal Form) : 기본키 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시킬 시 분해
  • 제 4 정규화 : 여러 칼럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성 제거
  • 제 5 정규화 : Join에 의해 종속성 발생하는 경우 분해

보통 제 3 정규화까지만 한다.

제1 정규화

  • 목적 : 기본기 설정 후, 테이블 내 모든 도메인이 원자성을 지니도록 할 것
  • 한 칸에 하나의 데이터만. 여러 데이터를 넣게되면 like문으로 구분해야 하는데 성능 저하가 발생함

정규화의 한계

  • 기본 키에

제2 정규화

  • 현재 테이블과 상관없는 컬럼을 다른 테이블로 빼는 것
  • partial dependency를 제거한 테이블.
    • Composite primary key : 합쳤을 때 primary key 역할을 할 수 있는 컬럼들
    • partial dependency : 하나의 composite primary key에 종속되는 컬럼들. 회원 테이블 내 프로그램, 가격 컬럼이 있는 경우에 가격이 프로그램 컬럼에 종속된다. 이 경우 가격 컬럼이 partial dependency가 있는 컬럼이다.
  • 회원 테이블 내 회원이름, 프로그램, 가격, 납부 등 컬럼들이 종속된 경우. 가격 데이터를 바꾸려면 개별로 따로 수정해줘야하는 문제가 발생. 프로그램, 가격 등은 프로그램 테이블로 따로 뺄 것
  • 장점 : 수정이 편함. 가격 바꿀 시, 프로그램 테이블의 가격 정보 하나만 바꾸면 끝
  • 단점 : 관계 맺는 데이터의 경우, 회원이 참가하는 프로그램의 가격을 알기 위해 참조를 해야함
  • RDBMS는 제2 정규화를 할 필요가 있음

제3 정규화

  • 일반 컬럼에만 종속되는 컬럼을 다른 테이블로 따로 빼는 것
  • 장점 : 수정이 편함
  • 단점 : 참조를 해야 함

Reference

댓글