1. 정규화 란?
: 불필요한 데이터 중복을 피하기 위해 스키마를 분해하는 과정
: 함수적 종속이 중요한 역할을 함
정규화의 효과
: 이상현상 방지 , 데이터 중복으로 인한 문제 해결
단, 함수적 종속이 유지되도록 데이터베이스를 설계해야 함
2. 정규형
: 각 단계별 정규화 과정을 통해 분해된 테이블들의 구조
< 테이블의 분해 조건 >
1) 종속성 보존 분해
: 분해되기 전의 함수적 종속들이 분해 후에도 유지되어야 함
테이블 R이 R1, R2 로 분해되었을 경우,
{FD(R1) U FD(R2)} = FD(R) 을 만족할 때 종속성이 보존된다 고 한다.
2) 무손실 조인 분해
테이블 R이 R1, R2 로 분해되었을 경우,
ex) 무손실 조인 분해의 예
ex) 손실 조인 분해의 예
3. 1차 정규형
1) 정의
: 모든 도메인이 원자값으로만 구성되어 있을 때
( 관계형 데이터 모델의 정의를 따르는 모든 테이블은 1차 정규형이다. )
2) 1차 정규형의 문제점
: 삽입, 삭제, 수정 이상
3) 문제의 원인
부분 종속 : 키가 아닌 필드(A)가 피의 일부인 필드(X) 에 함수적으로 종속되는 경우
ex)
4. 2차 정규형
: 부분 종속의 제거
BUT ! 부분 종속의 제거하였다고 하더라도, 추가적인 부분 종속이 남아있는지 확인해야 한다.
+ 테이블을 정규화하더라도 함수적 종속이 그대로 유지된다.
즉, 2차 정규형은 종속성 보존 분해가 지켜진다.
1) 2차 정규형 정의
: 테이블 R에서 키가 아닌 모든 필드가 키에 함수적으로 종속되며, 부분 종속이 존재하지 않으면 2차 정규형이다.
- 하나의 필드가 키가 되는 경우는 모두 2차 정규형이다.
- 부분 종속에 의한 (삽입/삭제/수정) 이상현상이 발생하지 않는다.
2) 2차 정규형의 문제
: 아직도 삽입 / 삭제 / 수정 이상현상이 존재(부분 종속으로 인한 문제 제외)
삽입 이상
: '물리학과'의 사무실이 '930호'라는 정보를 삽입할 경우, '물리학과'에 소속된 학생이 없으면 삽입 불가능
삭제 이상
: 학번이 '1292301'인 학생 정볼를 삭제할 경우, 산업공학과의 정보도 함께 삭제됨
수정 이상
: 컴퓨터공학과의 사무실을 변경할 경우 3개의 레코드에 대해 모두 변경해야 함
3) 문제의 원인
: 기본키의 이행 종속
stu_id -> dept_name
dept_name -> office
stu_id -> office
즉, office 필드가 stu_id에 이행 종속된다.(다른 필드를 거쳐 종속됨)
5. 3차 정규형
: 이행 종속 분해
1) 정의
: 테이블 R이 2차 정규형이면서, 키에 속하지 않은 모든 필드가 기본 키에 이행 종속되지 않는다면 3차 정규형이다.
2) 3차 정규형의 문제점
부분 종속과 이행 종속이 존재하지 않음
BUT
삽입 이상
: '홍길동' 교수가 '자료구조'를 강의한다는 사실을 저장할 경우, 수강생이 없으면 저장할 수 없음
삭제 이상
: 학번이 '1292001'인 학생이 '운영체제'를 수강한다는 사실을 삭제할 경우, '장민석' 교수가 '운영체제'를 강의한다는 사실도 함께 삭제됨
수정 이상
: '박철재' 교수가 강의하는 과목이 '운영체제'로 변경되는 경우, 2개의 레코드를 변경해야 함
3) 문제 발생의 원인
: 키에 포함되는 필드 집합 A와 키에 포함되지 않는 필드 집합 X에 대하여
X->A 라는 함수적 종속이 존재할 경우, 데이터 중복이 발생
-> 부분 종속과 반대 !
6. 보이스 코드 정규형
: 분해
1) 정의
: 테이블 R에 존재하는 모든 함수적 종속에서 결정자가 후보키인 정규형
2) 보이스 코드 정규형의 문제점
: 함수적 종속이 보존되지 않을 수 있음
7. 관계형 데이터베이스 설계 원칙
이상 현상 방지 vs 종속성 보존
: 이상 현상 방지보다는 종속성 보존이 더 중요하기 때문에,
보이스-코드 정규화할 시에 종속성 보존이 안된다면 3차 정규형을 택한다.
< 정규형을 감안한 논리적 설계 과정 >
'Computer Science > Database' 카테고리의 다른 글
데이터베이스 설계 6)-2 물리적 저장구조와 인덱스 (0) | 2020.12.08 |
---|---|
데이터베이스 설계 6) 물리적 저장구조와 인덱스 (0) | 2020.12.02 |
데이터베이스 설계 4) 함수적 종속 (0) | 2020.12.01 |
데이터베이스 설계 3) 논리적 설계 (0) | 2020.12.01 |
데이터베이스 설계 2) 개념적 설계 (0) | 2020.11.27 |