ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규화란?
    프로그래밍 기초 공부 2023. 1. 3. 23:38

    이상현상

    • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
      • 삽입이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야하는 문제
      • 갱신이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
      • 삭제이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

     

    정규화

    함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해,
    이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어 가는 과정

     

    주의사항

    • 정규화를 통해 릴레이션은 무손실 분해 되어야 함
    • 릴레이션이 의미상 동등한 릴레이션으로 분해되고, 정보 손실이 발생하지 않아야 함
    • 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원 가능해야 함

    기본 목표 : 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현

    규칙 : 분해한 한 릴레이션은 다른 릴레이션을 외래키로 참조해야 함

     
    함수적 종속성(FD)
    속성들 간의 관련성
    • “X가 Y를 함수적으로 결정한다” = “Y가 X에 함수적으로 종속되어 있다”
    • 릴레이션 내의 모든 투플에서 하나의 X값에 대한 Y값이 항상 하나
    • X,Y는 하난의 릴레이션을 구성하는 속성들의 부분 집합
    • X -> Y (X : 결정자, Y : 종속자)

     

    함수 종속 관계 판단 시 유의 사항

    • 속성 자체의 특성과 의미를 기반으로 함수적 종속성 판단해야 함
    • 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정
    • 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 결정자가 될 수 있음

     

    완전 함수 종속

    1. 릴레이션에서 속성 집합 Y가 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음
    2. 일반적으로 함수 종속은 완전 함수 종속을 의미

     

    부분 함수 종속

    1. 릴레이션에서 속성 집합 Y가 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨
      • 결정자와 종속자가 같거나,
      • 결정자가 종속자를 포함하는 것처럼 당연한 관계는 고려X

     

    정규형

    • 릴레이션이 정규화된 정도
    • 각 정규형마다 제약조건 존재
    • 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
    • 릴레이션의 특성을 고려해서 적합한 정규형을 선택

    제1정규형

    릴레이션의 모든 속성이 더는 분해되지 않는 원자 값만 가지면 제1정규형 만족
    1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음

     

    2정규형

    릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속
    제1정규형에 속하는 릴레이션이 제2정규형을 만족하게 하려면?
    -> 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해

     

    3정규형

    릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않을 때
    제2정규형에 속하는 릴레이션이 제3정규형을 만족하게 하려면?
    -> 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 분해
     

     

    보이스/코드 정규형

    필요성

    • 제3정규형까지 모두 만족해도 이상 형상이 발생할 수 있음

    의미

    • 강한 제3정규형, 모든 결정자가 후보키여야함
    이상 현상을 해결하기 위해 제3정규형보다 좀 더 엄격한 제약조건
    보이스/코드 정규형에 속하는 모든 릴레이션은 제3정규형에 속함
    제3정규형에 속하는 모든 릴레이션이 보이스/코드 정규형은 아님
     
     

    4정규형

    릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치종속을 제거함

     

    5정규형

    릴레이션이 제4정규형을 만족하면서, 후보키를 통하지 않는 조인 종속성을 제거

     

    정규화 시 주의 사항

    모든 릴레이션이 제5정규형에 속해야만 바람직한 것은 아님
    일반적으로 제3정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해,
    데이터 중복을 줄이고 이상 현상을 해결하는 경우가 대다수
     
     

    '프로그래밍 기초 공부' 카테고리의 다른 글

    그래프와 트리  (0) 2023.01.10
    slf4j란?  (0) 2023.01.10
    JUnit이란?  (0) 2023.01.03
    트랜잭션이란?  (0) 2022.12.31
    Redis란?  (1) 2022.12.31
Designed by Tistory.