[CS] ERD 와 정규화 과정

Woozy9ucci·2022년 12월 18일
  • ERD란 ?
    DB 구축 시 가장 기초적인 뼈대, 관계를 정리 & 정의 한 것
    (당근마켓 클론코딩 예시)
    https://www.erdcloud.com/d/2mDmcrHWY3CqW4Rrp

  • 정규화(Normalization)란 ?
    릴레이션 간 잘못된 종속 관계로 발생한 이상 현상을 해결 & 방지 하거나 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러개로 분리 하는 과정
    이 정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어가는 과정이다.

  • 정규형 원칙 ?
    1 . 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조
    2 . 자료의 중복성 감소
    3 . 독립적인 관계는 별개의 릴레이션으로 표현
    4 . 각각의 릴레이션은 독립적인 표현이 가능해야 함

  • 기본 정규형
    제1 정규형(1NF) : 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값 만으로 구성된 형태
    1 . 각 컬럼이 하나의 속성만을 가져야 한다.
    2 . 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
    3 . 각 컬럼이 유일한(unique) 이름을 가져야 한다.
    4 . 칼럼의 순서가 상관없어야 한다.

  • 제2 정규형(2NF) : 제1 정규형을 만족하며 부분함수의 종속성을 제거한 형태
    1 . 1정규형을 만족해야 한다.
    2 . 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 한다.
    == 모든 컬럼이 완전 함수 종속을 만족해야 한다. (기본키의 부분집합이 결정자가 되어서는 안된다)
    -> 부분적 종속이란? 기본키 중에 특정 컬럼에만 종속되는 것
    ex) 지도교수 = 부분적 종속 / 성적 = 완전 함수 종속

  • 제3 정규형(3NF) : 제2 정규형을 만족하고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 형태

  1. 2 정규형을 만족해야 한다.
  2. 기본키를 제외한 속성들 간의 이행 종속성 (Transitive Dependency)이 없어야 한다.
    -> 이행종속성이란?
    A->B, B->C, 일 때 A->C 가 성립 하는데 이 때 C 가 A에 이행적으로 함수 종속 되어있다고 말한다.
  • 보이스/코드 정규형(BCNF) : 제3 정규형을 만족하고 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 형태
    1 . 3정규형을 만족해야 한다.
    2 . 모든 결정자가 후보키 집합에 속해야 한다.
    -> 후보키 집합에 없는 칼럼이 결정자가 되어서는 안 된다는 것.

참고하면 이해가 잘 되는 블로그
https://code-lab1.tistory.com/48

0개의 댓글