데이터베이스 정규화 - Heeyoung-Ahn/MariaDB-with-Excel-VBA GitHub Wiki

정규화의 목적


정규화의 내용

제 1정규화(First Normal Form, 1NF)

  • 각 로우마다 컬럼의 값이 1개만 있어야 함(컬럼이 원자값(Automic Value)을 갖아야 함).
    예: 주문상품 컬럼에 두 개의 주문 내용을 적으면 안됨
  • 동일한 컬럼이 중복되면 안됨
    예: 주문상품1, 주문상품2
  • 기본 키의 데이터가 중복되면 안됨

제 2정규화(Second Normal Form, 2NF)

  • 테이블의 기본키가 아닌 모든 컬럼(속성)은 기본키에 완전 함수 종속되어야 한다.
  • 함수 종속?
    • X의 값에 따라 Y 값이 결정될 때 X는 결정자, Y는 종속자라 표현하며(X → Y)
    • Y는 X에 대해 함수 종속되었다고 함 예) 학번: X, 이름: Y
  • 함수적 종속에서 X값이 여러 요소일 경우(기본키로 두 개 이상의 컬럼을 사용하는 경우), 즉 (X1, X2) → Y일 경우
    • X1과 X2가 Y의 값을 결정할 때 이를 완전 함수 종속이라 하고,
    • X1, X2 둘 중 하나만 Y값을 결정할 때 이를 부분 함수 종속이라 함
  • 데이터베이스 테이블에 부분 함수 종속이 포함되어 있을 때 이를 별도의 테이블로 분리하는 것을 제 2정규화라고 함
    • 예) (테이블 컬럼) 주문번호, 상품코드, 상품명, 개수
      • (주문번호, 상품코드) → 개수| 완전 함수 종속 , 상품코드→ 상품명| 부분 함수 종속
    • 부분 함수 종속을 다른 테이블로 분리하여 제 2정규화
      (테이블1 컬럼) 상품코드, 상품명
      (테이블2 컬럼) 주문번호, 상품코드, 개수

제 3정규화(Third Normal Form, 3NF)

  • 기본키가 아닌 모든 컬럼(속성)이 기본키에 이행적 함수 종속이 되지 않아야 한다.
    즉, 모든 컬럼은 기본키에만 의존해야 한다.
  • 제 3정규화에 위배되는 테이블 구조 예
    • 주문번호, 날짜, 고객번호, 성명, 연락처
      주문번호 → 날짜, 주문번호 → 고객번호, 고객번호 → 성명, 고객번호 → 연락처 | 성명, 연락처는 주문번호에 대해 이행 함수 종속됨
  • 제 3정규화 진행
    (테이블1 컬럼) 주문번호, 날짜, 고객번호
    (테이블2 컬럼) 고객번호, 성명, 연락처

참조

⚠️ **GitHub.com Fallback** ⚠️