본문 바로가기
CS/DB

[DB] 데이터베이스 정규화 (제 1, 2, 3, 보이스/코드, 4, 5 정규형)

by jangThang 2023. 4. 24.
반응형

 이상현상을 방지하기 위해, 테이블을 잘게 쪼개는 정규화라는 작업을 합니다. 정규화에는 1~5단계가 있으며, 이에 대해 알아보도록 하겠습니다.

 

[ Contents ]

     

     

    1. 정규화 (Normalization)

    이상현상(Anomaly)을 없애기 위해, 테이블을 잘게 쪼개는 과정

     

     앞서 이상현상을 살펴보았습니다. 이상현상은 삽입, 갱신, 삭제 시 원치 않는 결과를 초래하는 경우를 뜻합니다. PK값이 없어서 삽입할 수 없다던가, 갱신으로 인해 상이한 데이터가 생긴다던가 하는 문제가 있었죠.

     

    2023.04.24 - [Data Engineering] - [DB] 데이터베이스 이상현상(삽입, 삭제, 갱신)과 함수종속성 개념과 예시

     

    [DB] 데이터베이스 이상현상(삽입, 삭제, 갱신)과 함수종속성 개념과 예시

    데이터베이스 이상현상에 대해서 알아보고, 이와 관련된 함수 종속성의 개념과 예시도 살펴보겠습니다. [ Contents ] 1. 이상현상 - 삽입 이상(Insertion Anomaly): 튜플 삽입 시, 원하지 않는 정보(NULL 등)

    star7sss.tistory.com

     

     이러한 이상현상을 없애기 위해서는 '테이블을 알맞게 쪼개는 작업'이 필요합니다. 이를 정규화라고 합니다.

     하지만 너무 테이블을 많이 쪼개면, 성능이나 유지관리 측면에서 어려움이 많습니다. 매번 관련 정보를 찾으려면 여러 테이블을 조인해서 처리해야 하니까요.

     그래서 요즘은 2~3 정규형에 그치는 경우도 많으며, 오히려 반정규화를 하는 경우도 있습니다. 그러면 이러한 정규형의 종류에 대해서 알아보겠습니다.

     

     

     

    2. 제1정규형 (1NF)

    모든 도메인이 원자값(Atomic Value)으로만 구성

     

     원자값은 하나의 속성(칼럼)이 하나의 값만 가지는 걸 말합니다. 이는 대부분의 관계형 데이터베이스에서 만족합니다. 

     

    학번 (PK) 성명 학과 등록금 장학
    23101322 장우영 컴퓨터공학과 0 특별 장학생
    23121423 공한비 디자인 학과 3,800,000 NULL
    23141322 박정현 컴퓨터공학과, 경영학과 2,800,000 NULL

     

     '박정현' 학생이 컴퓨터공학과와 경영학과를 복수전공한다고 한들, 이렇게 저장하지는 않습니다. 따로 복수전공 테이블이나 칼럼을 만들어서 추가하겠죠.

     

     

     

    3. 제2정규형 (2NF)

    모든 속성의 부분적 종속 (Partial Dependency)가 없이, 완전 함수 종속을 만족

     

     제n정규형은 그 이전 정규형을 모두 만족합니다. 제2정규형의 경우에는 제1정규형의 조건에 '완전 함수 종속'이라는 조건이 추가된 형태죠.

     완전 함수 종속이란 '오로지 기본키(PK)만으로 다른 속성이 결정'되는 것을 말하며, 기본키의 일부만으로도 다른 속성이 결정되어서는 안됩니다. 

     

    학기 (PK) 학번 (PK) 성명 학과 등록금 장학
    2023-1 23101322 장우영 컴퓨터공학과 0 특별 장학생
    2023-1 23121423 공한비 디자인 학과 3,800,000 NULL
    2023-1 23141322 박정현 컴퓨터공학과 2,800,000 NULL

     

     위와 같은 등록금 테이블이 있다고 합시다. 기본키는 학기와 학번입니다.

     하지만 성명과 학과는 '학번'만으로도 결정될 수 있습니다. 굳이 학기까지 몰라도 됩니다. 이런 경우, 성명과 학과는 부분적 종속되어 있는 속성이라 볼 수 있습니다. 따라서 제2정규형을 만족시키려면 학과 칼럼을 제거하거나, 따로 테이블을 만들어야 합니다.

     그렇다면 이런 테이블을 쓴다면 어떤 이상현상이 발생할까요? 학생이 개명이나 전과를 했을 때, 등록금 테이블의 내용은 그대로 변하지 않겠죠. 그러면 데이터 불일치 현상이 생깁니다.

     하지만 당시 입금자명이나 등록금을 산정한 학과를 알아야하는 경우에는 이렇게 일부로 부분적 종속을 남기기도 합니다. 

     

     

     

    4. 제3정규형 (3NF)

    기본키를 제외한 속성들 간 이행 종속성(Transitive Dependency)이 없음

     

     이행 종속성이란 'X → Y이고 Y → Z 일 때, X → Z'인 경우를 말합니다.

     

    학기 (PK) 학번 (PK) 성명 학과 기본 등록금
    2023-1 23101322 장우영 컴퓨터공학과 2,800,000
    2023-1 23121423 공한비 디자인 학과 3,800,000
    2023-1 23141322 박정현 컴퓨터공학과 2,800,000

     

     학번을 알면 소속된 학과를 알 수 있고, 학과를 알면 기본 등록금을 알 수 있습니다.

     즉 '학번 → 학과이고 학과→ 기본 등록금이면 학번 → 기본 등록금' 입니다. 따라서 전과를 하게 되면, 기본 등록금도 같이 변경해줘야 하는 갱신 이상이 생깁니다.

     

     

    학기 (PK) 학번 (PK) 학과
    2023-1 23101322 컴퓨터공학과
    2023-1 23121423 디자인 학과
    2023-1 23141322 컴퓨터공학과
    학기 (PK) 학과 (PK) 기본 등록금
    2023-1 컴퓨터공학과 2,800,000
    2023-1 디자인 학과 3,800,000
    2023-1 컴퓨터공학과 2,800,000

     

     제3정규형을 만족하려면, 학과별 기본 등록금 테이블을 따로 분리해야 합니다.

     

     

    5. 보이스/코드 정규형 (BCNF)

    모든 결정자가 후보키일 때, 결정자이면서 후보키가 아닌 것을 제거

     

    6. 제4정규형 (4NF)

    다치 종속(MVD) 제거

     

    7. 제5정규형 (5NF)

    모든 조인 종속이 후보키를 통해서만 성립 (PJ/NF)

     

     제3정규형 이후로는 거의 사용하지 않습니다. 위 정규형을 만족시키려면 사실상 테이블당 2개 컬럼만 써야 합니다.

     그렇게 쪼개서 테이블은 운용하는 곳은 없으며, 이론적으로 좀 더 공부하고 싶으신 분들만 찾아보시면 되겠습니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글