정규화의 개념
정규화는 데이터 베이스를 설계한 후 설계 결과물을 검증하기 위해 사용된다.
데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입 수정·삭제 연산을 수행할 때 부작용들이 발생할 수 있다. 이러한 부작용을 이상(anomaly) 현상이라 한다. 이상 현상을 제거하면서 데이터 베이스를 올바르게 설계해 나가는 과정이 정규화이다. 다르게 말한다면 불만족스러운 나쁜 릴레이션의 attribute를
갱신 이상
삽입 이상: 원하지 않는 자료가 삽입된다든지 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점을 말한다.
삭제 이상: 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원한지 않는 정보 손실이 발생하는 문제점을 말한다.
수정이상 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제점을 말한다. 정규화 과정을 거치게 되면 정규형을 만족하고 정규형이란 특정 조건을 만족하는 릴레이션의 스키마의 형태를 말하며 제 1정규형 제 2정규형,... 등이 존재한다.
나쁜 릴레이션은 어떻게 파악하는가
엔티티를 구성하고 있느느 attribute 간에 함수적 종속성(Functional Dependency)을 판단한다. 판단된 함수적 종속성은 좋은 릴레이션 설계의 정형적 기준으로 사용된다. 즉, 각각의 정규형마다 어떠한 함수적 종속성을 만족하는지에 따라 정규형이 정의되고 그 정규형을 만족하지 못하는 정규형을 나쁜 릴레이션으로 파악한다.
함수적 족속성이란
애트리뷰트 데이터들의 의미와 애트리뷰들 간의 상호 관계로부터 유도되는 제약조건의 일종이다. x와 y를 임임의 attribute집합이라고 할 때 x의 값이 y의 값을 결정한다면 "X는 Y를 함수적으로 결정한다."라고 한다. 함수적 종속적 종속성을 판단할 수 있다.
각각의 정규형은 어떠한 조건을 만족해야 하는가?
분해의 대상인 분해 집합 D는 무손실 조인을 보장해야 한다.
제 1 정규형
attribute의 도메인이 오직 원자값만을 포함하고 튜플의 모든 attribute가 도메인에 속하는 하나의 값을 가져야 한다. 즉 복합 attribute, 다중값 attribute 중첨 릴레이션등 비 원자적인 attribute들을 허용하지 않는 릴레이션 형태를 말한다.
제 2 정규형
모든 비주요 attribute들이 주요 attribute에 대해서 완전 함수적 종속미녀 제 2 정규형을 만족한다고 볼 수 있다. 완전 함수적 종속이란 x-> y라고 가정 했을 때 x의 어떠한 attribute라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우를 말한다. 즉 키가 아닌 열들이 각각 후보키에 대해 결정되는 릴레이션 형채를 말한다.
제 3 정규형
어떠한 비주요 attribute도 기본키에 대해서 이행적으로 종속되지 않으면 제 3정규형을 만족하는데 의미가 있다. 비주요 attribute가 후보키의 일부를 결정하는 분해하는 과정을 말한다. 즉 비주요 attribute 비주요 attribute에 의해 종속되는 경우가 없는 릴레이션 형태를 말한다.
BCNF 정규형
여러 후보 키가 존재하는 릴레이션에 해당하는 정규화 내용이다. 복잡한 식별자 관계에 의해 발생하는 문제를 해결하기 위해 제 3 정규형을 보완하는데 의미가 있다. 비주요 attribute가 후보키의 일부를 결정하는 분해하는 과정을 말한다.
- 모든 제 2 정규형 릴레이션은 제 1 정규형을 갖는다.
- 모든 제 3 정규형 릴레이션은 제 2 정규형을 갖는다.
- 모든 BCNF 정규형 릴레이션은 제 3 정규형을 갖는다.
정규화의 장점
- 데이터이스 변경 시 이상 현상 제거 위에서 언급했던 각종 이상 현상들이 발생하는 문제점을 해결할 수 있다.
- 데이터베이스 구조 확장 시 재 디자인 최소화 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다. 이는 데이터베이스와 연동된 응용프로그램에 최소한의 영향만을 미치게 되며 응용프로그램의 생명을 연장시킨다.
- 사용자에게 데이터 모델을 더욱 의미있게 제공 정규환된 테이블과 정규화된 테이블들간의 관계들은 현실 세계에서의 개념들과 그들간의 관계들을 반영한다.
단점
릴레이션의 분해로 인해 릴레이션간의 연산이 많아진다. 이로 인해 질의에 대한 응답 시간이 느려질 수 있다. 조금 덧붙이자면 정규화를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.
단점 보완반정규화반정규화는 (정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 운영의 단숭화를 위해 통합, 분리등을 수행하는 데이터 모델링 기법) 디스크 I/O량이 많아서 조회 시 성능이 저하되거나 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나 칼럼을 계산하여 조회할 때 성능이 저하될 것이 예상되는 경우 반 정규화를 수행하게 된다. 일반적으로 조회에 대한 처리 성능이 중요하다고 판단될 때 부분적으로 반 정규화를 고려하게 된다.
반 정규화의 대상
- 자주 사용되는 테이블에 액세스하는 프로세스의 수가 가장 많고, 항상 일정한 범위만을 조회하는 경우
- 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
- 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우
반정규화의 과저에서 주의점
반정규화를 과도하게 적용하다 보면 데이터의 무결성이 깨질 수 있다. 또한 입력, 수정, 삭제의 질의문에 대한 응답 시간이 늦어질 수 있다.
'백엔드 > 데이터베이스 설계' 카테고리의 다른 글
관계형 데이터베이스 (0) | 2021.11.12 |
---|---|
데이터베이스(Database) (0) | 2021.09.13 |