정규화란 무엇인가
관계형 데이터 베이스 설계에서 중복을 최소화하고 데이터를 구조화하는 프로세스를 뜻한다.
데이터가 중복으로 저장된다
- 디스크 공간 낭비
- 비정상적인 삽입 갱신 삭제 처리
- 일관되지 않은 데이터
문제가 생긴다.
기본 목표: 테이블 간에 중복된 데이터를 허용하지 않는다.
- 불필요한 데이터를 제거, 데이터의 중복을 최소화
- 데이터 베이스 구조 확장 시 재디자인을 최소화
- 이상 현상 방지
중복된 데이터를 허용하지 않음으로써 이상 현상을 없애는 과정
정규화는 어떤 배경에서 생겨났는가
한 릴레이션에 여러 속성의 값들을 혼합하면 정보가 중복 저장되어 이상 현상이 발생한다.
이상 현상이란, 테이블 내의 중복성에 의해서 발생되는 데이터 불일치 현상을 의미한다.
갱신 이상: 어떤 값을 업데이트 했을 때 그 속성의 다른 속성 값들과 불일치가 발생하는 현상
일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 현상
튜플 갱신 시 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불일치 현상
삽입 이상: 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
-> 원하는 필드에만 값을 넣고 싶은데, 원하는 값 이외에 다수의 필드 값도 함께 넣어줘야 해서 무엇을 넣을 지 결정하지 못하는 것
삭제 이상: 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
-> 원하는 값만 삭제하고 싶은데, 하나의 튜플이 삭제를 원하지 않는 속성 값도 갖고 있기 때문에 같이 지워져서 발생하는 문제
이러한 이상 현상을 방지하기 위해 정규화가 생겨난 것
정규화 장점
1. 데이터 베이스 변경 시 이상 현상을 제거할 수 있다.
2. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있다.
> 무결성:
3. DB의 저장 용량을 줄일 수 있다.
정규화 단점
릴레이션이 분해된 상태이므로 릴레이션 간 join 연산이 많아진다.
이로 인해 질의에 대한 응답 시간이 느려질 수 있다.
join: 두 릴레이션과 관련된 튜플을 하나의 튜플로 결합하는 연산
정규화의 과정
제1정규화
테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것
- 하나의 컬럼은 하나의 값만 가진다
- 기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다
- 한 속성에 대하여 반복되는 그룹이 나타나지 않는다
제2정규화
제 1 정규화를 진행한 테이블에 완전 함수 종속을 만족하도록 테이블을 분해하는 것
완전 함수 종속: 기본키의 부분 집합이 결정자가 되어선 안된다는 것을 읨
-> 이게 무슨 뜻이지??
X의 값에 따라 Y의 값이 결정될 때 Y는 X에 대해 함수적 종속이라고 한다.
예를 들어, 학번을 알면 이름을 알 수 있는데, 이 경우엔 학번이 X가 되고 이름이 Y가 된다.
제3정규화
제2정규화를 진행한 테이블의 이행적 종속을 없애도록 테이블을 분해하는 것
이행적 종속: A가 B가 속하고, B가 C에 속한다면, A는 C에 속함이 성립되는 것.
-> 이게 무슨 뜻?
BCNF (Boyce-Codd) 정규형