본문 바로가기
카테고리 없음

데이터베이스 정규화란

by Node.js 주니어 개발자 귤 2023. 6. 8.

데이터베이스 정규화는 데이터베이스 설계 과정 중 데이터를 구조화하고 조작화하는 프로세스이다.

이를 통해 데이터베이스의 성능과 유지보수성을 향상시킬 수 있다.

정규화는 데이터 중복을 최소화하고 일관성,무결성,효율성을 보장하기 위해 데이터를 특정 규칙에 따라 분해하는 과정이다.

 

관계형 데이터베이스에서 주로 사용되는 정규화 기법은 제1 정규화, 제2 정규화, 제3 정규화 이다.

각각의 정규화 단계는 다음과 같은 목적을 가지고 있다

 

 

1. 제1 정규화

중복 데이터를 제거하고 각 열을 원자값(Atomic Value, 하나의 값)을 갖도록 분해한다.
이를 통해 데이터의 중복을 최소화하고 데이터베이스의 일관성을 확보한다.

 

2. 제2 정규화

제1 정규화를 진행한 테이블이 대해 부분 함수 종속성(Partial Function Dependency)을 제거하기 위해
테이블을 분해한다.
테이블은 기본 키(Primary Key)에 대해 환전 함수 종속(Full Function Dependency)을 가져야 한다.

여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.

 

3. 제3 정규화

제2 정규화를 진행한 테이블이 대해 이행 함수 종속(Transitive Dependency)을 제거하기 위헤 테이블을 분해한다.
테이블은 기본 키에 대해 이행적으로 종속되지 않아야 한다.

여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립할때 A -> C가 성립되는 것을 의미한다.

 

BCNF정규화

BCNF 정규화란 제 3 정규화를 진행한 테이블이 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.

BCNF(Boyce-Codd Normal Form)는 데이터베이스 정규화의 한 형태로 제3 정규화의 한계를 극복하기 위해
만들어진 정규화 기법이다.

BCNF는 모든 결정자(Candidate Key)가 함수 종속성의 왼쪽에 있어야 한다는 규칙을 강조한다.
즉, 모든 함수 종송성이 후보 키에 의존해야 한다. BCNF를 만족하지 않는 경우 속성 간에 종속성이 존재하면서
이상현상이 발생할 수 있다.

BCNF는 제3 정규화보다 더 엄격한 조건을 요구하므로 데이터베이스를 BCNF로 정규화하면 제3 정규화 까지만
진행한 경우 보다 더 많은 데이블을 분해할 필요가 있을 수 있다. BCNF는 데이터베이스의 일관성을 보장하고 중복을 제거하는데 도움을 주지만 정규화 과정이 복잡해지고 쿼리 성능에 영향을 중 수 있기 때문에 실무에서는 필요에 따라 BCNF를 적용할지 결정해야 한다