Search

정규화

개념

관계형 데이터베이스에서 데이터 중복으로 인해 발생하는 이상현상을 제거하기 위해 속성들을 분해하는 작업
이상 현상
데이터 중복으로 인해 발생하는 현상
종류
삽입 이상
불필요한 데이터를 추가해야만, 원하는 데이터를 추가할 수 있는 경우
예. PK == {학번, 강좌} 인 릴레이션
학생 200이 어떤 강좌도 수강하지 않을 때 학생 200의 정보를 추가하기 위해선, 강좌 정보도 추가해야 함
하지만 강좌정보는 PK이므로 Null이 될 수 없기 때문에, 굳이 “미수강”같은 불필요한 정보를 추가해야만 저장이 가능
삭제 이상
필요한 데이터까지 삭제해야, 원하는 데이터를 삭제할 수 있는 경우
예.
데이터베이스의 강의실 정보를 삭제하기 위해선, 학생 100과 200이 데이터베이스를 수강한다는 정보까지 삭제해야 함
갱신 이상
중복된 데이터 중 일부만 변경하여 데이터 불일치가 발생하는 경우
예.
데이터베이스 강좌의 강의실이 변경될 경우, 1행과 2행의 강의실 정보를 모두 변경하지 않고 일부만 변경될 경우 데이터 모순 발생
정규화 대상이 되는 릴레이션
속성 간, 함수적 종속성을 판단하고 그에 해당하는 정규형을 만족하지 못하는 릴레이션
함수적 종속성 (Functional Dependency)
속성의 부분 집합 X, Y가 있을 때, X값에 따라 Y가 달라지는 경우
Y는 X에 함수적 종속 이라고 하고, X(결정자) → Y(종속자)로 표현
종류
완전 함수적 종속 / 부분 함수적 종속 / 이행적 함수 종속
장점
데이터 중복으로 인한 이상현상 제거
DB 구조 확장 시, 구조 변경이나 수정이 적다 (유지 보수에 좋음)
단점
릴레이션 분해로 인해 JOIN 증가 ⇒ 질의 응답 시간 느려짐
단점 해결
반정규화 (De-Normalization; 역정규화)
성능 향상을 위해, 데이터를 중복, 추가시키는 등 정규화에 반대되는 작업 수행

정규화 과정

제 n 정규화는 제 n-1 정규형을 이미 만족시킨 상태에서 수행
1.
제 1 정규형 (1NF)
컬럼값이 원자값(단일값)이어야 함
제 1정규형을 만족시키지 못한 릴레이션 (PK == { 학생번호, 강좌이름 } )
성적 컬럼에 원자값이 아니라 복수 데이터가 저장됨
해결
제 1정규형에서 발생하는 이상현상
삽입 이상
100번 학생이 데이터베이스를 재수강하여 4.5를 받은 데이터를 추가하기 위해선, 이미 기존에 존재하는 강의실, 대여료 정보를 또 추가해야만 함
삭제 이상
100번 학생이 자료구조 강좌를 취소하면, 자료구조 강좌가 공학관 111호에서 열린다는 정보까지 다 삭제됨
갱신 이상
공학관 110호의 대여료를 변경하고 싶을 때, 1행, 2행의 대여료 정보를 모두 변경해야 함
제 1정규형에서 이상현상이 발생하는 이유
기본키가 아닌 속성들이, 기본키에 완전 함수적 종속되지 않기 때문
완전 함수적 종속 == 부분 함수적 종속이 없다
부분 함수적 종속성
A라는 집합이 B를 결정 지을 때, A의 부분집합도 B를 결정지음
ex. 기본키 부분집합인 강좌이름 → 강의실 & 강좌이름 → 대여료
2.
제 2 정규형 (2NF)
제 1 정규형을 만족시키면서, 기본키에 속하지 않은 속성들이 모두 기본키에 완전 함수적 종속
즉, 기본키에 속하지 않은 속성들이 기본키에 완전 함수적 종속
기본키의 부분집합이 결정자가 되면 안됨
제 2정규형을 만족시키지 못하는 릴레이션
기본키의 부분집합인 강좌이름이 강의실과 대여료를 결정지음
해결
릴레이션을 학생번호 + 강좌이름 + 성적 && 강좌이름 + 강의실 + 대여료 로 분리
제 2정규형에서 발생하는 이상현상
삽입 이상
강좌 릴레이션에, 대여료가 30,000원인 강의실 정보를 추가하고 싶을 때, 필요없는 강좌이름까지 추가해야 함
삭제 이상
강좌 릴레이션에서, 공학관 110호의 대여료 정보만 삭제하고 싶을 땐, 데이터베이스가 공학관 110호에서 열린다는 정보(강좌이름, 강의실)까지 삭제해야 함
갱신 이상
강좌 릴레이션에서, 공학관 110호의 강의실 대여료를 수정하려면, 1행과 3행의 대여료 정보를 모두 수정해야만 함
제 2정규형에서 이상현상이 발생하는 이유
이행적 함수 종속된 속성이 있기 때문
이행적 함수 종속성
속성1 → 속성2 → 속성3
ex. 강좌이름 → 강의실 → 강의실 대여료
3.
제 3 정규형 (3NF)
제 2 정규형을 만족하면서, 이행적 함수 종속성을 제거한 정규형
제 3 정규형을 만족시키지 못하는 릴레이션
강좌이름이 강의실을 결정하고, 강의실도 대여료를 결정함
해결
릴레이션을 강좌이름 + 강의실 & 강의실 + 대여료 로 분리
4.
BCNF
제 3 정규형을 강화한 개념
모든 결정자는 후보키여야 함
BCNF 정규형을 만족시키지 못한 경우
후보키가 될 수 없는 담당교수 속성이 과목명을 결정하고 있음
제 3 정규형에서 발생하는 이상현상
삽입 이상
새로운 교수가 특정 과목을 담당한다는 정보 추가 불가.
적어도 1명의 수강학생이 필요함
삭제 이상
학번 100이 C234과목을 취소하면, 교수 P2가 C234과목을 담당한다는 정보도 삭제됨
갱신 이상
교수 P1의 과목이 변경되면 1행, 3행의 과목 정보를 모두 변경해야 함
해결
결정자인 담당교수가 후보키가 될 수 있게 분리

반정규화 / 역정규화

성능향상을 위해서 정규화된 테이블을 병합/분리하거나 데이터 중복/추가 등 정규화에 위배된 작업을 수행하는 것
필요한 경우
Join이 많은 경우
테이블 병합
테이블 전체가 아니라, 특정 범위 데이터만 자주 처리하는 경우
테이블 full scan을 줄이기 위해, 테이블을 수직/수평분할 하여 새로운 테이블 생성
요약/집계 정보가 자주 조회되는 경우
연산을 줄이기 위해, 이미 계산된 결과를 저장하는 컬럼을 추가로 생성
단점
과도한 반정규화는 무결성을 해칠 수 있고, 속도를 느리게 만들 수 있음