inblog logo
|
DailyCoding
    SQLD

    1-2-1. 정규화

    박은서's avatar
    박은서
    Feb 25, 2026
    1-2-1. 정규화
    Contents
    1. 정규화의 개념1️⃣ 정규화의 정의2️⃣ 정규화의 필요성3️⃣ 다양한 정규 형태2. 정규화 형태1️⃣ 제1정규형 (1NF)2️⃣ 제2정규형 (2NF)3️⃣ 제3정규형 (3NF)4️⃣ 고급 정규화3. 반정규화1️⃣ 반정규화의 개념2️⃣ 반정규화가 고려되는 상황3️⃣ 반정규화의 방법4️⃣ 반정규화 시 고려해야 할 사항

    1. 정규화의 개념

    1️⃣ 정규화의 정의

    1) 정규화(Normalization)

    • 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상 현상을 제거하는 것 (한국데이터진흥원)
    • 목적 : 데이터베이스 설계에서 중복 최소화, 데이터 구조 체계화
      • 데이터의 일관성과 무결성을 보장하는 데 필수적
    • 정규화를 충분히 고려하지 않고 설계된 데이터베이스는 데이터가 증가함에 따라 많은 문제 발생할 수 있음

    2️⃣ 정규화의 필요성

    • 데이터의 중복 ↓, 데이터 구조화 → 데이터의 일관성과 무결성 보장
    • 정규화를 통해 테이블을 더 작고, 관리하기 쉬운 여러 테이블로 분리
      • → 데이터의 추가, 삭제, 수정 시 발생할 수 있는 다양한 이상 현상(Anomalies) 방지

    3️⃣ 다양한 정규 형태

    • 1차 정규형(1NF), 2차 정규형(2NF), 3차 정규형(3NF)
    • 복잡한 데이터 구조의 경우 확장된 규칙 적용
      • 보이스/코드 정규형(BCNF), 4차 정규형(4NF), 5차 정규형(5NF)

    2. 정규화 형태

    💡
    제1정규형(1NF)
    모든 속성은 하나의 값만 가져야 하며, 테이블에 중복된 데이터가 없어야 함
    제2정규형(2NF)
    제1정규형을 만족하며, 기본 키의 부분적 종속성이 제거되어 기본 키 전체에 종속되어야 함
    제3정규형(3NF)
    제2정규형을 만족하며, 모든 비주요 속성이 모든 주식별자에만 종속되고 비주요 속성 간의 종속성이 없어야 함
    제4정규형(4NF)
    제3정규형을 만족하며, 모든 다치 종속성이 후보 키를 통해서만 존재하는 상태로, 데이터 중복과 이상현상을 제거해야 함
    제5정규형(5NF)
    제4정규형을 만족하며, 모든 조인 종속이 후보 키를 통해서만 존재하는 상태로, 데이터 중복과 이상 현상을 제거해야 함

    1️⃣ 제1정규형 (1NF)

    • 기본 명제 : 속성은 하나의 값만 가져야 한다
      • 하나의 칼럼에는 하나의 값만 포함되어야 함
    • 제1정규형 원칙 X → 데이터 검색, 조회, 추출 시 데이터베이스 성능 저하 및 데이터의 입력, 수정 복잡해짐 → 개발 복잡해지고, 장기적으로 데이터 구조가 불안정해져 데이터 품질 저하

    2️⃣ 제2정규형 (2NF)

    • 모든 일반 속성이 모든 식별자 전체에 완전 함수적으로 종속해야 한다
      • 함수종속성(Functional Dependency) : 데이터가 특정 기준값에 의해 종속되는 현상
        • 이 때, 기준값을 결정자(Determinant), 종속되는 값을 종속자(Dependent)라고 함
    • 부분 함수 종속성을 제거해야 함 → 데이터 중복 ↓, 데이터 무결성 보장, 데이터 효율적으로 활용 가능

    3️⃣ 제3정규형 (3NF)

    • 제2정규형을 만족하면서 모든 비주요 속성이 모든 주식별자에만 종속되고, 비주요 속성간의 종속성이 없어야 한다
      • → 이행적 종속성(Transitive Dependency) 제거
      • 이행적 종속성 : A가 B에게 영향을 주고, B가 C에게 영향을 준다면, A가 C에게 간접적으로 영향을 줌
        • (DB관점) 한 테이블 내에서 특정 속성 값이 다른 속성을 통해 세 번째 속성 값을 결정짓는 상황

    4️⃣ 고급 정규화

    교재 p.49 참고

    1) 보이스-코드 정규형 (BCNF)

    2) 제4정규형 (4NF)

    3) 제5정규형 (5NF)

    3. 반정규화

    1️⃣ 반정규화의 개념

    1) 반정규화 (Denormalization)

    • 데이터베이스 설계 과정에서 정규화의 원칙을 일부 또는 전부 역행하여, 데이터의 중복을 의도적으로 허용하거나 테이블 구조를 단순화하는 과정
    • 정규화의 반대
    • 목적 : 성능 최적화, 쿼리의 복잡성 감소, 데이터 접근 속도 향상

    2️⃣ 반정규화가 고려되는 상황

    1) 조회 성능 향상

    • 정규화된 테이블을 조인하는 것보다 하나의 테이블에서 데이터를 읽는 것이 더 빠를 수 있음
    • 특히 읽기 연산이 많은 시스템에서 효과적

    2) 쿼리 간소화

    • 여러 테이블에 걸친 데이터를 조인 없이 접근할 수 있어 쿼리를 단순화할 수 있음 → 개발자가 시스템을 더 쉽게 이해하고 유지보수 할 수 있음

    3) 트랜잭션 처리 시간 단축

    • 데이터를 한 곳에 집중 → 트랜잭션 처리 시간 단축
    • 데이터 쓰기 작업에서 성능 이점 제공

    3️⃣ 반정규화의 방법

    1) 테이블 병합

    • 서로 관련된 여러 테이블을 하나로 합쳐서 관리 → 쿼리의 조인 연산 ↓

    2) 중복 데이터 추가

    • 자주 접근하는 데이터를 여러 테이블에 중복 저장 → 데이터 접근 시간 단축

    3) 집계 데이터 저장

    • 집계 함수를 사용해 조회하는 데이터(평균, 합계 등)를 사전에 계산하여 별도의 테이블에 저장 → 집계 쿼리의 실행 시간 단축

    4️⃣ 반정규화 시 고려해야 할 사항

    1) 데이터 무결성

    • 중복된 데이터는 데이터 무결성 문제 일으킬 수 있음
    • 반정규화 시 무결성을 유지할 방법 함께 고려해야 함

    2) 유지 보수

    • 데이터 구조가 복잡해지고 중복 데이터가 많아질수록 유지 보수 어려워질 수 있음
    • 반정규화 시 필요한 최소한의 범위에서 신중히 적용해야 함

    3) 적용 필요성 검토

    • 데이터 무결성, 시스템 복잡성, 유지보수성 등을 신중히 고려한 뒤 꼭 필요한 경우에만 반정규화 적용해야 함

    4) 합리적인 판단

    • 반정규화는 데이터 정합성 문제와 불필요한 트랜잭션으로 인한 성능 저하를 유발할 수 있음
    • 조회 성능에서 미미한 이점을 얻기 위해 반정규화를 적용했으나, 결과적으로 갱신 과정에서 다른 성능을 손해본다면 이는 합리적이지 않
    Share article
    Contents
    1. 정규화의 개념1️⃣ 정규화의 정의2️⃣ 정규화의 필요성3️⃣ 다양한 정규 형태2. 정규화 형태1️⃣ 제1정규형 (1NF)2️⃣ 제2정규형 (2NF)3️⃣ 제3정규형 (3NF)4️⃣ 고급 정규화3. 반정규화1️⃣ 반정규화의 개념2️⃣ 반정규화가 고려되는 상황3️⃣ 반정규화의 방법4️⃣ 반정규화 시 고려해야 할 사항

    DailyCoding

    RSS·Powered by Inblog