[CS] 정규화

[1] 정규화(Normalization)

: Attribute 간의 종속성으로 인한 이상현상이 발생하는 릴레이션을 분해하여 재디자인함으로써 이상현상을 없애는 과정

: 데이터의 중복 방지, 무결성을 충족하기 위해 데이터베이스를 설계하는 방법

  • 정규화의 원칙
    • 정보의 무손식 : 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함해야 함
    • 최소 데이터 중복 : 이상 현상을 제거, 데이터 중복을 최소화
    • 분리의 원칙 : 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리해서 표현
  • 정규화의 장점
    • 각종 이상 현상들의 해결
    • 새로운 속성의 추가로 인해 DB 구조를 확장하는 경우, 구조의 변경을 최소화할 수 있음
    • 정규화된 릴레이션 간의 관계가 현실 세계에서의 개념들 간의 관계를 잘 보여줌

[2] 반정규화(De-normalization) : 시스템의 성능 향상을 위해 정규화된 데이터 모델을 통합하는 작업으로, 의도적으로 정규화 원칙을 위배하는 행위

  • 테이블 통합/분할/추가, 중복 속성 추가 등을 통해 반정규화를 할 수 있음
  • 테이블이 단순해지고 관리 효율성이 증가하지만, 데이터의 일관성이나 무결성이 보장되지 않을 수 있음
  • 반정규화의 대상이 되는 경우
    • 수행 속도가 많이 느린 경우
    • 테이블의 JOIN연산을 지나치게 사용하여 데이터를 조회하는 것이 기술적으로 어려운 경우
    • 테이블에 많은 데이터가 있고, 다량의 범위 혹은 특정 범위를 자주 처리해야 하는 경우

[3] 함수 종속성 : 어떤 테이블의 속성 A와 B에 대하면, A값에 의해 B값이 유일하게 정해지는 관계를 말함

: “B는 A에 함수 종속이다” 라고 한다면 A→B의 기호로 나타냄

: 이때 A를 결정자(Determinant)라고 하고, B를 종속자(Dependant)라고 함

  • 완전 함수 종속 : 기본키를 구성하는 모든 속성에 종속되는 경우
  • 부분 함수 종속 : 기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우
  • 이행적 함수 종속 : A, B, C 세 속성이 있고, A→B, B→C 종속 관계가 있을 때, A→C가 성립하는 경우

[4] 정규형 : 정규화된 결과를 말함

  • 제 1 정규형 (1NF) : 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 함
    • 원자값 : 더 이상 쪼개질 수 없는 단위

→ 학번이 100인 학생의 과목 번호와 성적이 2개로 이뤄져 있기 때문에 제 1 정규형을 만족하지 못함
  • 제 2 정규형(2NF) : 제 1정규형이면서, 기본키(Primary Key)에 속하지 않은 속성 모두가 기본키에 완전함수 종속인 정규형

→ 위 그림처럼 각 속성들이 모두 완전 함수 종속이 되도록 릴레이션을 분리시켜줌
  • 제 3 정규형(3NF) : 제 2정규형이면서, 이행적 함수 종속성을 제거한 정규형
    • 즉, 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때 제 3정규형이라고 함

  • BCNF (Boyce and Codd Normal Form) : 제 3정규형을 더 강화시킨 개념
    • 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해해줌

<실무적으로 제 4, 제5 정규형은 잘 쓰이지 않는다고 함>

  • 제 4 정규형(4NF) : BCNF를 만족하면서 다치 종속이 없어야 함
  • 제 5 정규형(5NF) : 제 4정규형을 만족하면서 후보키를 통ㅇ하지 않는 조인 종속을 제거해야 함

참고자료

https://rebro.kr/160

https://code-lab1.tistory.com/270

'CS > Database' 카테고리의 다른 글

[CS] Redis  (1) 2023.11.01
[CS] 트랜잭션의 격리 수준 (Transaction Isolation Level)  (1) 2023.11.01
[CS] 트랜잭션 (Transaction)  (0) 2023.11.01
[CS] 이상, 인덱스  (1) 2023.10.23
[CS] Key, Join, NoSQL  (2) 2023.10.23