티스토리 뷰

CS/DB

이상현상, 함수종속성, 정규화

bool-flower 2022. 7. 28. 14:45

이상현상(anormaly)


테이블 내의 데이터들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 비합리적 현상이다.

이상현상

  • 삽입 이상 (Insersion Anomaly) : 데이터를 삽입 시 불필요한 세부 정보를 입력해야 하는 현상 (null 값을 넣는 등)
  • 삭제 이상 (Deletion Anomaly) : 데이터 삭제 시 원치 않는 다른 정보가 같이 삭제되는 현상
  • 갱신 이상 (Update Anomaly) : 데이터를 갱신 시 특정 부분만 수정되어 중복된 값이 모순을 일으키는 현상

함수 종속성(FD, Functional Dependency)


어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 관계를 함수 종속성이라고 한다.

 

  • A->B로 표기하며 A를 B의 결정자(Determinant)라고 한다.
  • A->B이면 A는 B를 결정한다(Determine) 한다고 하고, B는 A에 종속한다(Dependent)라고 한다.

함수 종속성의 유형

  • 완전 함수 종속(Full Functional Dependency) : 기본키를 구성하는 모든 속성에 종속되는 경우
  • 부분 함수 종속(Partial Functional Dependency) : 기본키를 구성하는 속성 중 일부에게 종속된 경우
  • 이행 함수 종속(Transitive Functional Dependecy) : X -> Y, Y -> Z 일 때 A -> Z가 성립하는 경우

정규화(Normalization)


정규화이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 정규화된 정도는 정규형(NF, Normal Form)으로 표현한다. 제1 정규형, 제2 정규형, 제3 정규형, 보이스/코드 정규형, 제4 정규형, 제5 정규형이 있다. 이 글에서는 보이스/코드 정규형까지만 정리한다.

정규화의 장점

  • 데이터 중복을 배제하여 이상(Anomaly) 현상 제거
  • 종속성 삭제로 데이터의 일관성 및 무결성을 유지한다.
  • 저장공간의 최소화
  • 데이터 삽입 시 릴레이션을 재구성할 필요성 감소

정규화의 단점

  • 릴레이션 간의 JOIN 연산 증가로 인한 질의응답 시간 저하

정규화 원칙

  • 정보의 무손실 - 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있으면 안 됨
  • 분리의 원칙 - 독립적인 관계는 별개의 릴레이션으로 표현
  • 데이터의 중복을 최소화해야 함

정규형 (NF, Normal Form)


제1 정규형

모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 한다.  릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있으면 안 된다.

제2 정규형

릴레이션이 제1 정규형이면서 부분 함수 종속성을 제거한 형태를 말한다. 

제3 정규형

제2 정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD)을 제거한 형태를 말한다.

보이스/코드 정규형

    제3 정규형이고, 결정자가 후보 키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보 키인 상태를 말한다.

     

    참조


    https://chokyuhwan.tistory.com/27

    https://velog.io/@harinnnnn/SQL-%EC%A0%95%EA%B7%9C%ED%99%94

    https://yssa.tistory.com/entry/Database-%ED%95%A8%EC%88%98-%EC%A2%85%EC%86%8D%EC%84%B1Functional-Dependency%EA%B3%BC-%EC%A0%95%EA%B7%9C%ED%99%94Normalization

    https://devinus.tistory.com/26

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

    DB의 Lock  (0) 2022.10.08
    트랜잭션 (Transaction)  (0) 2022.10.08
    MySQL 아키텍처  (0) 2022.08.04
    조인 수행 원리  (0) 2022.08.02
    RDB vs NoSql  (0) 2022.07.16
    댓글
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday