[3] Database 데이터 종속성과 정규화

데이터 종속성과 정규화

01 정규화의 의미

정규화
  • 자료 저장 공간을 최소화하고 데이터베이스 내의 데이터가 불일치 되는 위험을 최소화
  • 갱신 이상이 생기지 않도록 하기 위해 불필요한 데이터가 중복 저장되지 않도록 방지
  • 잘못된 릴레이션 스키마를 보다 더 작은 속성의 세트로 나누어 갱신 이상이 발생하지 않는 바람직한 릴레이션 스키마로 만들어 가는 과정
  • 반복적인 자료를 제거하여 데이터의 중복을 감소시킴으로써 중복으로 인한 여러 가지 이상현상을 제거
데이터베이스 스키마가 잘못 설계된 경우
  1. 100번 학생이 전자계산기구조와 운영체제라는 두 과목을 신청하였기에 이 학생의 이름은 두 번 저장되는 문제점 발생

  2. 중복된 데이터의 저장으로 인해 저장 공간이 낭비된다는 문제점 이외에도 중복되어 저장된 데 이터 때문에 릴레이션의 수정, 삽입, 삭제와 같은 조작을 할 때 여러 가지 곤란한 이상(anomaly) 현상이 생김

목적
  • 어떤 관계라도 데이터베이스 내에서 표현이 가능하도록 만드는 것
  • 관계에서 바람직하지 않은 삽입, 삭제, 갱신 이상이 발생하지 않도록 하는 것
  • 새로운 형태의 데이터가 삽입될 때 관계를 재구성할 필요성을 줄이는 것
  • 보다 간단한 관계 연산에 기초하여 검색을 보다 효율적으로 하는 것

이상현상 (Anomaly)
  1. 수정 이상
    • 중복 데이터 중에서 일부만 갱신되어 정보의 모순이 발생하는 것
    • 중복 튜플 중 일부 튜플의 속성값만 변경시킴으로써 정보의 모순성이 발생하는 것
  1. 삽입 이상
    • 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능하기에 원하지 않는 정보를 강제로 삽입해야 하는 것
  1. 삭제 이상
    • 유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능한 것
    • 한 튜플이 삭제됨으로써 유지되어야 할 정보까지도 삭제되는 연쇄 삭제현상으로 정보 손실 발생\

02 함수종속

임의 튜플에서 X의 값이 Y의 값을 함수적으로 결정한다면, Y가 X에 종속되었다고 한다 ( X → Y )

  • 결정자 : 주어진 릴레이션에서 다른 속성 또는 속성의 집합을 고유하게 결정하는 하나 이상의 속성

수강 릴레이션에서 결정자는?

함수 종속의 성질
    1. 완전 함수 종속

​ 주어진 릴레이션 R에서 속성 B가 복합 속성 A에 함수적으로 종속하면서

​ 속성 A의 어떤 진부분 집합에도 함수적으로 종속하지 않는 것

​ 속성 B가 속성 A에 완전하게 함수적으로 종속한다고 표현

    1. 부분 함수 종속

속성 B가 복합 속성 A 전체가 아닌 일부에 의해 함수적으로 종속할 수 있는 속성이 존재할 때

03 정규화 과정

> 차수가 높을 수록 데이터베이스의 무결성을 저해할 수 있는 논리적 모순 존재 가능성 하락

> 중복 데이터 존재 가능성 하락

제1정규형

: 어떤 릴레이션 R에 속한 모든 도메인이 원잣값만으로만 구성

  • 반복 집합이 있는 비정규 릴레이션 > 반복 집합 제거 > 모든 속성값이 원잣값으로 구성된 제1정규형 릴레이션
  • 더이상 분해될 수 없는 원잣값으로만 구성된 릴레이션
  • 규칙에 위배된다면 비정규 릴레이션에 해당

제1정규형에 만족하는 릴레이션

  • 어떤 릴레이션 R에 속한 모든 도메인이 원자값
  • 릴레이션의 속성값이 반복 집단이 없는, 더이상 분해될 수 없는 원자값으로만 구성

반복 집합이 있는 비정규 릴레이션

* 반복 집한은 한 개의 기본키 값에 대해 두 개 이상의 값을 가질 수 있는 속성

제2정규형

: 어떤 릴레이션 R이 제1정규형이고, 키에 속하지 않는 속성 모두가 키에 완전 함수 종목으로 구성

  • 모든 속성값이 원잣값으로 구성된 제1정규형 릴레이션 > 부분함수의 종속성 제거 > 제1정규형이면서 키가 아닌 모든 속성이 키에 완전함수적으로 종속

  • 부분 함수 종속성 : 여러가지 갱신 이상이 발생

​ > 갱인 이상이 발생하지 않도록 부분 함수적 종속성 제거 후 속성 모두가 기본키에 완전 함수 종속

  • 하나의 릴레이션에 서로 다른 정보 기록으로 발생 > 이행적 함수 종속성 제거 후 직접적으로 함수적 종속
  • 릴레이션을 분해 후 표현 > 중복 감소 및 갱신 이상 빈도수 감소

무손실 분해

* 자연 조인할 때 아무 정보 손실 없이 원래의 릴레이션으로 복귀된다면, 2NF로 두 개의 릴레이션으로 분해

제3정규형

: 어떤 릴레이션 R이 2NF고, 모든 속성이 기보니에 이행적 함수 종속이 아닐 때

  • 이행적 함수 종속을 제거 - 키에 대해서 직접적으로 함수 종목

  • 이행적 함수 종속성 : 속성 A, B, C가 주어졌을 때 A→B와 B→C의 함수적 종속성이 존재하면 ( A→B^B→C ) 속성 C가 이행적으로 A에 종속한다 ( A→C )

    • 이행적 함수 종속으로 인한 갱신 이상

​ 1. 수정 이상 - 정보의 모순성 발생 2. 삽입 이상 - 임시 삽입 모순 3. 갱신 이상 - 연쇄 삭제 현상 * 모든 속성값이 원잣값으로 종속된 제2정규형 릴레이션 > 이행적 함수 종속 제거 > 키에 대해서 직접적으로 함수 종속하는 제3정규형 릴레이션

보이스 / 코드 정규형

: 릴레이션 R이 제3정규형을 만족하고, 모든 결정자가 후보키일 때

  • 키에 대해서 직접적 함수 종속인 제3정규형 릴레이션 > 후보키가 아닌 결정자를 제거 > 모든 결정자가 후보키로 구성된 BCNF 릴레이션

  • BCNF에 속한 모든 릴레이션은 제3정규형에 속함 ( 역은 성립 불가능 )

    • 결정자가 후보키가 아닌 릴레이션에서의 갱신 이상

​ 1. 수정 이상 - 정보의 모순성 발생 2. 삽입 이상 - 임시 삽입 모순 3. 갱신 이상 - 연쇄 삭제 현상

  • 키가 아니면서 결정자 역할을 하는 속성 제거
  • 키가 아니면서 결정자 역할을 하는 속성과 그 결정자에 함수적으로 종속하는 속성을 하나의 릴레이션에 넣는다.
  • 이 릴레이션에서 결정자는 기본키가 된다
  • 기존 릴레이션에 결정자를 남겨 기본키의 구성요소가 되도록 한다
  • 이 결정자는 새 릴레이션에 대한 외래키 역할도 한다