정규화 & 비정규화

박효상·2022년 12월 20일
0

MySQL

목록 보기
6/6
post-thumbnail

정규화란?

  • RDBMS에서 중복 최소화를 위해 테이블 분리와 같이 데이터를 구조화하는 작업
  • 불필요한 데이터 제거를 통한 데이터 무결성 유지 및 DB 저장 용량 줄이기
  • CRUD시 생길 각종 이상현상을 방지

제 1 정규화

  • 원자성
    • 테이블 컬럼은 하나의 값(Atomic Value)만 갖도록 테이블을 분리하는 것
    • 하나의 컬럼이 다중 값을 가지거나, 하나의 로우가 반복그룹을 가질경우 제 1 정규화 위배
  • 예시
    • 정규화 전
      이름       수강과목
      -----------------
      김민기       수학
      오민혁     과학,국어
      이진호       영어
    • 정규화 후
      이름       수강과목
      -----------------
      김민기       수학
      오민혁       과학
      오민혁       국어
      이진호       영어

제 2 정규화

  • 완전 함수 종속
    • 기본키를 제외한 모든 속성은 기본키 일부가 아닌 모든 기본키에 종속되어야 한다. 즉 기본키와 각 속성은 1대1 관계여야 한다

제 3 정규화

  • 이행 종속
    • 기본키가 아닌 모든 속성간에는 서로 종속 될 수 없다
    • 서로 종속되는 속성끼리 따로 테이블 분리 필요

비정규화 특징

  • 장점
    • 소수의 테이블에 필드가 전부 들어가 있어 Join 연산이 줄어들기에 코드 복잡성이 줄어들고 빠른 조회 가능
  • 단점
    • DB 구조를 봤을 때, 목적 단위로 명확히 테이블 분리가 안 이뤄져 DB 구조 이해가 어렵다
    • 중복된 불필요한 데이터 발생으로 데이터 무결성이 깨지고 3가지 이상 현상(Anomaly) 발생
      • 삽입 이상 : 데이터 삽입시 의도치 않은 값들을 함께 삽입하지 않으면 데이터 저장이 불가능한 현상 (ex. NULL)
      • 갱신 이상 : 데이터 갱신시 중복된 데이터 중 일부만 갱신할 때 데이터 불일치가 발생되는 현상
      • 삭제 이상 : 현재 필요한 데이터를 삭제하지 않고서는 어떤 데이터를 삭제하는 것이 불가능한 현상
profile
집념의 백엔드 개발자

0개의 댓글