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 |