데이터베이스 이상현상과 정규화 설계

삽입·갱신·삭제 이상현상의 원인과 함수적 종속성, 정규화 및 비정규화 균형을 데이터베이스 설계 관점에서 정리한다.

2026-08-15 · 최초 발행 2025-08-10

하나의 테이블에 섞인 사실이 만드는 문제

이상현상(Anomaly)은 데이터 모델링이 충분하지 않은 상태에서 발생하는 비합리적인 데이터 처리 현상이다. 주된 원인은 데이터 중복과 부적절한 함수적 종속성이며, 결과적으로 데이터베이스의 일관성·무결성·효율성에 영향을 준다.

대표적인 형태는 삽입 이상(Insertion Anomaly), 갱신 이상(Update Anomaly), 삭제 이상(Deletion Anomaly)이다. 이 문제가 남아 있으면 데이터 신뢰성이 낮아지고 관리 비용도 커진다.

삽입할 수 없는 정보

삽입 이상은 특정 튜플을 넣기 위해 관계없는 데이터까지 함께 입력해야 하는 경우다. 학생과 과목 정보를 한 테이블에 저장한다고 하자.

학생_과목(학번, 이름, 과목코드, 과목명, 성적)

새 과목을 개설하려 해도 수강 학생 정보가 없으면 과목 정보만 저장할 수 없다. 과목이라는 사실이 학생의 수강 정보에 묶여 있기 때문이다.

일부만 바뀌는 정보

갱신 이상은 중복된 값 가운데 일부만 수정돼 데이터가 서로 달라지는 현상이다.

교수_과목(교수번호, 교수명, 과목코드, 과목명)

과목명이 바뀌면 해당 과목을 담당하는 모든 교수 레코드의 과목명을 수정해야 한다. 한 레코드라도 빠지면 같은 과목에 서로 다른 이름이 남는다.

삭제와 함께 사라지는 사실

삭제 이상은 필요 없는 데이터를 지우는 과정에서 보존해야 할 정보까지 함께 없어지는 문제다.

학과_학생(학과코드, 학과명, 학번, 학생명)

특정 학과에 학생이 한 명만 남은 상태에서 학생 정보를 삭제하면 학과 정보도 같이 사라진다.

중복과 종속 관계를 먼저 점검해야 한다

같은 정보가 여러 곳에 반복 저장되면 저장 공간만 늘어나는 것이 아니라, 수정 시점마다 일관성을 맞춰야 하는 부담도 생긴다. 이 데이터 중복(Data Redundancy)이 이상현상의 직접적인 기반이 된다.

속성 간 함수적 종속성(Functional Dependency)을 적절히 정의하지 못한 경우도 문제를 키운다. 한 릴레이션에 함께 두기 어려운 종속 관계가 섞이면 삽입·갱신·삭제 과정에서 데이터가 서로 얽힌다.

비정규화 구조에서는 서로 다른 사실이 같은 행에 반복되면서 이 경로가 더 뚜렷해진다. 새 사실을 등록할 때 기존 사실까지 요구받고, 중복된 값을 수정할 때 일부 행이 빠지며, 한 사실을 삭제할 때 다른 사실까지 함께 사라진다. 그 결과 데이터 일관성이 깨지고 무결성 제약조건을 위반할 수 있다.

데이터 중복이상현상 발생부적절한 함수적 종속성삽입 이상갱신 이상삭제 이상

정규화로 릴레이션의 책임을 나눈다

정규화(Normalization)는 이상현상을 줄이기 위해 릴레이션을 분해하고, 중복과 함수적 종속성을 정리하는 방법이다.

  • 제1정규형(1NF): 모든 속성값이 원자값(Atomic Value)이어야 한다.
  • 제2정규형(2NF): 1NF를 만족하고 부분 함수적 종속을 제거한다.
  • 제3정규형(3NF): 2NF를 만족하고 이행적 함수적 종속을 제거한다.
  • 보이스-코드 정규형(BCNF): 3NF를 만족하며 모든 결정자가 후보키여야 한다.
  • 제4정규형(4NF): BCNF를 만족하고 다치 종속성을 제거한다.
  • 제5정규형(5NF): 4NF를 만족하고 조인 종속성을 제거한다.

일반적으로 제3정규형(3NF)까지 정규화하면 대부분의 이상현상을 해결할 수 있다.

