데이터베이스 정규화란, 중복을 최소화
하게 데이터를 구조화하는 프로세스를 정규화라고합니다.
예시를 들어 설명해보겠습니다.
우리가 소설 작가가 되었다고 생각해봅니다.
주인공의 이름은 홍길동
입니다. 몇백페이지 분량의 소설을 작성했는데 마감일 하루전에 주인공 이름을 바꿔달라고 요청이왔습니다. 만약 홍길동
이라는 동명이인의 등장인물마저 있다면 전체 검색 후 변경하는 방법은 쓰지 못합니다. 다른 방법으로, 소설을 쓸때 주인공 이름을 홍길동
이라고 쓰지않고 주인공모음집.1페이지.이름
으로 적습니다. 즉, 중복을 제거하고 한곳에서만 이름을 관리합니다.
홍길동은 웃었다. → {주인공모음집.1페이지.이름}은 웃었다.
주인공모음집 1페이지의 이름만 변경하면 되니 마감일전에도 쉽게 수정이 가능할 것입니다. 이렇게 한곳에서 원본 데이터를 관리하면 수많은 데이터 변경이 일어나도 데이터의 부정합이 일어나지 않습니다. 하지만 매번 주인공의 이름을 읽기위해서는 주인공모음집 1페이지의 이름을 따라가서 봐야합니다.
테이블 설계 관점에서 조회와 쓰기 사이의 트레이드 오프를 하는 행위이다. 조회와 쓰기 둘 중 어떤것에 중점을 두느냐에 따라서 데이터나 아키텍처의 모습이 많이 달라집니다. 그리고 조회와 쓰기에는 서로 상당히 다른 최적화 기법이 들어가게 됩니다. 항상 조회와 쓰기를 분리해서 생각하는 습관을 들여야합니다.
앞에서 정규화는 데이터 쓰기에 이점을 얻기위해 조회의 성능을 희생한 케이스입니다. 비정규화는 이와 반대로 읽기 성능을 얻기위해 쓰기의 성능을 어느정도 감소하는 케이스입니다.
{주인공모음집.1페이지.이름}은 웃었다. → 홍길동은 웃었다.
정규화
비정규화