SQLD - 정규화

헨도·2023년 6월 21일
0

SQLD

목록 보기
7/28
post-thumbnail

정규화(Normalization)

  • 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.

  • 정규화는 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법이다.

  • 정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다.

  • 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화할 수 있다.

  • 정규화는 제1정규화부터 제5정규화까지 있지만, 실질적으로는 제3정규화까지만 수행한다.

    ex) 정규화를 하지 않아 이상현상이 존재하는 모델

    사원번호, 부서코드
    이름
    전화번호
    주소
    부서명
  • 이 테이블은 정규화를 수행하지 않은 것으로, 부서 테이블과 직원 테이블을 하나로 합쳐둔 것
    만약 이 테이블에서 새로운 직원이 추가되는 경우 부서 정보가 없으면 부서코드를 임의의 값으로 넣어야 한다.
    즉, 불필요한 정보가 같이 추가되는 것이다.
    이러한 문제를 이상현상(Anomaly)이라고 한다.

    ex) 정규화된 모델

    (직원)

    사원번호
    부서코드(FK)
    이름
    전화번호
    주소

    (부서)

    부서코드
    부서명
  • 정규화된 모델은 테이블이 분해된다.
    테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인(Join)을 수행하여 하나의 합집합으로 만들 수도 있다.

  • 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.

  • 정규화 절차

    정규화 절차설명
    제1정규화- 속성(Attribute)의 원자성을 확보한다.
    - 기본키(Primary)를 설정한다.
    제2정규화- 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.
    제3정규화- 기본키를 제외한 컬럼 간에 종속성을 제거한다.
    - 즉, 이행 함수 종속성을 제거한다.
    BCNF기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.
    제4정규화여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.
    제5정규화조인에 의해서 종속성이 발생되는 경우 분해한다.
profile
Junior Backend Developer

0개의 댓글