Home [데이터베이스 시스템] 8강 - 정규화
Post
Cancel

[데이터베이스 시스템] 8강 - 정규화

💡해당 게시글은 방송통신대학교 정재화 교수님의 '데이터베이스 시스템' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • 동일한 역할을 할 수 있는 릴레이션 스키마라도 속성들을 어떻게 구성하는 지에 따라 데이터베이스의 효율성이 크게 달라짐
  • 정규화는 데이터 모델링의 결과로 생성된 릴레이션에서 저장된 데이터의 패턴을 참조하여 정규화하여 정보 중복으로 발생할 수 있는 문제점(삽입, 수정, 삭제 이상)을 방지하도록 스키마를 재구조화하는 중요한 개념임
  • 정규화를 위한 함수적 종속성, 클로저와 카노니컬 커버에 대하여 학습하고 정규형의 조건에 따라 정규화를 수행하는 방법에 대해 알아봄



주요 용어


  • 정규화
    • 이상 현상이 발생할 가능성을 차단하기 위해 원칙을 기반으로 효과적으로 스키마를 모델링하는데 이용되는 기법
  • 함수적 종속성
    • 특정 시점의 릴레이션 인스턴스에서 한 속성의 값이 다른 속성의 값을 결정하는 속성 간의 연관 관계
  • 클로저
    • 함수적 종속성 집합에서 추론 규칙을 사용하여 감춰진 함수적 종속성을 찾아낸 확장된 함수적 종속성 집합
  • 카노니컬 커버
    • 함수적 종속성 집합에서 의미적인 자명성과 중복성을 제거한 최소화된 함수적 종속성 집합
  • 정규형
    • 삽입, 수정, 삭제 등의 이상 발생을 방지하기 위해 릴레이션과 속성을 조건에 따라 재구성한 형식



강의록


좋은 릴레이션과 나쁜 릴레이션

나쁜 릴레이션의 예

고객번호고객명전화번호등급할인율
C1유관순010-9999-0001GOLD5%
C2손병희010-9999-0002VIP10%
C3지청천010-9999-0003VIP10%
C4안창호010-9999-0004GOLD5%
C5안중근010-9999-0005VIP10%
  • 등급에 따른 할인율이 여러 레코드에 중복 저장 됨

잘못된 데이터베이스 모델링의 문제점

  • 데이터의 중복
    • 일관성 유지의 어려움
      • 데이터를 수정할 때 관련된 모든 중복 데이터를 찾아 똑같이 수정해야 함
      • 누락 시 데이터 불일치 발생
    • 저장 공간 낭비
      • 불필요하게 같은 데이터가 여러 번 저장됨
  • 갱신 이상
    • 데이터 중복으로 인해 데이터 삽입, 삭제, 수정 시 원치 않는 문제가 발생하는 현상
    • 삽입 이상
      • 레코드 추가 시 불필요한 컬럼 값 없이는 추가하지 못하는 경우
        • 새 데이터를 삽입하려 할 때, 불필요한 다른 데이터 값이 없으면 삽입하지 못하는 경우
      • ex) 새로운 등급 ‘NEW’, 할인율 ‘3%’를 추가하고 싶지만, 해당 등급의 고객 정보(고객번호 등)가 없으면 추가할 수 없음
    • 삭제 이상
      • 삭제 시 의도하지 않았던 다른 데이터가 삭제되는 경우
        • 특정 레코드를 삭제할 때, 의도하지 않았던 다른 유용한 정보까지 함께 삭제되는 경우
      • ex) 등급이 ‘NEW’인 유일한 고객 ‘윤봉길’을 삭제하면, ‘NEW’ 등급의 할인율이 ‘3%’라는 정보까지 사라짐
    • 수정 이상
      • 일부 레코드 수정 시 데이터의 일관성이 훼손되는 경우
        • 특정 값을 수정할 때, 중복된 데이터 중 일부만 수정되어 데이터의 일관성이 훼손되는 경우
      • ex) ‘GOLD’ 등급의 할인율을 8%로 변경 시, ‘GOLD’ 등급 고객 레코드를 모두 찾아 수정해야 하며, 하나라도 누락하면 같은 ‘GOLD’ 등급인데 할인율이 다른 데이터 불일치 발생

