정규화 (Nomalization)

  • 중복된 데이터를 분리하고, 데이터의 일관성과 무결성을 유지하는 과정
  • 데이터 저장 공간을 절약하고, 수정/삭제 이상현상(Anomaly)을 막는 것

    데이터베이스 이상현상

    이상현상 설명
    삽입 이상 정보 저장시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우
    삭제 이상 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우
    갱신 이상 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우

정규형 (Normal Form)의 종류

  • 행(row): 하나의 레코드(한 명, 하나의 상품 등)
  • 열(collumn): 데이터의 항목, 데이터의 속성(정보)을 나타낸다

    정규형 설명
    1NF (제1정규형) 하나의 필드(열)에는 반드시 하나의 값만 들어가야 한다.→ 다가속성/복합속성 제거
    2NF (제2정규형) 기본키에 완전 종속하지 않는 컬럼을 제거한다.→ 부분 종속 제거 (복합키 주의)
    3NF (제3정규형) 기본키가 아닌 컬럼끼리의 종속성도 제거한다.→ 이행적 종속 제거

실무는 3정규화정도까지만 알아도된다 (그외에는 DBA분들이 담담)
➔ 성능 이슈가 발생하면 반정규화를 적용하면 됨

1NF(1정규형)

  • 열(필드)마다 하나의 값만 저장
  • 다가속성이 있으면 안된다.(1칸에 여러 값 ❌)
  • 복합속성이 있으면 안된다.(똑같은 정보가 2행이상 존재)
  • 중복속성이 있으면 안된다. ➔ 테이블을 나눠야함

    학번 이름 전화번호
    1 kims 010-1234-5678, 02-123-4567
        한칸에 정보2개 ➔ 분리해야 함
  • 이렇게 나누다보면 중복되지 않는 키가 발생하는데 기본키라고한다
  • 코드를 묶어서 하나의 PK로 지정하는것을 복합키라고 한다

    ⭐️ Primary Key (기본키)

    • 테이블에서 각 행(Row)을 유일하게 식별할 수 있는 열(Column)
    • 중복 ❌, NULL ❌, 테이블에 반드시 하나만 존재

    ⭐️ 복합키 (Composite Key)

    • 2개 이상의 열(Column)을 묶어서 하나의 Primary Key로 사용하는 것
    • 하나의 컬럼만으로는 고유 식별이 안 될 때 사용 (묶어서 고유하게)
    • 묶은 조합은 중복 ❌

테이블내에 관련이 없는 정보들이 연결된 경우, 테이블을 분리하는것이 2NF와 3NF의 목적이다
(ex 유저정보와 유저의 상품목록이 함께있는경우)

2NF (2정규형)

  • 복합 기본키를 가진 테이블에서 일부 기본키에만 종속된 컬럼(부분 종속성)을 분리하는것
  • 저장에는 효율적이나 읽기는 느리다.
    (조회에 최적화된 테이블은 나중에 따로 만들면 된다.)

    주문번호 상품번호 상품명 수량
        상품명은 상품번호에만 종속 → 분리해서 상품 테이블 따로 만들어야한다  

3NF(3정규형)

  • 기본키에만 종속되어야 한다
  • 서로 관련없는 테이블을 나누자

    유저ID 주소 우편번호
        우편번호는 주소에 종속 → 주소 테이블 따로 만들기

반정규화(비정규화)

  • 너무 정규화에 치우치면 JOIN이 많아지고, 읽기 성능이 떨어진다
  • 떨어진 읽기 성능을 올리기위해 다시 테이블을 합치는 것

테이블 설계"목적에 따라 정규화와 반정규화를 균형 있게" 해야 한다.


정리

개념 요약
정규화 데이터 중복 제거, 무결성 보장
1NF 칼럼 하나에 값 하나
2NF 기본키 전체에 종속되게
3NF 기본키 아닌 컬럼끼리 종속성 제거
반정규화 읽기 성능을 위해 일부 중복 허용

카테고리:

업데이트:

댓글남기기