-
정규화
CS 지식/데이터베이스
2021. 1. 14. 15:23
정규화
- 목적
- 불필요한 데이터 제거하고 데이터를 논리적으로 저장하기 위해서
- 이상 현상
- 삽입 이상
- 원하지 않은 자료 삽입 or 삽입이 안되는 문제점(데이터 부족)
- 삭제 이상
- 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제
- 수정 이상
- 정확하지 않거나 일부의 튜플만 갱신 ~> 정보가 모호 or 일관성 깨짐
- 위의 이상 현상을 해결하기 위해 릴레이션의 애트리뷰트를 나눠 작은 릴레이션으로 분해하는 작업
- 1정규화
- 모든 속성이 원자 값을 가져야 함(더 이상 작은 단위로 쪼개지지 않는 값)
- 2정규화
- 1정규형을 만족하면서, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속이 돼야함
- 문제점
- 이행적 함수 종속이 존재함
- 삽입이상
- 새로운 엔티티가 생길 때, 종속되는 기본 키값이 없으면 NULL이 되므로 삽입 불가
- 갱신이상
- 같은 값을 가지는 튜플들에 대해 모두 변경해주지 않으면 데이터 불일치가 생김
- 삭제이상
- 기본키 값을 삭제하는 경우, 함께 가지고 있던 정보들이 사라짐
- 여전히 이상현상 존재
- 3정규화
- 2정규형을 만족하면서, 기본키가 아닌 모든 속성이 기본키에 이행적 함수종속이 되지 않아야함
- X->Y이고 Y->Z면 X->Z가 성립 => Z가 X에 이행적으로 함수 종속되었다고 함
- 문제점
- 후보키를 여러개 가지고 있는 릴레이션에서는 함수 종속 문제 발생
- BCNF
- 릴레이션 R에 대해서 함수 종속성 X->Y가 성립할 때, 모든 결정자 X가 후보키면 BCNF 정규형이됨
- 여러 후보 키가 존재하는 릴레이션에 해당하는 정규화 내용
- 3정규화 + 식별자로 쓰이는 속성이 일반 속성에 종속되지 않아야함
- 장점
- 이상 현상 제거하여 문제점을 해결할 수 있음
- DB 구조 확장 -디자인
- 최소화 정규화된 DB 구조에서는 새로운 데이터 추가로 인한 확장 시, 구조를 변경하지 않아도 되거나 일부만 변경해도 됨
- DB와 연동된 응용 프로그램에 최소한의 영향만 미치며 응용프로그램의 생명 연장
- 사용자에게 데이터 모델을 더욱 의미있게 제공
- 정규화된 테이블들간의 관계들은 현실 세계에서의 개념들과 관계들을 반영한다.
- 단점
- 릴레이션 분해로 인해 릴레이션 간의 JOIN 연산이 많아짐
- 응답 시간 지연
- 과도한 JOIN이 일어난다면 속도 저하가 일어나지만, 데이블 데이터 용량의 최소화로 속도가 빨라지기는 한다.
- 역정규화
- 자주 사용되는 테이블에 액세스하는 프로세스의 수가 가장 많고, 항상 일정한 범위만을 조회하는 경우
- 과도한 JOIN이 일어나는 경우
- 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
- 주의할 점
- 과도한 역정규화는 데이터 무결성을 깰 수 있음
- 데이터 입력 / 수정 / 삭제의 질의문에 대한 응답 시간이 지연될 수 있음