갱신 이상 - 삽입 이상

  • ‘NEW’ 등급, 할인율 ‘3%’ 정보를 추가하고 싶지만, 해당 등급의 고객이 아직 없어 고객번호, 고객명, 전화번호 정보 없이는 삽입 불가

    고객번호고객명전화번호등급할인율
    C1유관순010-9999-0001GOLD5%
    C2손병희010-9999-0002VIP10%
    C3지청천010-9999-0003VIP10%
    C4안창호010-9999-0004GOLD5%
    C5안중근010-9999-0005VIP10%
    • 불필요한 정보

      고객번호고객명전화번호
      ??????????????
    • 추가하고자 하는 정보

      등급할인율
      NEW3%

갱신 이상 - 삭제 이상

  • ‘NEW’ 등급의 할인율이 ‘3%’라는 정보를 삭제하려고 하면 ‘C6 윤봉길’ 정보도 사라짐

    고객번호고객명전화번호등급할인율
    C1유관순010-9999-0001GOLD5%
    C2손병희010-9999-0002VIP10%
    C3지청천010-9999-0003VIP10%
    C4안창호010-9999-0004GOLD5%
    C5안중근010-9999-0005VIP10%
    C6윤봉길010-9999-0006NEW3%
    • 삭제 하면 안되는 정보

      고객번호고객명전화번호
      C6윤봉길010-9999-0006
    • 삭제하고자 하는 정보

      등급할인율
      NEW3%

갱신 이상 - 수정 이상

  • 특정 ‘VIP’ 등급 할인율을 10%에서 8%로 변경 시, 데이터 불일치 발생

    고객번호고객명전화번호등급할인율
    C1유관순010-9999-0001GOLD5%
    C2손병희010-9999-0002VIP10% → 8%
    C3지청천010-9999-0003VIP10% → 8%
    C4안창호010-9999-0004GOLD5%
    C5안중근010-9999-0005VIP10% → 10% (수정 실패)
    C6윤봉길010-9999-0006NEW3%
    • 할인율 컬럼 비일관성

좋은 릴레이션의 개념

  • 컴퓨터 프로그래머적 관점에서의 모델
    • 어떻게 데이터를 저장해야 하는가?
  • 릴레이션 스키마가 얼마나 효율적으로 실세계를 반영하고 있는지 평가
  • 고려 사항
    • 릴레이션 내의 컬럼 간의 관계 분석
    • 불필요한 데이터의 종속과 중복 제거
    • 새로운 컬럼들이 데이터베이스에 추가될 때, 기존 컬럼과의 관계 수정을 최소화

좋은 릴레이션

  • 나쁜 릴레이션 | 고객번호 | 고객명 | 전화번호 | 등급 | 할인율 | |—|—|—|—|—| | C1 | 유관순 | 010-9999-0001 | GOLD | 5% | | C2 | 손병희 | 010-9999-0002 | VIP | 10% | | C3 | 지청천 | 010-9999-0003 | VIP | 10% | | C4 | 안창호 | 010-9999-0004 | GOLD | 5% | | C5 | 안중근 | 010-9999-0005 | VIP | 10% | | C6 | 윤봉길 | 010-9999-0006 | NEW | 3% |

  • 좋은 릴레이션

    고객번호고객명전화번호등급(FK)
    C1유관순010-9999-0001GOLD
    C2손병희010-9999-0002VIP
    C3지청천010-9999-0003VIP
    C4안창호010-9999-0004GOLD
    C5안중근010-9999-0005VIP
    C6윤봉길010-9999-0006NEW
    등급(PK)할인율
    GOLD5%
    VIP10%
    NEW3%
  • 두 개의 릴레이션으로 분리

    • 데이터 중복 감소 (할인율 정보는 등급 테이블에 한 번만 저장)
    • 갱신 이상 문제 해결
      • 삽입: 새로운 등급을 등급 테이블에 바로 추가 가능
      • 삭제: ‘윤봉길’ 고객 삭제 시에도 ‘NEW’ 등급 정보는 등급 테이블에 유지됨
      • 수정: ‘GOLD’ 할인율 변경 시 등급 테이블의 한 행만 수정하면 됨

