💽 DataBase

DB 정규화

정의

데이터 중복과 Insertion, Update, Deletion Anomaly를 최소화하기 위해 일련의 Normal Forms(NF)에 따라 Relational DB를 구성하는 과정

Normal Forms(NF)

정규화하기 위해 준수해야하는 몇 가지 Rules

정규화 과정

notion image
  • 처음부터 순차적으로 진행
  • NF을 만족하지 못하면, 만족하도록 테이블 구조를 조정
  • 앞 단계를 만족해야, 다음 단계로 진행할 수 있다.
notion image
  • FD와 Key만으로 정의되는 NF
  • 3NF까지 도달하면, 정규화 됐다고 말하기도 함
  • 실무에서는 3NF, BCNF까지 진행(많이 해도 4NF 정도까지만)

테이블 설명

notion image
  • 임직원의 월급 계좌를 관리하는 테이블
  • 월급 계좌는 국민 은행 or 우리 은행
  • 한 임직원이 하나 이상의 월급 계좌를 등록하고, 월급 비율(Ratio)를 조정할 수 있다.
  • 각 계좌마다 등급(Class)가 있다. (국민: STAR → PRESTIGE → LOYAL, 우리: BRONZE → SILVER → GOLD)
  • 한 계좌는 하나 이상의 현금 카드와 연동될 수 있다.

Key

  • Super Key: Table에서 Tuple들을 Unique하게 식별할 수 있는 Attributes Set
  • (Candidate) Key: 하나의 Attribute라도 제거하면 Unique하게 Tuple들을 식별할 수 없는 Super Key
    • {account_id}, {bank_name, account_name}
  • Primary Key: Table에서 Tuple들을 Unique하게 식별하려고 선택된 (Candidate) Key
    • {account_id}
  • Prime Attribute: 임의의 Key에 속하는 Attribute
    • account_id, bank_name, account_num
  • Non-Prime Attribute: 어떠한 Key에도 속하지 않는 Attribute
    • class, ratio, empl_id, empl_name, card_id

Functional Depedency

  • {account_id} → {bank_name, account_num, class, ratio, empl_id, empl_name, card_id}
notion image

정규화(Normalization)

notion image

1NF : Attribute의 Value는 반드시 나눠질 수 없는 단일한 값이어야 한다.

notion image
  • 하지만 중복 데이터 발생
  • Ratio 총합이 1이 넘음
  • Primary Key도 변경해야한다.
notion image
  • PK를 {account_id, card_id}로 변경하면
  • 모든 Non-Prime Attribute들이 중복된다.
    • → 모든 Non-Prime Attribute들이 {account_id, card_id}에 Partially Dependent 하다.

2NF : 모든 Non-Prime Attribute는 모든 Key에 Fully Functionally Dependent 해야 한다.

기본키가 아닌 모든 속성이 기본키에 완전 함수적 종속인 상태
notion image

3NF : 모든 Non-Prime Attribute는 어떤 Key에도 Transitively Dependent하면 안된다.

Non-Prime Attribute와 Non-Prime Attribute 사이에는 FD가 있으면 안된다.
notion image
notion image

Transitive FD

if X → Y & Y → Z면, X → Z는 Transitive FD Y, Z 둘 다 어느 키의 부분 집합이 아닐 때
notion image

3NF까지 되면 “정규화 됐다.” 라고 말할 수 있다.

BCNF : 모든 유효한 Non-Trivial FD X → Y는 X가 Super Key여야 한다.

notion image

Non-Trivial FD

X → Y일 때, Y는 X의 부분집합이 아닐 경우

역정규화(Denormalization)

과도한 JOIN과 중복 데이터 최소화 사이에서 적정 수준으로 조절

출처