이상현상
테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 수정, 삭제할 때 생기는 논리적 오류
- 삽입 이상 : 투플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상
- 수정 이상 : 투플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상
- 삭제 이상 : 투플 삭제 시 같이 저장되어있던 다른 정보들까지 연쇄적으로 삭제되는 현상
이런 이상현상을 예방하고 효과적인 연산을 하기 위해 데이터를 정규화함
정규화
이상현상이 발생하는 테이블을 수정하여 정상으로 만드는 과정
- 이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분 가능
- 테이블 분석하여, 함수 종속성이 있는지 파악 필요
- 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를 '속성 B는 속성 A에 종속한다' 혹은 '속성 A는 속성 B를 결정한다'라고 함
- A → B, A를 B의 결정자라고 함
- 릴레이션은 정규형 개념으로 구분, 정규현이 높을수록 이상현상이 줄어듦
함수 종속성
- 어떤 릴레이션 R과 R에 속하는 속성의 집합 X, Y가 있을 때 X 각각의 값이 Y의 값 한 개와 대응이 될 때 'X는 Y를 함수적으로 결정한다'라고 함
- X → Y로 표기, X를 결정자, Y를 종속 속성이라고 함
함수 종속성과 기본 키
- 기본 키는 릴레이션 모든 속성에 대해 결정자임
- 릴레이션의 함수 종속성을 파악하기 위해선 기본 키를 찾아야 함
이상현상과 결정자
- 이상현상을 없애려면 릴레이션을 분해해야 함
- 이상현상을 한 개의 릴레이션에 두 개 이상의 정보가 포함되어 있을 때 나타남
- 기본 키가 아니면서 결정자인 속성이 있을 때 발생
정규화 과정
제1 정규형
- 릴레이션의 모든 속성 값이 원자값을 가지면 제1 정규형이라 함
제2 정규형
- 릴레이션이 제1 정규형이고, 기본 키가 아닌 속성이 기본 키에 완전 함수 종속일 때
- 기본 키가 복합 키일 때, 복합 키의 일부가 다른 속성의 결정자인지 여부 판단
완전 함수 종속 : 기본 키의 부분집합이 다른 값을 결정하지 않는 것
불완전 함수 종속 : A → B 종속성에서 A의 속성 일부를 제거해도 종속성이 여전히 성립
제3 정규형
- 릴레이션이 제2 정규형이고, 기본 키가 아닌 속성이 기본 키에 비이행적으로 종속할 때(직접 종속)
이행적 종속 : A → B, B → C가 성립할 때 A → C가 성립되는 함수 종속성
BCNF
- 릴레이션이 제3 정규형이고, 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보 키이면 BCNF 정규형이라고 함
- 대부분의 릴레이션은 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 때문에 보통 BCNF까지 정규화를 진행함
정규화의 장단점
장점
- 데이터베이스 변경 시 이상현상이 발생하는 문제점을 해결할 수 있음
- 데이터베이스 구조 확장 시 정규화된 데이터베이스는 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됨
단점
- 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN)이 많아짐
- 이로 인해 질의에 대한 응답 시간이 느려질 수 있음
정규화를 수행한다는 것은 이상현상을 제거하는 것. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있음. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있음.
역정규화
- 정규화를 거치면 릴레이션 간의 연산(JOIN) 이 많아지는데, 이로인해 성능이 저하될 우려가 있음
- 역정규화를 하는 가장 큰 이유는 성능 문제가 있는(읽기 작업이 많이 필요한) DB의 전반적인 성능을 향상하기 위함