릴레이션 스키마를 설계하는것에 있어서 제1의 목표는 좋은 스키마를 많드는것이다. 좋은 스키마란, 엔티티(개체)와 릴레이션쉽을 잘 도출해서 만들어낸 스키마이다. 즉, 데이터의 종속성을 고려해서 서로 연관있는 애트리뷰트끼리 하나의 릴레이션(관계성)에 묶어야한다.
학생이름, 학번은 학생에 대한 애트리뷰트이다. 하지만 과목이름은 학생은 관계가 없다.따라서 이를 관계에 따라 나눠야한다.
이상에는 총 3가지 이상이 있다.
다음과 같은 스키마가 있다.
삭제 이상
200번학생의 C123의 등록을 취소한다고 할 때, 3학년이라는 학년정보역시 같이 사라져 버린다. 즉, 연쇄 삭제에 의한 정보손실이 발생한다.
삽입 이상
600번 학생이 2학년이라는 사실을 넣을 때, 어떤 과목이 등록되지 않는 이상 삽입이 안된다(과목번호가 기본 키). 즉, 원하지 않는 정보의 강제삽입이 이루어진다
갱신 이상
400번 학생의 학년은 4에서 3으로 변경 할 때, 400에대한 4개의 튜플을 전부 변경해야한다.
중복 데이터의 일부 갱신으로 정보의 모순성(inconsistency)이 발생
하나의 개체에 속한 애트리뷰트간에 존재하는 여러 개의 종속관계를 하나의 릴레이션으로 표현해서
애트리뷰트들 간의 여러 종속관계를 분해하여 각각 하나의
릴레이션으로 표현 -> 하나의 종속성은 하나의 릴레이션으로 표현 -> 정규화
어떠한 집단에서 사용되는 데이터들의 제약조건, 종속성은 해당 집단의 전문가에게 문의하여야 한다.
최소의 데이터 중복
분리의 원칙 -> 독립된 관계성은 별도의 릴레이션으로 분리시켜 표현
함수종속은 만고불변의 진리가 아니라, DB사용자들이 결정하는것이다.
정의
애트리뷰트X에 대해서 Y의 값이 연관관계일떄
Y는 X의 함수 종속이다
X->Y
이때 X는 결정자, Y는 종속자
X Y는 두 개 이상의 에트리뷰트 집합이 될 수 있다
X가 키이면 Y1 Y2 Y3 모든 애트리뷰트 Y에 대해 X->Y 성립한다.
애트리뷰트 X가 반드시 키(유일 값)라는 것을 요건으로 하지 않는다. 즉, X의 어느 한 값에 대응되는 Y 값을 갖는 투플이 둘 이상 존재 가능.
위 다이어그램에서
X = {학번, 과목번호}
X’ = X의 부분집합
X’로 Y가 결정되는 경우가 있다면 부분함수종속
없다면 완전 함수 종속
예: 수강 릴레이션의 함수 종속
학번 -> 학년
{학번,과목번호} -> 성적
정규형어떤 일련의 제약조건을 만족하는 릴레이션
정규화 즉, 스키마 변환 (S -> S')으로 정규형을 만듦
① 정보 표현의 무손실
② 최소의 데이터 중복
③ 분리의 원칙
모든 애트리뷰트가 원자값으로 구성
수강지도 릴레이션
삽입 이상
500번 학생의 지도교수가 P4라는 사실을 삽입하려 할 때 어떤 과목을 등록하지 않는 한 삽입은 불가능 (기본키 과목번호가 없음)
삭제 이상
200번 학생이 C123의 등록을 취소하여 이 투플이 삭제되는 경우에 지도교수가 P2라는 정보까지 손실됨 (유일한 데이터)
갱신 이상
400번 학생의 지도교수를 P1에서 P3로 변경하는 경우에 학번이 400인 4개의 투플에 대한 지도교수를 모두 P3로 변경해야 함
이상의 원인
이상의 해결
1NF이고, 키에 속하지 않는 애트리뷰트들은 모두 기본 키에 완전 함수종속
1NF를 프로젝션하면 2NF
2NF를 조인하면 1NF
R(A,B,C)에서 함수 종속 A -> B가 성립하면
⇒ R1(A,B), R2(A,C) 로 무손실 분해가 가능
수강지도 > 지도, 수강 릴레이션으로 분해
삽입 이상
어떤 지도교수가 특정 학과에 속한다는 사실의 삽입이 불가능 (학번이 기본키)
삭제 이상
300번 학생의 투플을 삭제하면 지도교수 P3가 컴퓨터공학과에 속한다는 정보를 상실
갱신 이상
지도교수 P1의 소속을 컴퓨터공학과에서 전자과로
변경한다면 학번이 100과 400인 두 개의 투플을 모두
변경해야 함
발생원인 - 이행적 함수 종속이 존재하기 떄문
해결 - 프로젝션으로 2NF 릴레이션을 분해 (이행적 함수 종속을 제거) ⇒ 3NF
릴레이션 R에 함수 종속 A > C가 존재하고 함수 종속 A > B와 B > C가 성립할 때 애트리뷰트 C는 애트리뷰트 A에 이행적 함수 종속이라고 한다.
2NF이고, 키가 아닌 모든 애트리뷰트들은 기본 키에 이행적
함수 종속이 되지 않음
지도 > 학생지도와 지도교수학과로 분해
학생지도 (학번, 지도교수)
지도교수학과 (지도교수, 학과)
I. 복수의 후보 키를 가지고 있고
II. 후보 키들이 두 개 이상의 애트리뷰트들로 구성되고
III. 후보 키들의 애트리뷰트가 서로 중첩되는 경우
⇒ 보다 일반적인 Boyce/Codd Normal Form(BCNF)을 제안
삽입 이상
교수 P5가 자료 구조 과목을 담당한다는 사실의 삽입은 학번(수강 학생)이 있어야 가능
삭제 이상
100번 학생이 자료 구조를 취소하여 투플을 삭제하게 되면 P2가 담당교수라는 정보도 삭제됨
갱신 이상
P1이 프로그래밍 과목 대신 자료 구조를 담당하게 되면 P1이 나타난 모든 투플을 변경하여야 함
⇒ 원인 : 교수가 결정자이지만 후보 키가 아님
릴레이션 R의 결정자(determinant)가 모두 후보 키이면 릴레이션 R은 BCNF에 속한다.
P4가 데이터 베이스를 담당한다는 정보를 입력하려면 데이터베이스 교제 (T3, T3, T5)에 대한 튜플을 삽입해야함
원인
이런것을 다치종속이라 부른다
A, B, C가 릴레이션 R의 애트리뷰트의 부분 집합이라 할 때
애트리뷰트 쌍 (A, C)-값에 대응되는 B-값의 집합이
A-값에만 종속되고 C-값에는 독립적이면
B는 A에 다치 종속이라 하고 A↠ B로 표기한다
릴레이션 R에서 A ↠ B를 만족하는 애트리뷰트 집합 A, B가 존재할 때 R의 모든 애트리뷰트들이 A에 함수 종속이면 R은 4NF(즉 R의 모든 애트리뷰트 X에 대해 A > X 이고 A가 후보 키)