함수적 종속성의 이해

함수적 종속성 개념

  • FD(Functional Dependency)
  • 릴레이션 인스턴스를 분석하여 속성들 간의 연관 관계를 표현한 것
  • 릴레이션의 효율성을 향상시켜 좋은 릴레이션으로 변환하는데 이용되는 중요한 개념
  • 형식적 정의
    • 임의의 릴레이션 스키마 R의 인스턴스 r(R)에 포함되는 서로 다른 두 레코드 r1, r2가 컬럼 X와 Y에 대해, r1[X] = r2[X]일 때, r1[Y] =r2[Y]이면 함수적 종속성 X → Y가 성립함
      • X는 결정자(Determinant)
      • Y는 종속자(Dependent)

함수적 종속성의 판별

  • 서로 다른 두 개의 레코드에서 어떤 특정 컬럼 값이 같으면 다른 컬럼 값도 같아질 때 함수적으로 종속한다고 표현 함
    • X → Y
    • 모든 레코드를 대상으로 항상 만족할 때 어떤 컬럼 X 가 Y를 종속함
      • 같을 때만 같으면 됨
      • 다를 때에는 같아도 되고 달라도 됨
  • 서로 다른 두 레코드 값이 같으면 종속자 컬럼의 값도 같아야함
    • 결정자에 같은 값이 없다면 종속자 컬럼의 값은 상관 없음
  • 간단히 보이는 릴레이션 내부에도 많은 수의 함수적 종속성이 존재하기도 함

  • 등급 컬럼이 할인율 컬럼을 함수적으로 종속하는 릴레이션
    • {등급} - 결정자, {할인율} - 종속자
    고객번호고객명전화번호등급할인율
    C1유관순010-9999-0001GOLD5%
    C2손병희010-9999-0002VIP10%
    C3지청천010-9999-0003VIP10%
    C4안창호010-9999-0004GOLD5%
    C5안중근010-9999-0005VIP10%
    C6윤봉길010-9999-0006NEW3%
    • 등급이 같으면 할인율도 같음
      • 등급 컬럼이 할인율 컬럼을 함수적으로 종속함
      • {등급} → {할인율}
        • 복수 개의 컬럼을 암시하는 집합 기호
    • 함수적 종속성
      • 고객번호 → 고객명
      • 고객명 → 등급
      • {고객번호, 고객명} → 할인율
    • 최종 함수적 종속성
      • 고객번호 → {고객명, 등급, 할인율}
    • 고객번호의 값을 알면 고객명, 전화번호, 등급을 유일하게 결정할 수 있음
      • 고객번호 → 고객명
      • 고객번호 → 전화번호
      • 고객번호 → 등급
      • 고객번호 → {고객명, 전화번호, 등급} 으로 표현 가능

함수적 종속성의 확장

  • 함수적 종속성은 릴레이션의 효율성 여부에 중요한 판단 기준
    • 그러나 릴레이션의 인스턴스만으로 내재 된 모든 함수적 종속성을 찾아내기 어려움
  • 판별되지 않은 모든 함수적 종속성을 도출하기 위해 추론 규칙 등을 사용하여 함수적 종속성을 확장
  • 클로저(closure)

    image.png

    • 판별된 함수적 종속성 집합으로부터 유추할 수 있는 모든 함수적 종속성 집합

함수적 종속성 추론 규칙

  • 암스트롱 공리(Armstrong’s axiom)
    • 재귀성 규칙 : X⊇Y 이면, X→Y 이다.
      • 어떠한 컬럼의 도메인이 다른 컬럼의 도메인보다 더 큰 집합이라면 (포함 관계를 갖고 있다면) 포함 하고 있는 컬럼이 포함 된 컬럼을 종속함
    • 부가성 규칙 : X→Y 이면, XZ→YZ 이다.
      • 결정자와 종속자의 부가적으로 동일한 컬럼을 합쳤을 때 종속 관계가 유지됨
    • 이행성 규칙 : X→Y 이고, Y→Z 이면, X→Z 이다.
    • 분해 규칙 : X→YZ 이면, X→Y 이다.
      • X라는 컬럼이 Y, Z 두개 컬럼을 종속 하고 있는 경우 Y를 종속하고 Z도 종속함
    • 합집합 규칙 : X→Y 이고, X→Z 이면, X→YZ 이다.
    • 의사 이행성 규칙 : X→Y 이고, WY→Z 이면, WX→Z 이다.

