Computer Science/데이터베이스

데이터베이스 정규화

eunnnn 2023. 3. 25. 12:09

데이터베이스 정규화란 데이터베이스의 설계를 재구성하는 테크닉이며, 기본적으로 테이블 간에 중복된 데이터 허용하지 않는다는 것을 목표로 한다.

 

정규화에는 아래와 같은 3가지 원칙이 있다.

  • 정보의 무손실 : 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함해야 한다.
  • 최소 데이터 중복 : 이상 현상을 제거, 데이터 중복을 최소화
  • 분리의 원칙 : 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리해서 표현

중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, 불필요한 데이터가 삭제되어 데이터베이스의 저장 용량 역시 줄일 수 있다는 장점이 있다.

 

이상(Anomaly)의 종류

  • 삽입 이상(Insertion Anomaly) : 릴레이션에 데이터를 삽입할 때 의도와 상관없이 원하지 않은 값들도 함께 삽입되는 현상
  • 삭제 이상(Deletion Anomaly) : 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 현상
  • 갱신 이상(Update Anomaly) : 릴레이션에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상

 

정규화 vs 반정규화

중복을 최소화 하도록 설계된 정규화 데이터베이스와 다르게, 반정규화 데이터베이스는 읽는 시간을 최적화하도록 설계된 데이터베이스를 말한다. 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 '의도적으로' 정규화 원칙을 위배하는 행위이다.

 

각 설계 방식의 장단점을 살펴보면 다음과 같다.

  장점 단점
정규화 데이터베이스 변경 시 이상현상 제거 용이
효율적인 검색 알고리즘 생성
데이터 구조의 안정성, 무결성 유지 가능
Join 연산의 증가로 인한 응답시간 저하 가능성
반정규화 빠른 데이터 조회
데이터 조회 쿼리의 간단화
데이터 갱신, 삽입 비용이 높음
데이터 무결성을 해침
데이터의 중복 저장으로 인한 추가 저장공간 확보 필요

 

제 1 정규화

제 1 정규화는 각 컬럼이 원자값(Atomic Value)를 갖는다는 것을 의미한다. 각 컬럼에는 값이 1개씩만 있어야 한다는 것이다.

제 2 정규화

제 2정규화는 제1 정규화를 진행한 테이블에 대해 테이블의 모든 컬럼이 완전 함수적 종속을 만족하는 것이다.
여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.

이 테이블을 예시로 보면, 기본 키는 (학생번호, 강좌이름)으로 복합 키이다. (학생, 강좌이름)의 묶음이 성적 컬럼을 결정하기 때문이다.

그러나 강의실은 강좌이름으로도 결정될 수 있다. 따라서 (학생번호, 강좌이름)의 부분 집합인 강좌 이름이 결정자가 되었기 때문에 이 테이블은 완전 함수적 종속을 만족시키지 못했다.

 

그래서 제 2정규형을 만족시키기 위해 테이블을 분해하면 다음과 같다.

 

제 3 정규화

제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다.

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

이 테이블에서 학생 번호는 강좌 이름을 결정하고, 강좌 이름은 수강료를 결정한다. 그래서 이를 (학생번호, 강좌이름), (강좌 이름, 수강료)의 테이블로 분해해서 이행적 종속을 없앨 수 있다.

 

BCNF

BCNF 정규화란 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다. 예를 들어 다음과 같은 특강수강 테이블이 존재한다고 하자.

특강수강 테이블에서 기본키는 (학생번호, 특강이름)이다. 그리고 기본키 (학생번호, 특강이름)는 교수를 결정하고 있다.

이 때 교수는 특강이름을 결정하고 있는데, 교수는 특강이름을 결정하는 결정자이지만 후보키는 될 수 없다.

따라서 다음과 같이 특강신청 테이블과 특강교수 테이블로 분해하여 BCNF 정규화를 만족시킬 수 있다.

 

 

 

출처