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

컴퓨터과학·AI
한 줄 정의: 같은 데이터가 여러 곳에 중복 저장되지 않도록 표를 여러 개로 나누어 정리하는 데이터베이스 설계 방법입니다.
데이터베이스 정규화데이터베이스 정규화: 왼쪽 단일 표와 오른쪽 학생 표+담임 표를 비교한다. 학생마다 반복 대 한 곳에만 저장, 30줄 모두 수정 대 한 번만 수정, 표 하나로 조회 대 조인 필요.담임 전화번호를 어디에 저장하나단일 표정규화 전학생 표+담임 표정규화 · 키로 연결vs학생마다 반복30명이면 30번 저장한 곳에만 저장중복 없음30줄 모두 수정누락되면 값이 어긋남한 번만 수정불일치 위험 감소표 하나로 조회조인 필요잘게 나누면 느려짐한계많이 나눌수록 좋은 것은 아님 — 무결성과 조회성능의 균형을 보고 일부는 역정규화

쉽게 풀면

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

왜 중요한가

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

어떤 절차인가

  1. 하나의 표에 섞여 있는 사실들을 찾습니다. 예: 학생(학번, 이름, 반, 담임, 담임 전화).
  2. 어떤 값이 다른 값을 결정하는지(함수 종속)를 적습니다. 이 예에서는 학번 → 반, 반 → 담임, 담임 전화처럼 가정합니다.
  3. 한 표에 서로 다른 대상의 사실이 같이 있으면 표를 나눕니다: 학생(학번, 이름, 반)과 반(반, 담임, 담임 전화).
  4. 나눈 표를 키(학번, 반)로 연결합니다.

Codd(1970)는 n항 관계에 바탕을 둔 모델과 데이터베이스 관계의 정규형을 소개하고, 관계 연산을 중복과 일관성 문제에 적용했습니다. 정규형은 1정규형(1NF)에서 시작하는 단계적 기준으로 발전했고, Kent(1983)는 다섯 가지 주요 정규형의 개념을 쉬운 말로 정리했습니다. Fagin(1977)은 4정규형이 Codd의 “개선된 제3정규형”(보이스-코드 정규형)보다 엄격하며, 모든 관계 스키마를 정보 손실 없이 4정규형으로 분해할 수 있음을 보였습니다.

언제 쓰고 무엇을 얻나

쓰는 때는 업무 데이터를 오래 갱신하는 시스템(학사, 주문, 진료 기록)을 설계할 때입니다. 얻는 것은 세 가지 이상 현상(anomaly)의 방지입니다.

위 예에서 학번 → 반 → 담임 전화처럼 키가 아닌 값을 거쳐 결정되는 관계(이행 종속)가 있으면 3정규형을 만족하지 못하며, 표를 둘로 나누면 해소됩니다. 대신 조회할 때 두 표를 연결(조인)해야 하므로, 읽기 성능이 중요하면 일부러 중복을 허용하는 역정규화를 쓰기도 합니다.

논문에는 이렇게 적는다

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

실제 논문에서

이 용어를 직접 쓴 국내 논문 문장을 아직 수집하지 못했습니다. 수집되는 대로 출처와 함께 싣겠습니다.

예시 문장

아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.

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

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

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

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

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

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

조금 더 깊게 보면

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

주의할 점

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

헷갈리기 쉬운 용어

용어한 줄 설명무엇을 얻고 잃나
정규화중복을 없애도록 표를 나누는 설계일관성 향상, 조회 시 조인 증가
역정규화조회 속도를 위해 일부러 중복을 허용읽기 속도 향상, 일관성 관리 부담
데이터베이스 인덱스표를 나누지 않고 검색 속도를 높이는 보조 구조조회 속도 향상, 저장 공간·갱신 비용 증가

참고 문헌

  1. Codd, E. F. (1970). A relational model of data for large shared data banks. Communications of the ACM, 13(6), 377–387.
  2. Fagin, R. (1977). Multivalued dependencies and a new normal form for relational databases. ACM Transactions on Database Systems, 2(3), 262–278.
  3. Kent, W. (1983). A simple guide to five normal forms in relational database theory. Communications of the ACM, 26(2), 120–125.

표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.

관련 용어