카노니컬 커버

  • 함수적 종속성 추론 규칙으로 확장된 클로저에는 자명한 종속성과 중복된 종속성을 포함
    • 자명한 종속성
      • A → A 의미가 당연
    • 중복 된 종속성
      • X → AB, X → B 의미가 여러 번 존재
  • 불필요한 함수적 종속성을 제거한 표준형으로 변환 후 정규화를 수행
  • 표준형에 대한 집합 = 카노니컬 커버
  • 표준형 조건
    • F의 모든 함수적 종속성의 종속자의 속성은 반드시 1개
      • 표준형 O: A → B, C → D
      • 표준형 X: A → BC
    • F에서 X→A를 X의 진부분집합 Y에 대하여 Y→A로 교체했을 때, 그 집합이 F와 동등한 집합이 불가능
      • 가장 최소화 되어있는 지를 확인하는 조건
      • 표준형 O: AB → C 라는 함수적 종속성이 있을 때, A → C나 B → C가 F로부터 유도되지 않는 경우
      • 표준형 X: ABC → D 라는 함수적 종속성이 있는데, 사실 AB → D만으로도 F로부터 유도될 수 있는 경우
    • F에서 어떤 함수적 종속성을 제거했을 때, 그 집합이 F와 동등한 집합이 불가능
      • 표준형 X: A → B, B → C, A → C 라는 함수적 종속성 집합이 있을 때, A → C를 제거해도 나머지 {A → B, B → C}로부터 A → C를 유도할 수 있으므로 A → C는 불필요한 함수적 종속성
      • 의미 상 동등하다면 아직 표준형이 아님
      • 위 집합은 표준형에 해당하므로, 반드시 필요함
      • 어떤 종속성을 변경하거나 제외했을 때, 기존 종속성의 집합과 달라졌다는 의미 → 반드시 필요한, 포함시켜야 하는 종속성 집합

정규화 (Normalization)

정규화 개념

  • 이상 현상을 최소화하도록 특정 조건을 갖춘 릴레이션의 형식
  • 정규형의 분류

    image.png

    • 관계형 데이터베이스 설계 시, 데이터 중복을 최소화하고 정보의 일관성을 보장하며 갱신 이상 문제를 해결하기 위해 릴레이션을 분해하는 과정
    • 함수적 종속성 이론을 기반으로 하며, 릴레이션이 만족해야 하는 제약 조건(정규형)에 따라 단계적으로 진행 됨
    • 정규화된 릴레이션은 일반적으로 더 구조화되고 유연하며 유지 보수가 용이함

정규화의 목적

  • 정규화의 정의
    • 특정 정규형의 조건을 만족하도록 릴레이션과 속성을 재구성하는 과정
  • 정규화의 기능
    • 데이터베이스 내에 모든 릴레이션을 효율적으로 표현
    • 바람직하지 않은 삽입, 수정, 삭제 등의 이상 발생 방지
    • 보다 간단한 관계 연산에 기초하여 검색 알고리즘을 효과적으로 작성할 수 있도록 지원
    • 새로운 형태의 데이터가 삽입 될 때, 릴레이션 재구성의 필요성을 축소

제1 정규형(1NF)의 정의

  • 가장 조건이 단순한 정규형
  • 형식적 정의
    • 릴레이션 스키마에서 정의 된 모든 속성의 도메인이 원자 값을 갖는 상태
      • 각 속성 값은 더 이상 분해할 수 없는 단일 값이어야 함
  • 관계형 모델의 특성을 만족하는 경우, 자동 적용되는 정규형
    • 테이블의 각 칸에는 단 하나의 값만 있어야 하며, 반복되는 그룹이나 다중 값 속성이 없어야 함
  • ex) 한 컬럼에 여러 개의 전화번호가 쉼표로 구분되어 있거나, 주문 항목이 하나의 컬럼에 리스트 형태로 들어있는 경우 1NF 위반

