• 정의

    • 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔티티를 작은 단위로 분리하는 과정
    • 데이터에 대한 중복성 제거
    • 수행할수록 엔터티 증가됨
    • 조회 성능은 향상되거나 저하됨
    • 입력, 수정, 삭제 성능은 일반적으로 향상됨
    • 함수 종속성 고려하여 이상현상 생기지 않도록 함
  • 종류

    • 제1정규형

      • 모든 속성은 반드시 하나의 값만 가져야 함
      • 하나의 속성이 다중값을 가지면 안 됨
        • ex) JOB 속성값 가수, 배우, 작곡가 → 별도 엔터티 만들어서 row별로 분리
      • 유사한 속성이 반복되면 안됨
        • ex) 한 엔터티에 SITE1, SITE2, SITE3 속성 존재 → 별도 엔터티 만들어서 row별로 분리
      • 원자값
    • 제2정규형

      • 모든 일반속성은 반드시 모든 주식별자에 종속되어야 함
        • ex) PK가 주문번호, 음료코드이며 속성 중 음료명이 있음
          • 음료명은 음료코드에만 종속됨 → 별도 엔터티 만들어서 음료코드, 음료명 관리
      • 완전함수종속관계 (부분함수종속 제거)
    • 제3정규형

      • 주식별자가 아닌 모든 속성간에는 서로 종속되면 안 됨
        • ex) PK가 일련번호, 일반속성에 소속사코드, 소속사명 존재
          • 소속사명은 소속사코드에 종속 → 별도 엔터티 만들어서 소속사명, 소속사코드 관리
      • 이행함수종속 제거
    • 잘 쓰지 않는 정규화

  • 주의사항

    • 지나친 정규화는 성능에 좋지 않을 수 있음
      • 여러번의 JOIN을 하게 될 경우 조회 성능이 떨어짐
      • 이 경우 반정규화를 통해 성능 향상
    • 무분별한 인덱스 생성은 지향
      • 조회성능은 향상될지 모르나 입력, 수정, 삭제 성능이 저하
  • 일어날 수 있는 이상현상

    • 삽입이상 : (제 2 정규형) 주문번호, 상품코드 PK & 상품명 일반컬럼인 경우
      • 주문되지 않은 상품의 정보를 삽입할 수 없음
      • 삽입하려면 가짜 주문번호를 입력해야 함
    • 갱신이상 : 중복된 데이터 중 일부만 업데이트되어 데이터 불일치 발생
    • 삭제이상 : 데이터 삭제시 삭제되면 안되는 데이터까지 덩달아 삭제