[DB기초] 정규형

코택·2020년 12월 8일
0

20-2) 데이터베이스

목록 보기
3/3
post-custom-banner

릴레이션 스키마의 설계

  1. 애트리뷰트, 엔티티, 관계성을 파악
  2. 관련된 애트리뷰트들을 릴레이션으로 묶음
  • 고려사항
    1) 애트리뷰트들간의 관계성(relationship): 데이터 종속성
    -> 연관있는 애트리뷰트들끼리 하나의 릴레이션에 들어가야 한다!
    2) 효율적인 데이터 처리
    3) 데이터의 일관성
  1. 변칙적 성질의 예방
  • 데이터 변경 시의 이상현상 (삽입·삭제·변경을 할 수 없는 상황)

스키마 설계와 변환

  1. 스키마 설계: 데이터베이스의 논리적 설계
    1) 애트리뷰트들과 이들의 제약조건(종속성)들을 수집
    2) 수집된 결과를 명시된 제약조건에 따라 바람직한 여러 개의 릴레이션으로 분할
    -> 스키마 변환
  2. 스키마 변환의 원리
    1) 정보 표현의 무손실: 분해된 릴레이션들을 자연 조인하면 원래의 릴레이션
    2) 최소의 데이터 중복: 갱신 이상에 대응하기 위해서
    3) 분리의 원칙: 독립된 관계성은 별도의 릴레이션으로 분리
    -> 하나의 종속성은 하나의 릴레이션으로 표현!

이상

이상: 데이터 변경 시 발생하는 문제

  1. 삭제 이상: 한 튜플을 삭제함으로써 유지해야 될 정보까지도 삭제되는 연쇄 삭제 현상이 일어나게 되어 정보 손실이 발생하는 현상
  2. 삽입 이상: 어떤 데이터를 삽입하려고 할 때 불필요하고 원하지 않는 데이터도 강제로 삽입해야 하는 현상
  3. 갱신 이상: 중복 데이터의 일부 갱신으로 정보의 모순성(inconsistency)이 발생

이상의 원인과 해결책

  • 이상의 원인: 하나의 개체에 속한 애트리뷰트들 간에 존재하는 여러 개의 종속관계를 하나의 릴레이션으로 표현하기 때문
  • 이상의 해결책: 애트리뷰틀 간의 여러 종속 관계를 분해하여 각각 하나의 릴레이션으로 표현
    - 하나의 종속성은 하나의 릴레이션으로 표현
    -> 정규화 과정
    ⇒ 이상현상을 해결해가는 과정이 좋은 DB 스키마를 설계하는 과정이다!

함수 종속(FD: functional dependency)의 정의

  • 애트리뷰트 X의 값이 결정되면 애트리뷰트 Y의 값이 딱 하나만 결정(이때 애트리뷰트 X, Y는 릴레이션 R의 부분집합)
    -> 애트리뷰트 Y는 애트리뷰트 X에 함수종속(X → Y)
  • 애트리뷰트 X는 Y를 (함수적으로) 결정
    - X를 결정자(determinant)
    - Y를 종속자(dependent)
  • X나 Y는 각각 두 개 이상의 애트리뷰트 집합이 될 수 있음: X와 Y는 릴레이션 R의 부분집합
  • 완전 함수 종속: 결정자의 부분집합만으로는 함수종속이 성립하지 않는 것
  • 부분 함수 종속: 결정자의 부분집합만으로도 함수종속이 성립하는 것

정규형 (normal form)

  1. 정의
  • 어떤 일련의 제약조건을 만족하는 릴레이션
  • 정규화, 즉 스키마 변환으로 정규형을 만듦
  1. 정규화의 원칙
  • 위에서 설명한 ①정보 표현의 무손실, ②최소의 데이터 중복, ③분리의 원칙

제1정규형 (1NF)

  1. 정의: 모든 도메인이 원자 값(atomic value)만으로 된 릴레이션
  2. 1NF 이상의 원인:
  • 기본 키로 식별되는 개체와 무관한 애트리뷰트 존재
  • 즉, 관계 없이 같은 릴레이션 내에 존재하는 애트리뷰트 때문에(부분 함수 종속)
  1. 1NF 이상의 해결:
  • 프로젝션으로 1NF 릴레이션을 분해 (부분 함수 종속을 제거) ⇒ 2NF

제2정규형 (2NF)

  1. 정의: 1NF이고, 키에 속하지 않는 애트리뷰트들은 모두 기본 키에 완전 함수 종속
  2. Heath의 무손실 분해 정리
  • R(A, B, C)에서 함수 종속 A->B가 성립하면 R1(A, B), R2(A, C)로 무손실 분해가 가능
  • 정보의 손실 없이 릴레이션을 분해
  1. 2NF 이상의 원인:
  • 분해된 R1(A, B)와 R2(A, C)에서 B->C가 성립
  • 즉, 이행적 함수 종속(TD, Transitive Dependency)이 문제!
  1. 2NF 이상의 해결:
  • 프로젝션으로 2NF 릴레이션을 분해 (이행적 함수 종속을 제거) ⇒ 3NF