제1 정규형을 위배한 릴레이션

  • 도크 릴레이션

    도크번호입항시간출항시간목적도크관리자담당도선사
    D109:00, 11:0010:15, 11:45선적김규식김순애
    D111:5012:45하역김규식김구
    D209:00, 12:0010:00, 12:45관광, 주유한용운이동휘
    D213:0015:00정비한용운윤봉길
    • 원자 값을 갖지 않는 속성

      입항시간출항시간목적
      09:00, 11:0010:15, 11:45 
      09:00, 12:0010:00, 12:45관광, 주유

예제 릴레이션에 대한 부연 설명

  • 선박이 항구에 정박하기 위해 정밀한 작업이 요구
    • 풍향과 풍속, 파도와 안개 상황 등을 고려
    • 단순히 수신호뿐만 아니라 소형 배들로 정박하려는 대형 배를 밀어 안전하게 위치 시키는 작업을 고려
  • 도선사
    • 배를 도크에 안전하게 접안 시키고 항로로 인도하는 일을 하는 사람
  • 도크
    • 선박의 건조, 수리, 계선, 하역 작업 등을 위해 축조된 설비 및 시설의 총칭

제1 정규형을 수행한 릴레이션

  • 도크 릴레이션

    도크번호입항시간출항시간목적도크관리자담당도선사
    D109:0010:15선적김규식김순애
    D111:0011:45선적김규식김순애
    D111:5012:45하역김규식김구
    D209:0010:00관광한용운이동휘
    D212:0012:45주유한용운이동휘
    D213:0015:00정비한용운윤봉길
    • 원자적 상태의 속성값으로만 구성 (제1정규형)

함수적 종속성 판별

  • 함수적 종속성의 형식적 정의
    • 임의의 릴레이션 스키마 R의 인스턴스 r(R)에 포함되는 서로 다른 두 레코드 r1, r2가 컬럼 X와 Y에 대해, r1[X] = r2[X]일 때, r1[Y] =r2[Y]이면 함수적 종속성 X → Y가 성립함
    도크번호입항시간출항시간목적도크관리자담당도선사
    D109:0010:15선적김규식김순애
    D111:0011:45선적김규식김순애
    D111:5012:45하역김규식김구
    D209:0010:00관광한용운이동휘
    D212:0012:45주유한용운이동휘
    D213:0015:00정비한용운윤봉길
    • 도크번호 → 도크관리자
      • 도크 번호가 같으면 도크관리자가 같음
    • 목적 → 도크번호
      • 목적이 같으면 도크번호가 같음
    • 목적 → 담당도선사
      • 목적이 같으면 담당도선자가 같음

함수적 종속성 다이어그램

  • FDD(Functional Dependency Diagram)
  • 릴레이션 내의 속성 간 종속 관계를 직관적이고 이해하기 쉽게 도식화한 표현 방식

    image.png

    • 직사각형
      • 속성 또는 속성 집합
    • 화살표
      • 함수적 종속성

도크 릴레이션의 함수적 종속성 다이어그램

image.png

제2 정규형(2NF)의 정의

  • 릴레이션이 제1정규형(1NF)을 만족하고 부분 집합이 특정 속성을 종속하고 있지 않은 상태
    • 부분 함수 종속이 존재하지 않아야 함
      • 부분 함수 종속은 기본 키가 복합 키로 구성된 경우에 발생할 수 있음
      • 키의 일부 속성에만 종속되는 속성이 있을 때 나타남
      • 부분 함수 종속이 있다면, 해당 종속 관계를 별도의 테이블로 분해함
    • 기본 키가 아닌 모든 속성은 기본 키 전체에 완전 함수 종속되어야 함
  • 형식적 정의
    • 주어진 릴레이션의 인스턴스가 기본 키가 아닌 속성(비주속성)이 기본 키(주속성)에 완전히 종속되어 있는 상태
  • X → Y에 대한 함수 종속 관계
    • 부분 함수 종속
      • Y가 X의 전체가 아닌 일부분에 종속
    • 완전 함수 종속
      • Y가 X의 전체에 종속