학생·과목 관계를 분해하는 방식

다음과 같이 학생, 학과, 과목, 교수, 수강 정보를 하나의 테이블에 담으면 여러 사실이 중복된다.

학생_과목(학번, 학생명, 학과코드, 학과명, 과목코드, 과목명, 교수번호, 교수명, 성적)

이 구조에서는 새 과목을 만들 때 수강 학생이 필요하고, 교수명 변경 시 여러 레코드를 갱신해야 하며, 마지막 수강 학생 정보를 삭제하면 과목 정보까지 사라질 수 있다.

모든 속성이 이미 원자값이라면 1NF는 만족한다. 이후 부분 함수적 종속을 제거하는 2NF 분해는 다음과 같이 구성할 수 있다.

학생(학번, 학생명, 학과코드)
학과(학과코드, 학과명)
수강(학번, 과목코드, 성적)
과목(과목코드, 과목명, 교수번호)
교수(교수번호, 교수명)

이 결과는 이행적 종속도 제거돼 3NF 조건을 만족한다.

테이블을 분리하면 과목과 교수, 학생과 학과, 학생과 수강이라는 사실을 각각 등록·수정·삭제할 수 있다. 새 과목은 수강생이 없어도 관리할 수 있고, 교수명이나 학과명을 바꿀 때는 해당 정보를 가진 레코드만 수정하면 된다. 수강 정보를 삭제해도 과목과 학생 정보는 별도로 남는다.

이 차이는 다른 운영 데이터에서도 같다. 고객 정보와 주문 정보를 단일 테이블에 두면 고객 정보 변경 때 모든 주문 레코드를 수정해야 하지만, 고객과 주문 테이블을 나누면 변경 대상을 분리할 수 있다. 상품 정보와 재고 정보를 함께 관리해 재고가 없는 상품을 등록하기 어려운 경우에도 상품 마스터와 재고 테이블을 분리해 대응할 수 있다. 데이터 조작 과정의 오류를 줄이고 데이터 품질을 높이는 일은 유지보수 비용과 의사결정의 정확성에도 영향을 준다.

RegistersBelongs toOfferedTeachesStudentintStudentIDPKstringStudentNameintDepartmentCodeFKEnrollmentintStudentIDPK,FKintCourseCodePK,FKfloatGradeDepartmentintDepartmentCodePKstringDepartmentNameCourseintCourseCodePKstringCourseNameintProfessorIDFKProfessorintProfessorIDPKstringProfessorName

함수적 종속성을 다루는 암스트롱 공리

암스트롱 공리(Armstrong's Axioms)는 함수적 종속성을 추론하는 규칙이며, 정규화의 이론적 기반이다.

기본 공리는 다음과 같다.

  • 반사 규칙(Reflexivity): Y가 X의 부분집합이면 X → Y
  • 증가 규칙(Augmentation): X → Y이면 XZ → YZ
  • 이행 규칙(Transitivity): X → Y이고 Y → Z이면 X → Z

이 공리에서 다음 규칙도 유도할 수 있다.

  • 합집합 규칙(Union): X → Y이고 X → Z이면 X → YZ
  • 분해 규칙(Decomposition): X → YZ이면 X → Y와 X → Z
  • 의사이행 규칙(Pseudo-transitivity): X → Y이고 WY → Z이면 WX → Z

정규화 수준은 접근 방식과 함께 결정한다

정규화는 이상현상을 줄이지만, 지나친 분해는 조인 연산을 늘려 성능 저하로 이어질 수 있다. 실제 설계에서는 읽기 중심인지 쓰기 중심인지, 데이터 볼륨에서 조인 비용이 어느 정도인지, 실시간 처리 요구사항이 있는지, 사용할 수 있는 하드웨어 자원이 무엇인지를 함께 검토해야 한다.

읽기 중심 환경에서는 비정규화가 유리할 수 있고, 쓰기 중심 환경에서는 정규화가 유리하다. 이상현상을 이해하는 일은 정규화를 기계적으로 적용하는 데 있지 않다. 데이터의 종속 관계와 시스템 요구사항을 함께 보고, 신뢰성과 성능 사이의 균형을 정하는 데 있다.

데이터베이스정규화이상현상함수적 종속성데이터 모델링