데이터베이스 정규화 (Database Normalization)

컴퓨터과학·AI
한 줄 정의: 같은 데이터가 여러 곳에 중복 저장되지 않도록 표를 여러 개로 나누어 정리하는 데이터베이스 설계 방법입니다.

쉽게 풀면

학생 명단 표에 이름, 학번뿐 아니라 "담임 선생님 전화번호"까지 모든 학생 줄마다 똑같이 적어 넣는다고 생각해 봅시다. 같은 반 학생이 30명이면 담임 선생님 전화번호도 30번 똑같이 반복해서 적히게 되고, 선생님 번호가 바뀌면 30줄을 전부 고쳐야 합니다. 정규화는 이런 낭비와 실수를 막기 위해, "학생 정보"와 "담임 선생님 정보"를 서로 다른 표로 분리하고 학번이나 반 번호로 서로 연결해 두는 작업입니다. 이렇게 하면 선생님 전화번호는 딱 한 곳에만 저장되어 있어서, 수정할 때도 한 번만 고치면 되고 데이터가 서로 어긋날 위험도 줄어듭니다. 다만 표를 너무 잘게 나누면 정보를 조회할 때 여러 표를 다시 연결해야 해서 오히려 느려질 수도 있습니다.

왜 중요한가

데이터가 여러 곳에 중복 저장되면 값이 서로 어긋나거나 수정이 누락되는 오류가 발생하기 쉬워, 시스템의 신뢰성이 떨어집니다. 정규화는 이러한 문제를 구조적으로 예방하는 설계 원칙이기 때문에, 정보시스템·소프트웨어 공학 분야 논문에서 데이터베이스 설계의 타당성을 설명할 때 근거로 자주 제시됩니다. 또한 정규화 수준은 시스템의 데이터 무결성뿐 아니라 이후 성능 최적화 논의와도 연결되어, 조회 속도를 고려한 역정규화 결정의 출발점이 되기도 합니다.

논문에서는 이렇게 쓰입니다

"본 연구에서 제안한 스키마는 제3정규형(3NF)까지 정규화를 수행하여 데이터 중복과 갱신 이상을 최소화하였다."

이 문장은 정보시스템이나 데이터베이스 설계를 다루는 논문의 방법론 부분에서, 제안한 데이터 구조가 얼마나 체계적으로 설계되었는지를 보여줄 때 쓰입니다. 정규화 수준은 시스템의 데이터 무결성과 성능을 논할 때 근거로 자주 인용됩니다.

"병원 정보시스템의 환자·처방·진료 기록을 별도의 표로 분리하고 외래키로 연결함으로써, 동일 환자의 정보가 여러 표에서 불일치하는 문제를 방지하였다."

의료정보시스템 연구에서 정규화를 통해 환자 데이터의 일관성을 보장하고 오류를 줄였다는 뜻입니다.

"전자상거래 플랫폼의 주문 데이터베이스를 정규화하는 과정에서 발생한 조인 연산 증가를 완화하기 위해, 조회 빈도가 높은 일부 테이블에는 선택적으로 역정규화를 적용하였다."

실무 시스템 설계 연구에서 정규화의 장점을 유지하면서도 성능 문제를 보완하기 위해 일부 구간에만 역정규화를 적용했다는 서술입니다.

조금 더 깊게 보면

정규화는 흔히 제1정규형부터 제3정규형, 그리고 보이스-코드 정규형(BCNF) 등 단계별 기준으로 설명되며, 각 단계는 특정 종류의 데이터 중복이나 이상 현상(삽입·수정·삭제 이상)을 제거하는 조건으로 정의됩니다. 정규화 수준이 높아질수록 데이터 무결성은 좋아지지만 여러 표를 연결하는 조인 연산이 늘어나 조회 성능이 떨어질 수 있어, 실무에서는 무결성과 성능 사이의 균형을 고려해 의도적으로 일부만 역정규화하는 경우가 흔합니다. 이러한 결정은 시스템의 읽기·쓰기 비율이나 데이터 규모에 따라 달라집니다.

주의할 점

정규화를 많이 할수록 무조건 좋은 것은 아닙니다. 실무에서는 조회 속도를 높이기 위해 일부러 데이터를 중복시키는 "역정규화"를 적용하기도 하므로, 상황에 맞는 균형이 필요합니다. 이러한 데이터 저장 구조는 해시테이블 같은 인덱스 자료구조와 함께 설계될 때가 많습니다.

관련 용어