제2 정규형의 적용

  • 도크 번호 → 도크 관리자 부분 함수 종속

    image.png

    • 제1 정규형 만족
    • 제2 정규형 만족 X

릴레이션의 무손실 분해

  • 무손실 분해(lossless decomposition)
    • 정의
      • 스키마 R에 함수적 종속성 X → Y가 존재하고 X ⋂ Y = ∅이면, R을 R-Y와 XY로 분해
  • 도크 관리 릴레이션 무손실 분해
    • {도크번호} → {도크관리자}
    • {도크번호} ⋂ {도크관리자} = ∅
    • 도크관리 - {도크관리자}, {도크번호, 도크관리자}

제2 정규화의 적용

  • 도크관리 릴레이션

    도크번호입항시간</u>출항시간목적담당도선사
    D109:0010:15선적김순애
    D111:0011:45선적김순애
    D111:5012:45하역김구
    D209:0010:00관광이동휘
    D212:0012:45주유이동휘
    D213:0015:00정비윤봉길
  • 관리자 릴레이션

    도크번호도크관리자
    D1김규식
    D2한용운

제2 정규형의 FDD

image.png

image.png

  • 도크 릴레이션에서 도크관리자 제거
  • 도크번호, 도크관리자만 존재하는 또 다른 릴레이션 생성
    • 부분 함수 종속 사라짐

제3 정규형 (3NF)의 정의

  • 형식적 정의
    • 릴레이션이 제2 정규형(2NF)을 만족하고 기본 키가 아닌 속성들이 어떤 키에도 이행적으로 종속되지 않은 상태
      • 이행적 함수 종속은 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성을 결정하는 경우에 발생
        • A → B, B → C 일 때 A → C 관계
      • 이행적 함수 종속이 있다면, B → C 관계를 별도의 테이블로 분해함
  • 이행적 종속성
    • X → Y이고 Y → Z이면 X → Z이다.

제3 정규형의 적용

image.png

이행적 종속성을 포함한 릴레이션

  • 도크관리 릴레이션

    도크번호입항시간출항시간목적담당도선사
    D109:0010:15선적김순애
    D111:0011:45선적김순애
    D111:5012:45하역김구
    D209:0010:00관광이동휘
    D212:0012:45주유이동휘
    D213:0015:00정비윤봉길

제3 정규화의 적용

image.png

image.png

  • 도크관리 릴레이션

    도크번호입항시간출항시간목적담당도선사
    D109:0010:15선적김순애
    D111:0011:45선적김순애
    D111:5012:45하역김구
    D209:0010:00관광이동휘
    D212:0012:45주유이동휘
    D213:0015:00정비윤봉길
  • 입출항관리 릴레이션

    도크번호입항시간출항시간목적
    D109:0010:15선적
    D111:0011:45선적
    D111:5012:45하역
    D209:0010:00관광
    D212:0012:45주유
    D213:0015:00정비
  • 도선 릴레이션

    목적담당도선사
    선적김순애
    하역김구
    관광이동휘
    주유이동휘
    정비윤봉길

BC 정규형(BCNF)의 정의

  • 형식적 정의
    • 릴레이션이 제3 정규형을 만족하고 릴레이션에 성립하는 X → Y 형태의 모든 함수적 종속성에 대하여 X가 수퍼키인 상태
      • 릴레이션의 모든 결정자가 후보 키여야 함
      • 결정자이면서 후보 키가 아닌 속성이 있다면, 해당 함수 종속 관계를 기준으로 테이블을 분해함
  • 입출항 관리 릴레이션의 함수적 종속성
    • {도크번호, 입항시간} → {목적}
    • {도크번호, 입항시간} → {출항시간}
    • {목적} → {도크번호}

BC 정규화의 적용

image.png

