이상현상이란 테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고, 이 중복으로 인해 테이블 조작 시 문제가 발생하는 현상을 의미한다. 이상현상의 종류에는 테이블 조작 중에 발생하는 삽입 이상, 갱신 이상, 삭제 이상 등이 있다.
삽입 이상, 삭제 이상, 갱신 이상을 설명할때 사용되는 <수강> 테이블
삽입 이상이란 테이블에 데이터를 삽입할 때 의도와는 상관 없이 원하지 않은 값들로 인해 삽입할 수 없게 되는 현상을 의미한다. 예를 들어 <수강> 테이블에서 학번이 "600"인 학생의 학년이 "2"라는 사실만을 삽입하고자 하는 경우, 과목 컬럼은 기본키라 null이 될 수 없기 때문에 불필요한 데이터도 함께 삽입해야 한다.
갱신 이상이란 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는 현상을 의미한다. 예를 들어 <수강> 테이블에서 학번이 "400"인 학생의 학년을 "4"에서 "3"으로 변경하고자 하는 경우 갱신 이상이 발생할 수 있다.
삭제 이상이란 테이블에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는, 즉 연쇄 삭제가 발생하는 현상을 의미한다. 예를 들어 <수강> 테이블에서 학번이 "200"인 학생이 과목번호 "C123"의 등록을 취소하고자 하는 경우 삭제 이상이 발생할 수 있다.
위와 같은 이상현상들이 발생하는 이유는 정규화가 되어 있지 않은 테이블 설계 때문이다. 정규화를 수행하려면 속성들간의 관련성을 파악해야 하는데 이 속성들간의 관련성을 함수적 종속성이라고 한다.
위처럼 관련 없는 속성들이 하나의 릴레이션에 모였을 때 발생하는 현상을 이상현상이라고 하며 이를 해결하는 척도가 되는 것이 함수적 종속성이다.
함수적 종속성은 아래와 같이 표현할 수 있다.
X -> Y
완전 함수 종속 (Full Functional Dependency)
일반적으로 함수 종속은 완전 함수 종속을 의미하는데 X -> Y 일 때 속성 집합 X의 일부분에는 Y가 종속되어 있지 않는다.
부분 함수 종속 (Partial Functional Dependency)
X -> Y 일 때 속성 집합 X의 부분집합에도 Y가 함수적으로 종속되어 있을 때 부분 함수 종속이라고 한다.
이행적 함수 종속 (Transitive Functional Dependency)
함수 종속 관계 X -> Y, Y -> Z 가 있으면 논리적으로 X -> Z 가 성립된다. 이것을 Z가 X에 이행적으로 함수 종속되었다고 한다.
릴레이션의 모든 도메인이 더이상 분해될 수 없는 원자값(atomicvalue)만으로 구성되어야 한다. 제 1정규형에서는 릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두개 이상의값을 가지는 반복 집합이 있다면 제거한다.
제 2정규형은 릴레이션이 제1정규형이며 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속된 것을 말한다.
제 3정규형은 제2정규형이고 기본키가 아닌 모든 속성이 기본키에 이행적 함수종속(transitiveFunctionalDependency)을 만족하지 않는 상태를 말한다.
보이스/코드 정규형(BCNF)은 제3정규형이고, 모든 결정자가 후보키인 상태를 말한다. 보통 하나의 릴레이션에 여러개의 후보키가 존재할 수 있는데 이 경우에 제 3정규형보다 엄격한 기준으로 제약을 건것이 바로 보이스/코드 정규형이다.