불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입,수정,삭제 연산을 수행할 때 발생할 수 있는 부작용
이상현상의 종류
삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
이벤트 참여 릴레이션에 신규 고객을 가입하려 한다.하지만 이 고객이 참여한 이벤트가 아직 없다면 이벤트 참여 릴레이션에 이고객에 대한 데이터를 삽입할 수 없다
갱신 이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
아이디가 apple인 고객의 등급이 gold->vip로 변경된다면 이 고객에 대한 투플 3개의 등급 속성값이 모두 변경 되어야 한다
삭제 이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
orange고객이 이벤트 참여를 취소하여, 이벤트 릴레이션에서 고객을 삭제하려고 하면 이벤트에 대한 정보만 가지고 있는게 아니라 해당 고객에 대한 정보들도 모두 삭제 된다
정규화
이상 현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정
이상 현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정
함수적 종속성을 판단하여 정규화를 수행함
정규화를 통해 릴레이션은 무손실 분해 되어야함
함수적 종속성
속석들 간의 관련성
함수 종속성을 이용하여, 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해하여 이상 현상이 발생하지 않는 바람직한 릴레이션으로 만들어 가가는 과정이 정규화
함수 종속
X가 Y를 함수적으로 결정한다. - 릴레이션 내에 모든 투플을 대상으로 하나의 X값에 대한 Y값이 항상 하나임 - X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합 - "Y가 X에 함수적으로 종속되어 있다"와 같은 의미 - X->Y로 표현(X는 결정자,Y는 종속자)
함수 종속 관계 판단시 유의 사항 - 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 함 - 속성 값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성 값만으로 판단하면 안됨 - 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함 - 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음
위 표 분석 1. 고객 아이디 -> 고객 이름 2. {고객 아이디,이벤트 번호}> 당첨 여부 3. {고객 아이디,이벤트 번호} -> 고객이름 4. 고객 이름은 {고객 아이디,이벤트 번호)의 일부분인 고객 아이디에 종속되어 있다 -> 고객 이름은 {고객 아이디,이벤트 번호)에 부분 함수 종속됨
완전 함수 종속
릴레이션에서 속성 집합 Y가 속성 집합X에 함수적으로 종속되어 있지만, 속성 집합X의 전체가 아닌 일부분에는 종속되지 않음을 의미
일반적으로 함수 종속은 완전 함수 종속을 의미함
예) 당첨 여부는 {고객 아이디,이벤트 번호)에 완전 종속됨
부분 함수 종속
릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
예) 고객 이름은 {고객 아이디,이벤트 번호)에 부분 함수 종속됨
이행적 함수 종속
릴레이션을 구성하는 세 개의 속성 집합 X,Y,Z에 대해 함수 종속 관계 X->Y와 Y->Z가 존재하면 논리적으로 X->Z도 성립 되는데, 이것을 Z가 X에 이행적으로 함수 종속 되었다고 함
고려할 필요가 없는 함수 종속 관계
결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 것처럼 당연한 함수 종속 관계는 고려하지 않음
정규형의 종류
제 1 정규형
릴레이션의 모든 속성이더는 분해되지 않는 원자값만 가지면 제1 정규형을 만족함
제 1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음
속성의 원자성 속성 값으로 더는 분해할 수 없는 하나의 값, 즉 원자 값만 사용할 수 있다 다시 말해 하나의 속성은 여러 개의 값, 다중 값을 가질 수 없다
이상 현상의 발생이유 - 기본키인{고객 아이디,이벤트 번호)에 완전 함수 종속되지 못하고 일부분인 고객아이디에 종속되는 등급과 할인율 속성이 존재하기 때문
문제 해결 방법 - 부분 함수 종속이 제거 되도록 이벤트 참여 릴레이션을 분해 ->분해된 릴레이션은 제 2정규형에 속하게됨
제 2 정규형
릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 만족
이상현상의 발생 이유 - 이행적 함수 종속이 존재하기 때문이행적 함수 종속
릴레이션을 구성하는 세 개의 속성 집합 X,Y,Z에 대해 함수 종속 관계 X->Y와 Y->Z가 존재하면 논리적으로 X->Z도 성립 되는데, 이것을 Z가 X에 이행적으로 함수 종속 되었다고 함
문제 해결 방법 - 이행적 함수 종속이 제거되도록 고객 릴레이션을 분해 -> 분해된 릴레이션은 제 3 정규형에 속하게 됨
제 3 정규형
릴레이션이 제 2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않으면 제 3 정규형을 만족