1. 정규화 - 시작

데이터베이스 설계에서 정규화(Normalization) 는 가장 핵심적인 개념 중 하나이다. 정규화는 다음과 같은 목표를 가진다.

한마디로, 잘 설계된 데이터베이스를 만들기 위한 체계적인 절차가 바로 정규화이다.

우리는 앞에서 이미 memberproductordersorder_item 같은 테이블을 잘 분리해서 설계했다. 그런데 이런 의문이 생긴다.

굳이 테이블을 이렇게 여러 개로 나눌 필요가 있을까? 그냥 한 테이블에 다 집어넣으면 더 편하지 않을까?

이 질문에 답하기 위해, 일부러 재앙적인 설계에서 시작해서 점차 정규화를 적용해 나가는 과정을 밟아본다. 이 과정을 통해 정규화의 필요성을 몸으로 체감하게 된다.


1-1. 정규화(Normalization)라는 용어

정규화는 관계형 데이터베이스의 창시자인 에드거 F. 커드(Edgar F. Codd) 가 처음 제안한 개념이다. 수학과 논리학에서 사용하는 정규형(Normal Form) 개념에서 영감을 받았다.

데이터베이스 정규화도 마찬가지이다.

정규화(Normalization) 는 데이터를 정규형(Normal Form) 이라는 규칙에 맞추어 변환해 나가는 과정이다.

이렇게 하면 데이터가 중복되지 않고, 일관성과 무결성을 유지하며, 각종 이상 현상(Anomaly) 을 방지할 수 있다. 여기서 "정규"는 정규형 조건을 만족한 이상적인 상태를 의미한다.


1-2. 문제 상황: 하나의 거대한 테이블

쇼핑몰의 모든 주문 관련 데이터를 하나의 테이블에 몰아 넣는다고 가정해 보자. 예를 들어 이름부터 재앙적인 느낌이 나는 테이블을 하나 만든다.