릴레이션 정규화
- 부주의한 데이터베이스 설계는 제어할 수 없는 데이터 중복을 야기하여 여러 가지 갱신 이상(update anomaly)을 유발한다.
정규화
- 주어진 릴레이션 스키마를 함수적 종속성과 기본 키를 기반으로 분석하여 원래의 릴레이션을 분해함으로써 중복과 3가지 갱신 이상을 최소화한다.
좋은 관계 데이터 베이스 스키마를 설계하는 목적
- 정보의 중복과 갱신 이상이 생기지 않게 하기 위해서
- 정보의 손실을 막으며 실세계를 훌륭하게 나타내고 attribute 간의 관계가 잘 표현되는 것을 보장하기 위해서
- 어떤 무결성 제약조건의 시행을 간단하게 하며 효율적인 측면을 고려하기 위해서
- 갱신 이상이 발생하지 않도록 먼저 노력하고, 그 다음에 효율성을 고려한다.
갱신 이상(update anomaly)
수정 이상(modification anomaly)
- 반복된 데이터 중에 일부만 수정하면 데이터의 불일치가 발생한다.
삽입 이상(insertion anomaly)
- 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능한 경우
삭제 이상(deletion anomaly)
- 유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능한 경우
- 문제점 : 정보의 중복
동일 사원의 이름, 사원 번호, 주소, 전화 번호 등이 중복되어 저장된다.
- 문제점 : 수정 이상
만일 어떤 부서의 이름이 바뀔 때 이 부서에 근무하는 일부 사원 투플에서만 부서 이름을 변경하면 데이터 베이스가 불일치 상태에 빠진다.
- 문제점 : 삽입 이상
부서를 신설했을 때 사원을 한 명도 배정하지 않았다면 이 부서에 관한 정보를 입력할 수 없다
- 문제점 : 삭제 이상
만일 어떤 부서에 속한 사원이 단 한 명 있을 때, 이 사원에 관한 투플을 삭제하면 이 사원이 속한 부서에 관한 정보도 릴레이션에서 삭제된다.
릴레이션 분해
- 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것
- 릴레이션의 분해는 필요한 경우에는 원래의 릴레이션으로 복원할 수 있어야함을 보장해야 한다.
- 분해를 잘못하면 정보가 손실되거나 많아질 수 있다.
- 함수적 종속성에 관한 지식을 기반으로 릴레이션을 분해한다.
릴레이션 분해를 통한 갱신 이상의 해결
부서 이름의 수정
어떤 부서에 근무하는 사원이 여러 명 있더라도 사원1 릴레이션에는 부서 이름이 포함되어 있지 않으므로 수정 이상이 나타나지 않는다.
새로운 부서의 삽입
- 어떤 신설 부서에 사원이 한 명도 배정되지 않더라도, 부서 릴레이션의 기본 키가 부서 번호이므로 부서에 관한 정보를 삽입할 수 있다.
마지막 사원 투플을 삭제
- 유일한 사원에 관한 투플을 삭제하더라도 이 부서에 관한 정보는 부서 릴레이션에 남아 있다.