💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    테이블 정규화(심화) | ✅저자: 이유정(박사)

    EMPLOYEE_ACCOUNT
    bank_name account_num account_id class ratio empl_id empl_name card_id
    Woori 010-9231-1121 a11 BRONZE 0.1 e1 Sony c101
    Woori 102-992-180125 a12 SILVER 0.2 e1 Sony c102
    Kookmin 010-9231-1121 a13 LOYAL 0.7 e1 Sony c103
    Kookmin 010-1221-1732 a21 LOYAL 1.0 e2 Messi c201, c202

    제1정규형 (1NF): 원자성 만족 (한 셀 = 한 값)

    • 한 칸에 여러 값이 있는 것(반복 속성) → 각각 분리

    ⚠️ 문제:

    • card_id에 여러 개 값이 있는 행 존재 → 예: "c201, c202"

    해결:

    • 각 카드 ID를 분리해서 행으로 나눔
    account_id card_id
    a11 c101
    a12 c102
    a13 c103
    a21 c201
    a21 c202
    → 그리고 card_id는 별도 테이블로 분리해주는 게 좋습니다 (아래에서 3NF에서 적용)

    제2정규형 (2NF): 부분 함수 종속 제거 이미 1NF 만족

    ⚠️ 문제:

    • 복합 키가 아닌 경우에도, 기본키(account_id)에만 의존하지 않는 컬럼이 존재
    • 예를 들어, empl_nameempl_id에만 의존함 → 반복됨

    해결: 종속성 따라 테이블 분리 테이블 분리 계획

    Account 테이블
    account_id bank_name account_num class ratio empl_id
    a11 Woori 010-9231-1121 BRONZE 0.1 e1
    a12 Woori 102-992-180125 SILVER 0.2 e1
    a13 Kookmin 010-9231-1121 LOYAL 0.7 e1
    a21 Kookmin 010-1221-1732 LOYAL 1.0 e2
    Employee 테이블
    empl_id empl_name
    e1 Sony
    e2 Messi

    제3정규형 (3NF): 이행적 종속 제거

    이행적 종속이란? 기본키가 아닌 컬럼이, 또 다른 기본키가 아닌 컬럼에 종속되는 현상

    ⚠️ 문제:

    • classratio
      즉, class 값만 보면 ratio가 정해짐 → 이건 class에 종속된 정보지, account_id에 직접 종속된 정보가 아님

    해결: classratio를 분리

    Class 테이블
    class ratio
    BRONZE 0.1
    SILVER 0.2
    LOYAL 0.7
    LOYAL 1.0
    하지만 여기서 LOYAL이 두 개의 ratio를 가지면 → class → ratio 관계가 1:1이 아님 → 정규화 불가 → 따라서 class에 따라 ratio가 고정된 경우에만 분리

    정규화 후 테이블 구조 요약

    Account
    account_id bank_name account_num class empl_id
    a11 Woori 010-9231-1121 BRONZE e1
    a12 Woori 102-992-180125 SILVER e1
    a13 Kookmin 010-9231-1121 LOYAL e1
    a21 Kookmin 010-1221-1732 LOYAL e2
    Employee
    empl_id empl_name
    e1 Sony
    e2 Messi
    Card
    account_id card_id
    a11 c101
    a12 c102
    a13 c103
    a21 c201
    a21 c202

    ClassRatio (가능한 경우)
    class ratio
    BRONZE 0.1
    SILVER 0.2
    LOYAL 0.7 or 1.0 → 둘 중 하나로 고정 시 분리 가능
    TOP
    preload preload