본문 바로가기
DB

DB Normalization(정규화)

by 차가운개발 2024. 10. 10.

 

DB 정규화는 데이터베이스 설계에서 중복을 최소화하고 데이터의 무결성을 보장하기 위해 데이터베이스 테이블을 체계적으로 구조화하는 과정이다. 데이터를 논리적으로 분할하고, 데이터가 중복되거나 불필요하게 저장되지 않도록 테이블을 구성하는 것을 목표로한다.

 

ㅇ 정규화 단계

제 1 정규화

모든 컬럼의 값이 원자값(더 이상 나눌 수 없는 값)을 가지도록 테이블을 구성한다. 하나의 칸에 여러 값이 들어가 있는 경우가 없어야한다.

 

 

 

제 2 정규화

1 정규화를 만족하면서 기본키의 부분집합에 종속된 컬럼들을 제거한다. 기본키의 일부에만 의존하는 컬럼을 별도의 테이블로 분리한다.

 

학번 강좌명 강의실 성적
101 데이터베이스 101호 A
102 데이터베이스 101호 B
103 자료구조 103호 A

 

예를 들어 위와 같은 테이블이 존재한다. 이 테이블의 기본 키는 (학번과 강좌명) 복합키다. 

기본키(학번과 강좌명)이 성적을 결정하고 있다.

강의실이라는 컬럼은 기본키의 부분집합인 강좌명에 의해 결정될 수 있다. 

즉 기본키의 일부인 강좌명에만 의존하는 강의실 컬럼을 분리하여 별도의 테이블로 관리하여 2 정규형을 만족시킨다.

학번 강좌명 성적
101 데이터베이스 A
102 데이터베이스 B
103 자료구조 A

 

강좌명 강의실
데이터베이스 101호
데이터베이스 101호
자료구조 103호

 

 

 

제 3 정규화

제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해한다. 기본 키가 아닌 컬럼이 다른 기본 키가 아닌 컬럼에 종속되지 않도록 하여 독립적으로 관리한다.

 

회원번호 도서명 가격
100 A도서 10000
101 B도서 20000
102 C도서 15000

 

예를 들어 위와 같은 테이블이 존재한다. 이 테이블의 회원번호는 도서명을 결정하고 있고, 도서명은 가격을 결정하고 있다. 이행적 종속이기 때문에 테이블을 분해하여 제거한다. 100번 회원이 B도서를 구매한다고 가정해보자 그렇다면 100번 회원은 B도서를 만 원에 구매할 수 있게된다. 가격을 변경할 수 있지만 이러한 번거로움을 해결하기 위해 3 정규화를 하는 것이다.

 

회원번호 도서명
100 A도서
101 B도서
102 C도서
도서명 가격
A도서 10000
B도서 20000
C도서 15000

 

 

BCNF 정규화

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

 

 

ㅇ 정규화의 장단점

장점

  • 데이터 중복 최소화
    중복된 데이터를 제거하여 저장 공간 절약
  • 데이터 무결성 보장
    데이터의 일관성을 유지, 잘못된 데이터가 저장되는 것을 방지
  • 변경 시 유연성 향상
    데이터 수정, 삭제 시 변경 작업 간소화

단점

  • 복잡한 쿼리
    과도한 정규화는 테이블 간 조인이 증가하여 복잡한 쿼리가 발생할 수 있음
  • 성능 저하
    조인 연산이 많아지면, 읽기 성능이 저하될 수 있다

'DB' 카테고리의 다른 글

DB Stored Procedure 저장 프로시저  (0) 2024.10.10
DB 이상현상(Anomaly)  (2) 2024.10.10
DB Join(조인)  (0) 2024.10.10
DB Key  (0) 2024.10.04
DB SQL Injection  (0) 2024.10.04