image.png

  • 입출항관리 릴레이션

    도크번호입항시간출항시간목적
    D109:0010:15선적
    D111:0011:45선적
    D111:5012:45하역
    D209:0010:00관광
    D212:0012:45주유
    D213:0015:00정비
  • 도크스케줄 릴레이션

    목적입항시간출항시간
    선적09:0010:15
    선적11:0011:45
    하역11:5012:45
    관광09:0010:00
    주유12:0012:45
    정비13:0015:00
  • 도크 릴레이션

    목적도크번호
    선적D1
    하역D1
    관광D2
    주유D2
    정비D2
  • 결정자가 key인지 확인

정규화 결과

  • 도크 릴레이션

    도크번호입항시간출항시간목적도크관리자담당도선사
    D109:0010:15선적김규식김순애
    D111:0011:45선적김규식김순애
    D111:5012:45하역김규식김구
    D209:0010:00관광한용운이동휘
    D212:0012:45주유한용운이동휘
    D213:0015:00정비한용운윤봉길
  • 도크스케줄 릴레이션

    목적입항시간출항시간
    선적09:0010:15
    선적11:0011:45
    하역11:5012:45
    관광09:0010:00
    주유12:0012:45
    정비13:0015:00
  • 도크 릴레이션

    목적도크번호
    선적D1
    하역D1
    관광D2
    주유D2
    정비D2
  • 관리자 릴레이션

    도크번호도크관리자
    D1김규식
    D2한용운
  • 도선 릴레이션

    목적담당도선사
    선적김순애
    하역김구
    관광이동휘
    주유이동휘

역정규화의 개념

  • 정규화
    • 릴레이션 분할을 통해 데이터의 중복성을 최소화하는 과정
    • 사용 과정에서 많은 조인 연산을 유발
      • 지나친 정규화는 검색의 성능이 저하될 수 도 있음
  • 역정규화
    • 정규화의 반대 과정
    • 정규화를 통해 분리되었던 릴레이션을 통합하는 재조정을 수행하고 정보의 부분적 중복을 허용하는 기법
    • 데이터 접근 성능 개선 목적
      • 검색의 결과는 빨리 나올 수 있게
  • 정규화를 진행하되 검색에 영향을 끼치는 부분은 역정규화를 수행
  • 정규화 되지 않은 스키마역정규화 스키마는 구별
    • 해당 두 가지는 다른 개념



연습 문제


  1. 다음 중 정규화에 대한 설명으로 올바르지 않은 것은?

    a. 릴레이션 간 공통 부분을 도출하고 유사 릴레이션을 통합함

    • 정규화는 컬럼 간의 연관 관계를 이용하여 릴레이션의 비효율성을 제거 함
    • 특히 릴레이션 내부에 존재하는 데이터의 중복을 최소화하여 삽입, 갱신, 삭제 이상 현상을 제거하고, 이를 통해 새로운 데이터가 삽입될 때 릴레이션을 재구성해야하는 가능성을 최소화 시킴
    • 정규화에 대한 올바른 설명
      • 데이터가 삽입될 때 릴레이션 재구성의 필요성을 줄임
      • 데이터의 중복을 제거하여 릴레이션의 효율성을 향상 시킴
      • 삽입, 갱신, 삭제 이상(anomaly) 현상을 제거함
  2. 릴레이션 내의 컬럼 간의 종속 관계를 직관적이고 이해하기 쉽게 직사각형과 화살표로 도식화한 표현 방식을 무엇이라고 하는가?

    a. 함수적 종속성 다이어그램

    • 컬럼 간의 종속 관계를 컬럼의 이름만으로 나열할 경우 관계가 전체적으로 파악하기가 어렵기 때문에 모양이 간단한 도형을 사용할 경우 종속 관계를 파악하기 쉬워짐
    • 종속 관계를 직사각형과 화살표로 표현한 그림을 함수적 종속성 다이어그램이라고 함
  3. 다음 중 사업자 릴레이션에 포함된 함수적 종속성이라고 할 수 없는 것은?

    • 사업자 릴레이션

      사업자번호공사구분건축물층수사업자
      11B1빌라3층김영수
      11C1단독2층김영수
      11D1다세대4층김영수
      24A1아파트15층이민철
      24B2빌라3층이민철
      31D2다세대4층최용수

    a. 사업자번호 → 공사구분

    • 사업자번호 → 공사구분 종속성에 대해 첫 번째와 두 번째 레코드를 살펴볼 때, 사업자번호의 컬럼값은 ‘11’과 ‘11’로 같지만 공사구분의 컬럼값은 ‘B1’, ‘C1’으로 같지 않음
    • 따라서 함수적 종속성 정의에 위배되므로 사업자번호 → 공사구분 종속성은 성립하지 않음
    • 사업자 릴레이션에 포함 된 함수적 종속성
      • 건축물 → 층수
      • 사업자번호, 공사구분 → 건축물
      • 사업자 → 사업자번호



