데이터 종속성과 정규화
01 정규화의 의미
정규화
- 자료 저장 공간을 최소화하고 데이터베이스 내의 데이터가 불일치 되는 위험을 최소화
- 갱신 이상이 생기지 않도록 하기 위해 불필요한 데이터가 중복 저장되지 않도록 방지
- 잘못된 릴레이션 스키마를 보다 더 작은 속성의 세트로 나누어 갱신 이상이 발생하지 않는 바람직한 릴레이션 스키마로 만들어 가는 과정
- 반복적인 자료를 제거하여 데이터의 중복을 감소시킴으로써 중복으로 인한 여러 가지 이상현상을 제거
데이터베이스 스키마가 잘못 설계된 경우
-
100번 학생이 전자계산기구조와 운영체제라는 두 과목을 신청하였기에 이 학생의 이름은 두 번 저장되는 문제점 발생
-
중복된 데이터의 저장으로 인해 저장 공간이 낭비된다는 문제점 이외에도 중복되어 저장된 데 이터 때문에 릴레이션의 수정, 삽입, 삭제와 같은 조작을 할 때 여러 가지 곤란한 이상(anomaly) 현상이 생김
목적
- 어떤 관계라도 데이터베이스 내에서 표현이 가능하도록 만드는 것
- 관계에서 바람직하지 않은 삽입, 삭제, 갱신 이상이 발생하지 않도록 하는 것
- 새로운 형태의 데이터가 삽입될 때 관계를 재구성할 필요성을 줄이는 것
-
보다 간단한 관계 연산에 기초하여 검색을 보다 효율적으로 하는 것
이상현상 (Anomaly)
- 수정 이상
- 중복 데이터 중에서 일부만 갱신되어 정보의 모순이 발생하는 것
- 중복 튜플 중 일부 튜플의 속성값만 변경시킴으로써 정보의 모순성이 발생하는 것
- 삽입 이상
-
- 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능하기에 원하지 않는 정보를 강제로 삽입해야 하는 것
- 삭제 이상
-
- 유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능한 것
- 한 튜플이 삭제됨으로써 유지되어야 할 정보까지도 삭제되는 연쇄 삭제현상으로 정보 손실 발생\
02 함수종속
임의 튜플에서 X의 값이 Y의 값을 함수적으로 결정한다면, Y가 X에 종속되었다고 한다 ( X → Y )
- 결정자 : 주어진 릴레이션에서 다른 속성 또는 속성의 집합을 고유하게 결정하는 하나 이상의 속성
수강 릴레이션에서 결정자는?
함수 종속의 성질
-
- 완전 함수 종속
주어진 릴레이션 R에서 속성 B가 복합 속성 A에 함수적으로 종속하면서
속성 A의 어떤 진부분 집합에도 함수적으로 종속하지 않는 것
속성 B가 속성 A에 완전하게 함수적으로 종속한다고 표현
-
- 부분 함수 종속
속성 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. 갱신 이상 - 연쇄 삭제 현상
- 키가 아니면서 결정자 역할을 하는 속성 제거
- 키가 아니면서 결정자 역할을 하는 속성과 그 결정자에 함수적으로 종속하는 속성을 하나의 릴레이션에 넣는다.
- 이 릴레이션에서 결정자는 기본키가 된다
- 기존 릴레이션에 결정자를 남겨 기본키의 구성요소가 되도록 한다
- 이 결정자는 새 릴레이션에 대한 외래키 역할도 한다