ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [데이터베이스] 정규화(Normalization) 정리
    개발/데이터베이스 2021. 11. 15. 00:15

    정규화란


    정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.

     

    정규화의 목적


    첫째 : 불필요한 데이터를 제거해 저장 공간을 최소화하고 불필요한 중복을 최소화한다.
    둘째 : 삽입, 갱신, 삭제 시 발생할 수 있는 각종 이상 현상을 방지하기 위해서, 테이블의 구성을 논리적이고 직관적으로 한다.

     

    정규화의 필요성


    정규화가 안되어 있을 때 발생할 수 있는 문제점들을 보면 정규화가 왜 필요한지에 대해 명확히 알 수 있습니다.

    정규화가 안된 테이블

    1. 삽입 이상(Insertion Anomaly)

    수강을 1개도 하지 않는 편입생을 위 테이블에 입력하려고 할 때 발생하는 문제입니다. 학번과 과목명 조합을 기본키로 사용하고 있기 때문에 null 입력이 되지 않아 편입생 데이터를 삽입할 수 없습니다. 입력을 하기 위해선 미수강 과 같은 과목명을 새로 만들어야만 삽입이 가능합니다. 이렇게 신규 데이터를 삽입하기 위해선 불필요한 데이터를 입력해야 하는 문제를 삽입 이상이라 합니다.

    2. 갱신 이상(Update Anomaly)

    김 씨 성을 가진 학생이 학과를 전기공학과로 옮기는 경우, 3개의 행에 학과 데이터를 변경해야 합니다. 이때, 3개가 아닌 1개나 2개만 변경하는 경우, 해당 학생의 학과는 컴공인지 전기공학인지 알 수 없게 됩니다. 이렇게 중복 데이터 중, 일부만 변경해 데이터가 불일치하게 되는 문제를 갱신 이상이라 합니다.

    3. 삭제 이상(Deletion Anomaly)

    이 씨 성을 가진 학생이 영어 과목을 수강 취소할 경우, 해당 학생의 정보를 전부 지워야 합니다. 수강 취소를 했는데 학생의 정보까지 전부 지워지게 되는 상황입니다. 이렇게 삭제가 되지 않아야 할 데이터도 같이 지워지는 문제를 삭제 이상이라 합니다. 이러한 문제는 정규화가 되어 있지 않아서 발생하는 문제입니다. 정규화를 하기 위해선 속성들 간의 관련성을 파악해야 하는데 이러한 속성들 간의 관련성을 함수정 종속성(Functional Dependency)이라 합니다. 일반적으로 1개의 릴레이션에는 1개의 함수적 종속성만 존재하도록 정규화합니다.

     

    정규화 순서


     

    정규화 순서

     

    5 정규화 이상도 존재하지만 실무에서는 3차 정규화까지만 주로 사용됩니다.
    3차 정규화까지 좀 더 자세히 설명을 적어보면 이렇게 정리 가능합니다.

    1차 정규화
     - 테이블의 칼럼이 원자 값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것
     - 기본키를 설정한다
    2차 정규화

     - 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.
     - 기본키에 종속되도록 분리

    3차 정규화
     - 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. 여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미한다.


    댓글

Designed by Tistory.