정리 하기


  • 데이터베이스 모델링 과정에서 효율성을 위해 어떤 속성들을 그룹화하여 테이블로 작성할 것인지 고려할 필요가 있으며 전체적인 테이블 구조는 데이터베이스의 정확성을 판단하는 데 중요한 기준이 됨
  • 정규화는 데이터의 중복을 제거하고, 새로운 속성들이 데이터베이스에 추가될 때 기존 속성과의 관계에서 수정을 최소화해야 한다는 것이 목적임
    • 정규화 과정을 통해 데이터 저장을 위한 공간의 낭비를 최소화 할 수 있음
  • 정규화 이전에 데이터베이스 조작에서 발생하는 삽입, 삭제, 수정 등의 갱신 이상 현상을 정규화를 통해 방지할 수 있음
  • 속성들 간의 연관 관계를 표현한 함수적 종속성은 릴레이션의 효율성 여부에 중요한 판단 기준이 되지만, 릴레이션의 인스턴스만으로 잠재 된 모든 함수적 종속성을 찾아내기 어렵기 때문에 이를 확장하기 위해 암스트롱 공리를 적용하여 클로저로 확장함
  • 도출된 클로저에는 자명한 함수적 종속성이나 중복된 함수적 종속성을 포함하고 있으므로 이러한 불필요한 종속성을 제거한 카노니컬 커버를 사용하여 정규화를 진행함
  • 함수적 종속성은 릴레이션 스키마의 속성들 사이에 명시되는 기본적인 제약 조건임
    • 함수적 종속성에 의한 방법과 추론하는 방법을 바탕으로 기본적인 정규형을 구성할 수 있음
  • 정규형의 만족 시켜야 하는 제약 조건에 따라 제1 정규형, 제2 정규형, 제3 정규형, BC 정규형, 제4 정규형, 제5 정규형 순서로 진행됨
    • 정규형의 조건은 정규화가 진행될수록 강화 됨



체크 포인트


  1. 제 3정규형(3NF)에서 BCNF(Boyce-Codd Normal Form)가 되기 위한 조건은?

    a. 결정자가 후보키가 아닌 함수 종속 제거

    • 이행적 함수 종속 제거 - 제3 정규형 만족
    • 원자 값이 아닌 도메인 분해 - 제1 정규형 만족
    • 결정자가 후보키가 아닌 함수 종속 제거 - BC 정규형 만족
    • 부분 함수 종속 제거 - 제2 정규형 만족
  2. 다음에서 설명하는 모든 조건을 만족하는 릴레이션 R의 정규형은?

    • 릴레이션 R의 함수 종속 관계에서 기본 키가 아닌 모든 속성들이 기본키에 이행적 함수 종속이 아니다.
      • 제3 정규형 조건 만족
    • 릴레이션 R에 속한 모든 속성의 도메인이 원잣 값만으로 되어 있으며, 기본 키가 아닌 모든 속성이 기본 키에 완전 함수 종속이다.
      • 제1 정규형 , 제2 정규형 만족
    • 릴레이션 R의 함수 종속 관계에서 결정자(determinant) 중에 후보 키가 아닌 것이 포함되어 있을 수 있다.
      • BC 정규형 만족시키지 않음

    a. 제3 정규형

[데이터베이스 시스템] 7강 - SQL

[파이썬 프로그래밍 기초] 8강 - 체크 포인트