정규화(Normalization)는 데이터베이스에서 데이터의 중복을 최소화하고, 일관성을 유지하기 위해 데이터를 여러 개의 관계형 테이블로 나누는 과정이다. 이를 통해 데이터 무결성을 보장하고, 삽입/수정/삭제 시 발생할 수 있는 이상(anomaly)을 방지할 수 있다.
정규화는 보통 1NF(제1정규형)부터 5NF(제5정규형)까지 있으며, 일반적으로 3NF(제3정규형) 또는 BCNF(Boyce-Codd Normal Form)까지 수행한다.
| 주문 ID | 고객 이름 | 고객 주소 | 상품 ID | 상품명 | 가격 |
|---|---|---|---|---|---|
| 1 | 홍길동 | 서울시 강남구 | 101 | 노트북 | 1,500,000 |
| 2 | 홍길동 | 서울시 강남구 | 102 | 키보드 | 50,000 |
| 3 | 이순신 | 부산시 해운대구 | 101 | 노트북 | 1,500,000 |
고객 테이블
| 고객 ID | 고객 이름 | 고객 주소 |
|---|---|---|
| 1 | 홍길동 | 서울시 강남구 |
| 2 | 이순신 | 부산시 해운대구 |
상품 테이블
| 상품 ID | 상품명 | 가격 |
|---|---|---|
| 101 | 노트북 | 1,500,000 |
| 102 | 키보드 | 50,000 |
주문 테이블
| 주문 ID | 고객 ID | 상품 ID |
|---|---|---|
| 1 | 1 | 101 |
| 2 | 1 | 102 |
| 3 | 2 | 101 |
이렇게 정규화를 하면 데이터 중복을 줄이고 무결성을 유지할 수 있다.
역정규화(Denormalization)는 성능 향상을 위해 정규화된 데이터베이스를 다시 합치는 과정이다. 즉, 데이터 중복을 허용하고 테이블을 조인하는 비용을 줄여 성능을 개선하는 방법이다.
| 주문 ID | 고객 ID | 고객 이름 | 고객 주소 | 상품 ID | 상품명 | 가격 |
|---|---|---|---|---|---|---|
| 1 | 1 | 홍길동 | 서울시 강남구 | 101 | 노트북 | 1,500,000 |
| 2 | 1 | 홍길동 | 서울시 강남구 | 102 | 키보드 | 50,000 |
| 3 | 2 | 이순신 | 부산시 해운대구 | 101 | 노트북 | 1,500,000 |
이 경우, 고객 정보를 가져오기 위해 고객 테이블과 주문 테이블을 조인해야 한다.
| 주문 ID | 고객 ID | 고객 이름 | 고객 주소 | 상품명 | 가격 |
|---|---|---|---|---|---|
| 1 | 1 | 홍길동 | 서울시 강남구 | 노트북 | 1,500,000 |
| 2 | 1 | 홍길동 | 서울시 강남구 | 키보드 | 50,000 |
| 3 | 2 | 이순신 | 부산시 해운대구 | 노트북 | 1,500,000 |
이렇게 하면 조인 없이 데이터를 빠르게 조회할 수 있지만, 고객 정보가 중복 저장되기 때문에 고객의 주소가 변경될 경우 모든 레코드를 수정해야 한다는 단점이 있다.
| 기준 | 정규화 | 역정규화 |
|---|---|---|
| 데이터 중복 | 최소화 | 증가 |
| 데이터 무결성 | 강함 | 낮아질 수 있음 |
| 조인 연산 | 많음 | 줄어듦 |
| 조회 성능 | 느려질 수 있음 | 빨라질 수 있음 |
| 유지보수성 | 용이함 | 어려울 수 있음 |
정규화와 역정규화는 데이터베이스 설계에서 중요한 개념이며, 각각의 장단점이 존재한다. 일반적으로 정규화를 기본으로 적용하되, 성능 최적화를 위해 필요한 경우에 한해 역정규화를 신중히 고려하는 것이 좋다. 상황에 따라 적절한 방법을 선택하여 데이터베이스를 효율적으로 운영하는 것이 중요하다.