데이터베이스 정규화에서 중요한 배경이 될 이상현상에 대해서는
아래 글을 참고 바랍니다.
2024.02.01 - [DB/SQL - Oracle] - [SQL] 이상현상(Anomaly) + 키 예제
데이터베이스 정규화(DB Normalization)는
관계형 데이터 모델에서
데이터의 중복성을 제거하여 이상 현상*을 방지하고,
데이터의 일관성과 정확성을 유지하기 위해
"무손실 분해"하는 과정을 말한다.
중복을 제거하는 것이 중요한 이유는
데이터의 일관성과 정확성을 유지하기 위해
중복 데이터를 최소화하는 것이 필요하기 때문이다.
예를 들어 계속해서 데이터가 업데이트될 때,
중복값이 있는 경우 해당 데이터가
모두 업데이트되지 않을 확률이 높고,
결과적으로 어떤 값이 옳은 값인지 판단하기 어려워진다.
따라서 정규화 등 가능한 중복을 사전에 제거할 수
있는 방법을 고려하여 오류를 방지하려는 노력이 필요하다.
데이터베이스 정규화의 목적
1. 중복 데이터를 최소화하여 테이블 불일치 위험을 최소화한다.
(데이터 관리의 편리성을 높이고 자료 저장공간을 최소화할 수 있다.)
2. 데이터 수정, 삭제 시 이상 현상을 최소화함으로써 데이터 구조의 안정성과 무결성을 최대화한다.
3. 어떠한 릴레이션이라도 데이터베이스 내에서 표현이 가능하도록 만든다.
4. 데이터 삽입 시 릴레이션의 재구성에 대한 필요성을 줄인다.
5. 효과적인 검색 알고리즘을 생성하여 자료검색과 추출의 효율성을 높일 수 있다.
데이터베이스 정규화 단계
단계 | 조건 |
1정규형(1NF) | - 원자 값으로 구성됨 - 반복 속성이나 Group 속성을 제거함 - 새로운 실체와 1:N의 관계를 추가함 - 모든 속성은 반드시 하나의 값을 가져야 함 (반복형태가 있어서는 안됨) |
2정규형(2NF) | - 주식별자가 아닌 속성을 분리함 (주식별자에 완전하게 종속되지 않는 속성 제거) - 불완적 함수적 종속 제거함 (부분 함수 종속 제거함. 즉, 완전 함수적 종속 관계) - 모든 속성은 반드시 UID* 전부에 종속되어야 함 (UID일부에만 종속되어서는 안됨) |
3정규형(3NF) | - 비식별자에 종속되는 속성 제거 - 주식별자에 이행종속되는 속성 제거 (이행 함수 종속 제거) - UID가 아닌 모든 속성 간에는 서로 종속될 수 없음 (속성에 종속적인 속성을 분리함. 즉, 속성간 종속성 배제) |
보이스-코드 정규형(BCNF) | - 결정자가 후보 키가 아닌 함수 종속을 제거함 - 모든 결정자가 후보키에 해당함 |
4정규형(4NF) | - 다치(다중 값) 종속성을 제거함 - 특정 속성 값에 따라 선택적인 속성을 분리함 - 2차 정규화된 테이블은 N:M관계를 가질 수 없음 |
5정규형(5NF) | - 조인 종속성을 제거함 |
* 4차, 5차 정규화는 특수한 경우에만 발생하기 때문에 실무에서는 대체로 3차 정규화까지만 수행한다.
* UID ?
UID란, "Unique Identifier"의 약어로, "고유 식별자"를 의미한다.
UID는 각 행이나 각 데이터를 고유하게 식별하기 위해 사용되는
값으로, 주로 데이터베이스의 레코드(데이터베이스 저장 단위로,
일반적으로 튜플 하나를 의미)를 식별하는데 사용된다.
UID는 데이터베이스에서 데이터를 고유하게 식별하는데 필요한
기본키(primary key) 또는 대체키(alternate key)로 사용될 수 있다.
기본키는 해당 테이블에서 레코드를 식별하는 데 사용되는 고유한 값으로,
테이블에서 한 번만 나타날 수 있다. 대체키는 기본키가 아니지만 데이터를
식별하는 데 사용될 수 있는 다른 유일한 키를 말한다.
정규화를 통해 데이터를 여러 테이블로 분해하면서도 각 테이블을
식별할 수 있는 고유한 식별자가 필요한데, 이를 위해 UID가 사용되며,
UID를 사용하여 데이터를 정확하게 식별하고 테이블 간의 관계를 설정할 수 있다.
정규화 수준에 따른 장단점
데이터베이스 설계에서 정규화는 데이터를 효율적으로 구성하고
관리하는 데 중요한 개념이다. 정규화는 데이터를 여러 테이블로
분할하여 중복을 최소화하고 의존성을 관리함으로써
데이터베이스의 유연성과 효율성을 향상시킨다.
그러나 이러한 이점과 함께 정규화는 단점도 가지고 있다.
장점
1. 데이터 일관성 보장
데이터베이스의 정규화는 데이터의 일관성을 보장한다.
각 테이블은 특정 엔티티 또는 주제에 대한 정보를 포함하고 있으며,
이러한 분리된 테이블은 데이터의 일관성을 유지할 수 있다.
2. 데이터 중복 최소화
정규화는 데이터 중복을 최소화하여 데이터베이스의 용량을 줄이고
데이터의 무결성을 보호한다. 각 테이블은 고유한 엔티티를 나타내며,
이러한 구조는 데이터 중복을 방지할 수 있다.
3. 데이터 수정 용이성
정규화된 데이터베이스 모델은 데이터의 추가, 삭제, 수정이 용이하다.
각 테이블은 독립적으로 관리되므로 한 테이블에서의 변경이
다른 테이블에 영향을 미치지 않기 때문이다.
4. 데이터베이스 성능 향상
일부 정규화된 모델은 쿼리의 성능을 향상시킬 수 있다.
특히 데이터의 분리는 데이터의 불필요한 검색을 줄이고
쿼리의 실행 속도를 향상시킬 수 있다.
단점
1. 데이터 액세스 복잡성
과도한 정규화 수준은 데이터 액세스를 복잡하게 만들 수 있다.
많은 테이블이 상호 연결되어 있고, 쿼리에서 조인이 필요한 경우
사용자가 데이터를 검색하고 이해하기 어려울 수 있다.
2. 데이터 일관성 유지 어려움
일부 경우에는 정규화로 인해 데이터 일관성을 유지하는 것이
어려울 수 있다. 특히 여러 테이블 간의 복잡한 관계가 있는 경우에는
데이터 일관성을 유지하기 위해 추가적인 노력이 필요할 수 있다.
3. 데이터베이스 조인 비용
과도한 조인은 데이터베이스 성능에 부담을 줄 수 있다.
정규화로 인한 테이블 분할이 이루어지면
검색과 수정 등을 위해 조인으로 테이블을 연결해야 하는
경우가 발생하게 될 것이다. 이때 많은 테이블이 연결되어 있어
조인을 여러 번 해야할 경우 조인으로 인한 쿼리의 실행 시간이
증가하고 데이터베이스의 부하가 증가할 수 있다.
4. 데이터베이스 용량 증가
정규화를 통해 데이터 테이블로 분해된다면,
데이터의 저장공간이 테이블의 개수에 따라 증가할 것이다.
이처럼 정규화된 데이터베이스 모델은 종종 데이터베이스의
용량을 증가시킬 수 있다. 물론 중복된 데이터를 저장하지 않게
되므로 데이터의 저장공간을 절약할 수도 있지만, 특정 데이터에
대한 참조가 필요한 경우, 해당 데이터를 참조하는 키를 사용하여
여러 테이블 간의 관계를 유지해야 하는데, 이로 인해 추가적인
저장 공간이 필요하게 될 수도 있다.
아울러 많은 테이블과 인덱스가 생성되면 데이터베이스의 디스크 공간을
소비하고 백업 및 복구 작업을 복잡하게 만들 수 있다.
이와 같이 정규화는 데이터베이스의 구조를 향상시키고
데이터의 일관성을 보장하지만, 적절한 수준에서 멈추는 것이 중요하다.
너무 높은 정규화는 데이터베이스의 유지 관리를 복잡하게 만들 수 있고
성능 문제를 야기할 수 있다. 따라서 데이터베이스 설계 과정에서
이러한 장단점을 고려하여 적절한 정규화 수준을 선택해야 한다.
다음 글에서 데이터베이스 정규화에 대해 예시를 통해
상세히 다뤄보고자 한다.
'DB > Data modeling' 카테고리의 다른 글
[DB] ERD(개체관계 다이어그램)과 논리적 데이터 모델 (0) | 2024.02.19 |
---|---|
[DB] 관계 데이터 모델(Relation Data Model) (0) | 2024.02.18 |
[DB] 데이터 모델링(Data Modeling) 및 DB 설계 절차 (0) | 2024.02.18 |