ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DataBase] 정규화, 반정규화
    CS/DataBase 2024. 11. 25. 02:24

    이상현상 Anomaly

    불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 할 때 발생할 수 있는 부작용

    정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상이다.

    삽입이상 Insertion Anomaly

    데이터를 삽입할 때 원하지 않는 정보에 의해 삽입할 수 없게되는 현상

    삭제이상 Deletion Anomaly

    데이터를 삭제할 때 원하지 않는 정보까지 삭제되는 현상

    갱신이상 Modification Anomaly

    데이터를 갱신할 때 일부 정보만 갱신되어 정보의 불일치성이 일어나는 현상

     

    함수적 종속?

    데이터베이스의 릴레이션(relation)에서 두 개의 애트리뷰트(attribute) 집합 간 제약의 일종

    완전 함수 종속

    pk가 고객 id와 상품 id일 때, 수량은 고객과 상품에 따라 정해진다.

    결정자 = pk 일 때 완전 함수 종속이라고 한다.

    부분 함수 종속

    pk중 상품 id가 주문 상품을 결정한다.

    즉, 결정자가 pk의 부분집합이다. 이런 상황을 부분 함수 종속이라고 한다.

    이행 함수적 종속

    고객id, 상품 id → 수량

    고객id, 상품 id ,수량 → 가격

    ⇒ 고객id, 상품 id → 수량 → 가격

    이처럼 X가 Y를 결정짓고, Y가 Z를 결정짓는 상황을 이행적으로 종속돼있다고 한다.

     

    정규화란?

    데이터베이스 내의 데이터 구조를 조직화하고 최적화하는 과정

     

    정규화 과정

    1NF : 도메인을 원자화

    학번 수강 과목
    12345678 데이터베이스, 네트워크, 알고리즘

                                                      ⬇️

    학번 수강 과목
    12345678 데이터베이스
    12345678 네트워크
    12345678 알고리즘

     

    2NF : 부분 함수 종속 제거

    학번 수강 과목 교수 성적
    12345678 데이터베이스 김철수 3.5
    23456789 데이터베이스 김철수 4.0
    34567890 네트워크 김영희 3.8

                                                      ⬇️

    학번 수강 과목 성적
    12345678 데이터베이스 3.5
    23456789 데이터베이스 4.0
    34567890 네트워크 3.8
    수강 과목 교수
    데이터베이스 김철수
    네트워크 김영희

     

    3NF : 이행 함수적 종속 제거 

    학번 수강 과목 수강료
    12345678 데이터베이스 100000

                                                      ⬇️

    학번 수강과목
    12345678 데이터베이스
    과목 수강료
    데이터베이스 100000

     

    BCNF : 결정자이면서 후보키 아닌 것 제거

    학번 특강 이름 교수
    12345678 데이터베이스 김철수

    학번, 특강 이름 -> 교수

    교수 -> 특강 이름

                                                      ⬇️

    학번 특강 이름
    12345678 데이터베이스

     

    교수 특강 이름
    김철수 데이터베이스

     

    반정규화란?

    성능향상과 운영의 편의성을 위해 데이터 모델을 일부러 통합, 중복, 분리시켜 정규화 원칙을 위배하는 행위

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

    트랜잭션 격리 수준  (0) 2025.02.23
    SQL의 윈도우 함수 (with PARTITION BY)  (2) 2025.02.17
    CTE(Common Table Expression)  (2) 2025.02.17
    [DataBase] 트랜젝션  (2) 2024.12.02
    [Database] Index에 대해서  (1) 2024.11.18
Designed by Tistory.