제3정규형 (3NF)

  1. 정의: 2NF이고, 키가 아닌 모든 애트리뷰트들은 기본 키에 이행적 함수 종속이 되지 않음
  2. 특징
  • 키가 아닌 애트리뷰트 값의 갱신 시 불필요한 부작용(이상)은 발생하지 않음
  • 모든 이원 릴레이션(애트리뷰트가 2개)은 3NF에 속함
  • 3NF를 적용할 수 없는 경우(약점)
    1) 복수의 후보 키를 가지고 있고
    2) 후보 키들이 두 개 이상의 애트리뷰트들로 구성되고
    3) 후보 키들의 애트리뷰트가 서로 중첩되는 경우
    ⇒ 보다 일반적인 Boyce/Codd Normal Form(BCNF)가 필요
  1. 3NF 이상의 원인(위의 약점 하에서 발생):
  • 어떤 애트리뷰트A가 후보 키가 아님에도 제약조건(함수 종속)에 의해 다른 애트리뷰트B를 결정
  • 한 애트리뷰트가 결정자이지만 후 보키가 아님
  1. 3NF 이상의 해결
  • BCNF 정규형을 적용 ⇒ BCNF 정규형

보이스/코드 정규형 (BCNF)

  1. 정의
  • 릴레이션 R의 결정자가 모두 후보 키이면 릴레이션 R은 BCNF에 속한다.
  • 강한 제3정규형(strong 3NF)이라고도 함
  • 릴레이션 R이 BCNF에 속하면 R은 제1, 제2, 제3 정규형에 속함
  1. BCNF 이상의 원인
  • 한 애트리뷰트가 다른 애트리뷰트 값의 집합(set of values)를 결정
  • 즉, 릴레이션 내에 두 개의 독립된 애트리뷰트가 1:N 관계로 대응하는 관계가 있다(다치 종속)
  • 다치 종속 (MVD: Multivalued Dependency)
    1) 정의: 릴레이션 R의 애트리뷰트의 부분 집합 A, B, C가 애트리뷰트 쌍(A, C)값에 대응되는 B값의 집합이 A값에만 종속되고 C값에는 독립적이면 B는 A에 다치종속이라 하고 A↠B로 표기한다.
    2) Fagin: A↠B이면 A↠C도 성립, 즉 A↠B|C
    3) 모든 FD는 MVD이다.
  • 즉, A→B이면 A↠B가 성립
    4) MVD를 가진 릴레이션의 분해(Fagin의 정리)
  • R(A, B, C)에서 MVD A↠B|C를 만족하면 두 프로젝션 R1(A, B)와 R2(A, C)는 무손실 분해이다.
  1. BCNF 이상의 해결
  • 다치 종속을 제거 ⇒ 제4정규형

제4정규형 (4NF)

  1. 정의
  • 릴레이션이 R이 BCNF에 속하고 모든 MVD가 함수 종속(FD)이면 릴레이션 R은 4NF에 속한다.
    -> 다치종속이 존재하는 릴레이션을 독립된 하나의 릴레이션으로 분해한 것
  1. n-분해(n-decomposable) 릴레이션
  • n-way 순환 제약조건(n-way cyclick constraint)를 만족하는 릴레이션
    -> n개 이상의 릴레이션으로 분해해야만 정보 무손실 분해가 되는 릴레이션
  1. 조인 종속
    1) 의미: 릴레이션의 그의 어떤 프로젝션들을 조인한 결과와 똑같아야 한다는 제약조건
    -> 릴레이션 R이 그의 프로젝션 A, B, … ,Z의 조인과 동일하면 R은 JD(A, B, …, Z)를 만족
    2) 특징
    - 릴레이션 R(A, B, C)가 JD
    (AB, AC)를 만족하면 한 쌍의 MVD A↠B|C도 성립
  2. 4NF 이상의 원인
  • 조인 종속 때문에 삽입 이상 발생
  1. 4NF 이상의 해결
  • 어떠한 조인 종속도 없도록 분해하거나 조인 종속이 후보 키를 통하게 함 ⇒ 5NF

제5정규형 (5NF)

  • 릴레이션 R에 존재하는 모든 조인 종속(JD)이 R의 후보 키를 통해 성립되면, R은 5NF
  • 프로젝션-조인 정규형(PJ/NF, projection-join normal form)이라고도 함
  • 후보 키를 통해 성립된다는 말의 의미?
    - 릴레이션 내 조인 종속이 후보 키를 조인 애트리뷰트로 함
    - 즉, 이 조인 종속(JD)에 포함되는 애트리뷰트 부분 집합은 모두 R의 슈퍼키

참고

  • 이석호, 데이타 베이스 시스템(2009)
profile
블로그 이전했습니다 -> https://cotak.tistory.com/
post-custom-banner

0개의 댓글