02.21 [DB] 정규화 / 역정규화

KDH59·2024년 2월 22일

[DB]

목록 보기
1/5

정규화

  • RDBMS 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스
  • 자료 중복으로 인해 이상 현상이 발생 할 수 있어 이를 최소화하는 것이 정규화의 목적
  • 중복되는 ID 를 가진 컬럼이 여기저기 있는데 삭제.삽입.갱신시 ... 이상현상이라고 부른다.

정규화의 과정

  • 총 여섯 과정이 있다.

  • 그 중 실제로는 3NF까지만 사용한다.

    1NF ( 1.정규화 )

  • 모든 항목에 값이 있어야 하며(not null), 중복열이 없어야 한다.
    ※ 데이터 값이 없거나 한개 이상이거나 여러개일경우가 있으니 테이블을 어떻게 쪼갤것인가
    ※ 식별관계 막 쓰지 말라 -> 없을수도 있고 딱 하나일 때
    -> 대응 가능?

    2NF ( 2.정규화 )

  • 개체의 속성이 한 식별자에 종속 되어야 한다.

  • 하나의 식별 자로 하나의 데이터가 가져와 지는가?

    단일 키로 테이블을 어떻게 쪼갤 수 있을지

  1. 기본키로 무얼잡고 / 기본키가 중복 발생하지 않게 테이블을 쪼갤 것인가 ※ 움직여야 하는 테이블과 움직이면 안되는 테이블을 잘 파악
    ※ 꼭 복합키를 사용해야되나?

    3NF (3. 정규화 )

  • 고객 번호, 이름, 등급만 바꾸었을떄 할인율은 건들지 않을 수 있도록 쪼개라

    하지만

  • 지나친 정규화는 쿼리를 복잡하게 만들고 성능을 저하 시킨다. (6개의 테이블을 join 한다면?)

  • 그래서 테이블을 합하는 작업을 역정규화라고 한다

    역정규화

  • 역정규화 하면 개막장까지 간거다

    ※ PK를 잡는 이유 -> 하나만 콬 찝어서 무언가를 해야할때 인덱스 걸려있어 삽입,수정,갱신이 없어야됨

    ※ 일반 회원과 판매자 회원(판매한 물품들과 매출을 계산)의 테이블을 나눌것인가?
    카테고리 대분류 중분류 소분류 어떻게 나눌 것인가

profile
[JAVA]

0개의 댓글