데이터베이스 정규화 (Database Normalization)
쉽게 풀면
학생 명단 표에 이름, 학번뿐 아니라 "담임 선생님 전화번호"까지 모든 학생 줄마다 똑같이 적어 넣는다고 생각해 봅시다. 같은 반 학생이 30명이면 담임 선생님 전화번호도 30번 똑같이 반복해서 적히게 되고, 선생님 번호가 바뀌면 30줄을 전부 고쳐야 합니다. 정규화는 이런 낭비와 실수를 막기 위해, "학생 정보"와 "담임 선생님 정보"를 서로 다른 표로 분리하고 학번이나 반 번호로 서로 연결해 두는 작업입니다. 이렇게 하면 선생님 전화번호는 딱 한 곳에만 저장되어 있어서, 수정할 때도 한 번만 고치면 되고 데이터가 서로 어긋날 위험도 줄어듭니다. 다만 표를 너무 잘게 나누면 정보를 조회할 때 여러 표를 다시 연결해야 해서 오히려 느려질 수도 있습니다.
왜 중요한가
데이터가 여러 곳에 중복 저장되면 값이 서로 어긋나거나 수정이 누락되는 오류가 발생하기 쉬워, 시스템의 신뢰성이 떨어집니다. 정규화는 이러한 문제를 구조적으로 예방하는 설계 원칙이기 때문에, 정보시스템·소프트웨어 공학 분야 논문에서 데이터베이스 설계의 타당성을 설명할 때 근거로 자주 제시됩니다. 또한 정규화 수준은 시스템의 데이터 무결성뿐 아니라 이후 성능 최적화 논의와도 연결되어, 조회 속도를 고려한 역정규화 결정의 출발점이 되기도 합니다.
어떤 절차인가
- 하나의 표에 섞여 있는 사실들을 찾습니다. 예: 학생(학번, 이름, 반, 담임, 담임 전화).
- 어떤 값이 다른 값을 결정하는지(함수 종속)를 적습니다. 이 예에서는 학번 → 반, 반 → 담임, 담임 전화처럼 가정합니다.
- 한 표에 서로 다른 대상의 사실이 같이 있으면 표를 나눕니다: 학생(학번, 이름, 반)과 반(반, 담임, 담임 전화).
- 나눈 표를 키(학번, 반)로 연결합니다.
Codd(1970)는 n항 관계에 바탕을 둔 모델과 데이터베이스 관계의 정규형을 소개하고, 관계 연산을 중복과 일관성 문제에 적용했습니다. 정규형은 1정규형(1NF)에서 시작하는 단계적 기준으로 발전했고, Kent(1983)는 다섯 가지 주요 정규형의 개념을 쉬운 말로 정리했습니다. Fagin(1977)은 4정규형이 Codd의 “개선된 제3정규형”(보이스-코드 정규형)보다 엄격하며, 모든 관계 스키마를 정보 손실 없이 4정규형으로 분해할 수 있음을 보였습니다.
언제 쓰고 무엇을 얻나
쓰는 때는 업무 데이터를 오래 갱신하는 시스템(학사, 주문, 진료 기록)을 설계할 때입니다. 얻는 것은 세 가지 이상 현상(anomaly)의 방지입니다.
- 수정 이상: 담임 전화가 바뀌었는데 일부 행만 고쳐 값이 어긋남.
- 삭제 이상: 반의 마지막 학생을 지우면 담임 정보도 함께 사라짐.
- 삽입 이상: 학생이 없는 새 반의 담임 정보를 넣을 자리가 없음.
위 예에서 학번 → 반 → 담임 전화처럼 키가 아닌 값을 거쳐 결정되는 관계(이행 종속)가 있으면 3정규형을 만족하지 못하며, 표를 둘로 나누면 해소됩니다. 대신 조회할 때 두 표를 연결(조인)해야 하므로, 읽기 성능이 중요하면 일부러 중복을 허용하는 역정규화를 쓰기도 합니다.
논문에는 이렇게 적는다
- 어떤 정규형까지 적용했는지(예: 3NF 또는 BCNF)와 근거가 된 함수 종속 가정을 적습니다.
- 역정규화한 표가 있다면 어디를, 왜(예: 조회 빈도) 했는지, 중복 값의 일관성을 어떻게 유지하는지 적습니다.
- 정규화 전후 비교 연구라면 비교 지표(저장 공간, 질의 시간, 이상 현상 발생 수)를 정의합니다. “정규화했다”만으로 성능이 좋아진다고 쓰면 안 됩니다.
논문에서는 이렇게 쓰입니다
실제 논문에서
이 용어를 직접 쓴 국내 논문 문장을 아직 수집하지 못했습니다. 수집되는 대로 출처와 함께 싣겠습니다.
예시 문장
아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.
이 문장은 정보시스템이나 데이터베이스 설계를 다루는 논문의 방법론 부분에서, 제안한 데이터 구조가 얼마나 체계적으로 설계되었는지를 보여줄 때 쓰입니다. 정규화 수준은 시스템의 데이터 무결성과 성능을 논할 때 근거로 자주 인용됩니다.
의료정보시스템 연구에서 정규화를 통해 환자 데이터의 일관성을 보장하고 오류를 줄였다는 뜻입니다.
실무 시스템 설계 연구에서 정규화의 장점을 유지하면서도 성능 문제를 보완하기 위해 일부 구간에만 역정규화를 적용했다는 서술입니다.
조금 더 깊게 보면
정규화는 흔히 제1정규형부터 제3정규형, 그리고 보이스-코드 정규형(BCNF) 등 단계별 기준으로 설명되며, 각 단계는 특정 종류의 데이터 중복이나 이상 현상(삽입·수정·삭제 이상)을 제거하는 조건으로 정의됩니다. 정규화 수준이 높아질수록 데이터 무결성은 좋아지지만 여러 표를 연결하는 조인 연산이 늘어나 조회 성능이 떨어질 수 있어, 실무에서는 무결성과 성능 사이의 균형을 고려해 의도적으로 일부만 역정규화하는 경우가 흔합니다. 이러한 결정은 시스템의 읽기·쓰기 비율이나 데이터 규모에 따라 달라집니다.
주의할 점
정규화를 많이 할수록 무조건 좋은 것은 아닙니다. 실무에서는 조회 속도를 높이기 위해 일부러 데이터를 중복시키는 "역정규화"를 적용하기도 하므로, 상황에 맞는 균형이 필요합니다. 이러한 데이터 저장 구조는 해시테이블 같은 인덱스 자료구조와 함께 설계될 때가 많습니다.
헷갈리기 쉬운 용어
| 용어 | 한 줄 설명 | 무엇을 얻고 잃나 |
|---|---|---|
| 정규화 | 중복을 없애도록 표를 나누는 설계 | 일관성 향상, 조회 시 조인 증가 |
| 역정규화 | 조회 속도를 위해 일부러 중복을 허용 | 읽기 속도 향상, 일관성 관리 부담 |
| 데이터베이스 인덱스 | 표를 나누지 않고 검색 속도를 높이는 보조 구조 | 조회 속도 향상, 저장 공간·갱신 비용 증가 |
참고 문헌
- Codd, E. F. (1970). A relational model of data for large shared data banks. Communications of the ACM, 13(6), 377–387.
- Fagin, R. (1977). Multivalued dependencies and a new normal form for relational databases. ACM Transactions on Database Systems, 2(3), 262–278.
- Kent, W. (1983). A simple guide to five normal forms in relational database theory. Communications of the ACM, 26(2), 120–125.
표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.