DB

RDB 정규화와 예시

옴악핫세 2023. 6. 15. 07:26

정규화 (Normalization)란?

데이터 중복과 insertion, update, deletion anomaly를 최소화하기 위해 일련의 normal forms(NF)에 따라 relation DB 를 구성하는 과정

 

 

 

단어

결정자

- 후보키 : 기본키들이 될 수 있는 속성들, 어느 한 attribute라도 제거하면 unique하게 tuples를 식별할 수 없는 super key

- 기본키 : RDB에서 각 행을 고유하게 식별할 수 있는 역할을 하는 속성 또는 속성 집합.
유일한 값(Null 제외)을 가진 컬럼 (Id, 사번 등...)

- 슈퍼키 : table에서 tuple들을 unique하게 식별할 수 있는 attributes set

- 외래키 : 다른 테이블의 기본키와 연결해주는 컬럼. 이 외래키를 통해 다른 테이블과의 관계를 형성하고 데이터의 무결성을 유지할 수 있음

 

 

 

슈퍼키 :  table에서 tuple들을 unique하게 식별할 수 있는 attributes set , 키들을 모두 포함하고 있는 개념

후보키 : account_id, {bank_name, account_num}

기본키 : account_id

prime attribute : 임의의 key에 속하는 attribute = account_id, bank_name, account_num

non-prime attribute : 어떠한 key에도 속하지 않는 attribute = class, ratio, emple_id, empl_name, card_id

원본 테이블

먼저 테이블의 key와 FD 관계를 정리해야함

- functional dependency

 

정규화

- 1정규화 : attribute의 value는 반드시 나눠질 수 없는 단일한 값이어야함

후보키 :  {account_id, card_id}, {bank_name, account_num, card_id}

 

- 2정규화 : 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업

partial dependency를 제거한 테이블

장점 : 중복 데이터가 제거됨

단점 : 분리한 테이블로 인해 한 테이블에서 모든 정보를 알수없음

- 3정규화 : 일반 컬럼에만 종속된 컬럼은 다른 테이블로 빼기

transitive FD를 제거, 즉 모든 non-prime attribute는 어떤 key에도 transitively dependent 하면 안됨

※ transitive FD : X->Y & Y->Z 일 때, X->Z인 관계

empl_id와 empl_name에 중복 데이터가 존재

 

 

transitive FD 관계는 O 표시 한 부분
3NF 결과
2NF 때 나눈 테이블까지 합친 최종 결과

- BCNF : 모든 유효한 non-trivial FD X->Y는 X가 superkey여야 함

※ non-trivial FD : X->Y FD가 있을 때, Y가 X의 부분집합이 아니면 X->Y는 non trivial FD 관계임

은행 별 계좌 등급은 서로 겹치지 않으니, class에 의해 bank_name이 결정됨. 여기서 X는 class, Y는 bank_name이여서 non trivial FD 관계임. But X는 super key가 아님

그래서 테이블을 나눠야함

BCNF 결과

 

 

 

비정규화

DB를 설계할 때, 과도한 조인과 중복 데이터 최소화 사이에서 적정 수준을 잘 선택할 필요가 있음

 

 

 

 

 

 

 

중의적인 표현임

→ unknown, unavailable, withheld, not applicable

 

 

  • 엔티티 연관관계 및 fetch 전략을 통해 null값 제어 (중요도 낮음)
    • null 단점
      • null은 중의적인 표현임 → unknown, unavailable, withheld, not applicable