삭제이상
튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
삽입이상
튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL값을 입력해야 하는 현상
(NULL값은 가능한 테이블에 없어야 한다)
NULL은 값이 없음을 의미하므로 SELECT COUNT에 포함되지 않고, 어떤 사칙 연산과 조합되더라도 그 결과는 NULL이다.
수정이상
튜플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상
정규화 : 이상현상이 발생하는 테이블을 수정하여 정상으로 만드는 과정
정규화를 하기 위해서는 우선 테이블을 분석하여 기본키와 함수 종속성을 파악해야 한다
릴레이션 R과 R에 속하는 속성의 집합 X, Y가 있을 때, X 각각의 값이 Y의 값 한 개와 대응이 될 때 'X는 Y를 함수적으로 결정한다'라고 하고 X -> Y 로 표기한다.
이때 X를 결정자라고 하고, Y를 종속 속성이라고 한다.
함수 종속성은 보통 릴레이션 설계 때 속성의 의미로부터 정해진다.
결정자는 복합 속성일 수 있다.
X, Y, Z가 릴레이션 R에 포함된 속성의 집합이라고 할 때, 함수 종속성에 관한 다음 규칙이 성립한다.
부분집합 규칙
Y가 X의 부분집합이라면, Y는 X에 종속한다
ex) (학과, 주소) -> 학과
증가 규칙
Y가 X에 종속한다면, YZ도 XZ에 종속한다
(X->Y => XZ->YZ)
이행 규칙
Y가 X에 종속하고, Z가 Y에 종속한다면, Z는 X에 종속한다
(X->Y,Y->Z => X->Z)
위 세 가지 규칙으로부터 부가적으로 다음의 규칙을 얻을 수 있다.
결합 규칙
Y가 X에 종속하고 Z가 X에 종속하면, YZ는 X에 종속한다
(X->Y,X->Z => X->YZ)
ex)
학생번호 -> 학생이름
학생번호 -> 주소
=>
학생번호 -> (학생이름, 주소)
분해 규칙
YZ가 X에 종속한다면, Y도 X에 종속하고 Z도 X에 종속한다
(X->YZ => X->Y, X->Z)
유사이행 규칙
Y가 X에 종속하고 Z가 WY에 종속한다면, Z는 WX에 종속한다.
(X->Y, WY->Z => WX->Z)
ex)
학생이름 -> 학생번호
(강좌이름, 학생번호) -> 성적
=>
(강좌이름, 학생이름) -> 성적
릴레이션의 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 한다
릴레이션 R(K, A1, A2, A3, ..., An)에서 K가 기본키이면, K->R이 성립한다.
(=기본키는 릴레이션의 모든 속성에 대해 결정자이다)
ex)
R(K, A, B, C)가 있다고 할 때, K가 기본키이므로
K->A, K->B, K->C가 성립한다.
여기에 함수 종속성 규칙을 적용하면 K->KABC가 성립하므로 K->R이 성립한다.
이상현상은 한 개의 릴레이션에 두 개 이상의 정보가 포함되어 있을 때 나타난다
(=이상현상은 기본키가 아니면서 결정자인 속성{비후보키 결정자 속성}이 있을 때 발생)
즉, 한 릴레이션 안에서 기본키만이 결정자여야 한다
그래서 릴레이션을 분해할 때는 부분 릴레이션의 결정자는 원래 릴레이션에 남겨두어야 한다.
정규화 : 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정
정규형 : 함수 종속성의 유형에 따른 등급의 구분
정규형이 높을수록 이상 현상이 줄어든다.
릴레이션 R의 모든 속성 값이 원자값을 가지면 제 1정규형이라고 한다.
이름 | 스택 |
---|---|
woobuntu | javascript, python |
위와 같은 경우는 스택이라는 속성이 원자값을 가지지 못한 경우이다.
이름 | 스택 |
---|---|
woobuntu | javascript |
woobuntu | python |
이렇게 되어야 속성이 원자값을 가진 것
릴레이션 R이 제 1 정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때 제 2정규형이라고 한다.
완전 함수 종속
A와 B가 릴레이션R의 속성이고, A->B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우 완전 함수 종속이라고 한다.
불완전 함수 종속
A->B 종속성에서 A의 속성 일부를 제거해도 종속성이 여전히 성립하는 경우
ex) (A1, A2)->B 종속성에서 A2를 제거했는데도 A1->B가 여전히 성립한다면 불완전 함수 종속
기본키가 아닌 속성이 기본키에 불완전 함수 종속이라면 이상현상이 발생한다
릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에 비이행적으로 종속할 때(직접 종속) 제 3정규형이라고 한다.
기본키가 아닌 속성이 기본키에 이행적으로 종속되어 있을 때 이상현상이 발생한다.
릴레이션 R에서 함수 종속성 X->Y가 성립할 때, 모든 결정자 X가 후보키이면 BCNF 정규형이라고 한다.
결정자이면서 후보키가 아닌 속성이 존재하면 이상현상이 발생한다.
BCNF이후에도 제 4정규형, 제 5정규형까지 존재한다.
대부분의 릴레이션은 BCNF까지 정규화하면 실제적인 이상현상은 없어진다고 한다.
릴레이션을 분해할 때는, 분해된 릴레이션의 관계를 유지하기 위해 분해된 릴레이션에 공통 속성을 한 개 이상 두어야 한다
(=무손실 분해를 해야 한다)
이 때의 공통 속성은 분해된 릴레이션을 다시 원래의 릴레이션으로 합성(조인)할 때 사용한다.
무손실 분해의 조건
분해된 두 개의 릴레이션을 다시 조인하면 원래의 릴레이션이 되어야 한다
공통된 속성이 분해되어 만들어진 두 릴레이션 중 어느 한 쪽의 키가 되어야 한다
기본키를 정하는 것이 정규화의 첫 단계