함수적 종속성으로 정규화와 후보키를 설계하는 법

함수적 종속성의 유형과 암스트롱 공리, 정규화, 후보키와 클로저 계산, 최소 커버를 데이터베이스 설계 관점에서 정리한다.

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

같은 값을 가진 행이 항상 같은 결과를 내는 관계

함수적 종속성(Functional Dependency)은 관계형 데이터베이스에서 속성 사이의 제약을 표현하는 개념이다. 속성 집합 X가 다른 속성 집합 Y를 결정하면 X → Y로 쓴다. 이때 X는 결정자(Determinant), Y는 종속자(Dependent)다.

같은 릴레이션에서 X 값이 같을 때 Y 값도 언제나 같아야 한다. 다시 말해 X의 값만 알면 Y의 값을 유일하게 정할 수 있을 때, Y는 X에 함수적으로 종속된다.

정규화 판단에 쓰이는 종속 관계

완전 함수적 종속성

Y가 X 전체에 종속되고 X의 어떤 부분집합만으로는 결정되지 않는 관계다. 학생 릴레이션에서 (학번, 과목코드) → 성적이 이에 해당한다. 성적을 결정하려면 학번과 과목코드가 모두 필요하다.

부분 함수적 종속성

복합 결정자의 일부 속성만으로 Y가 결정되는 경우다. 예를 들어 (학번, 과목코드) → 학생이름이라는 관계에서 학생이름은 학번만으로도 결정할 수 있다.

이행적 함수적 종속성

X → Y이고 Y → Z일 때 X → Z가 성립하는 관계다. 학번이 학과코드를 결정하고, 학과코드가 학과명을 결정하면 학번은 학과명도 결정한다.

다치 종속성

결정자 하나의 값에 여러 종속자 값이 연결되는 관계이며 X →→ Y로 표기한다.

종속성을 추론하는 암스트롱 공리

암스트롱의 공리(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 → YX → Z
  • 유사이행 규칙(Pseudo-Transitivity): X → Y이고 WY → Z이면 WX → Z

학생과 수강 정보에서 보이는 종속성

부분 함수적 종속성완전 함수적 종속성이행적 종속성학번학생이름학과코드학과명학년학번과목코드성적

함수적 종속성은 정규화의 이론적 기반이다. 각 정규형은 특정 종속성 제약을 만족하도록 릴레이션을 정리한다.

  • 제1정규형(1NF)은 모든 속성 값이 원자값(Atomic Value)을 가져야 한다. 복합 속성, 다중값 속성, 중첩 릴레이션을 제거한다.
  • 제2정규형(2NF)은 1NF를 만족하면서 부분 함수적 종속성을 제거한 형태다. 모든 비주요 속성은 기본키에 완전 함수적으로 종속되어야 한다.
  • 제3정규형(3NF)은 2NF를 만족하면서 이행적 함수적 종속성을 제거한다. 비주요 속성은 기본키에 비이행적으로 종속되어야 한다.
  • BCNF(Boyce-Codd Normal Form)는 모든 결정자가 후보키여야 하며, 3NF보다 엄격한 조건이다.

학생수강 릴레이션을 분리하는 기준

학생수강(학번, 학생이름, 과목코드, 과목명, 담당교수, 성적)을 보면 다음 함수적 종속성을 찾을 수 있다.

  • 학번 → 학생이름
  • 과목코드 → 과목명, 담당교수
  • (학번, 과목코드) → 성적

여기에는 (학번, 과목코드) → 학생이름의 부분 함수적 종속성과 학번 → 학생이름의 이행적 함수적 종속성이 있다. 이를 기준으로 학생, 과목, 수강 정보를 나눌 수 있다.

학생수강학번, 학생이름, 과목코드,과목명, 담당교수, 성적학생학번, 학생이름과목과목코드, 과목명, 담당교수수강학번, 과목코드, 성적

클로저로 후보키를 확인하기

속성 집합 K가 릴레이션의 모든 속성을 함수적으로 결정하면 K는 후보키가 된다. 함수적 종속성 집합 F를 이용해 K⁺(K의 클로저)를 계산하면 이를 판단할 수 있다.

클로저는 속성 집합 자체에서 시작한다. 함수적 종속성 Y → Z에서 Y가 현재 클로저에 포함되면 Z를 추가하고, 더 이상 추가할 속성이 없을 때까지 이 과정을 반복한다.

학생수강 예제의 함수적 종속성 집합은 다음과 같다.

  • F = {학번 → 학생이름, 과목코드 → 과목명, 과목코드 → 담당교수, (학번, 과목코드) → 성적}
  • (학번, 과목코드)⁺ = {학번, 과목코드, 학생이름, 과목명, 담당교수, 성적}

따라서 (학번, 과목코드)는 후보키다.

종속성 집합을 최소 커버로 정리하기

최소 커버(Minimal Cover)는 동등한 함수적 종속성 집합 가운데 가장 간결한 형태다. 불필요한 속성과 중복된 함수적 종속성을 제거해 만든다.

도출할 때는 오른쪽 항을 단일 속성으로 분해하고, 왼쪽 항에서 불필요한 속성을 제거한 뒤, 중복된 함수적 종속성을 없앤다.

설계와 운영에서의 활용 범위

함수적 종속성 분석은 데이터 무결성 제약조건을 정의하고 데이터 이상(Anomaly) 현상을 예방하는 데 쓰인다. 데이터베이스 설계에서는 이를 바탕으로 정규화해 중복을 줄이고, 저장 공간 효율화와 데이터 일관성을 확보할 수 있다.

쿼리 측면에서는 함수적 종속성을 이용해 조인 연산을 최적화하고 불필요한 속성 접근을 줄일 수 있다.

추론 과정 예시

다음 릴레이션과 함수적 종속성 집합을 가정한다.

  • R(A, B, C, D, E)
  • F = {A → BC, CD → E, B → D, E → A}
  • (AB)⁺ = ?

(AB)⁺는 다음 순서로 확장된다.

  1. (AB)⁺ = {A, B}
  2. A → BC 적용: (AB)⁺ = {A, B, C}
  3. B → D 적용: (AB)⁺ = {A, B, C, D}
  4. CD → E 적용: (AB)⁺ = {A, B, C, D, E}
  5. 최종 (AB)⁺ = {A, B, C, D, E}

실제 데이터와 업무 규칙을 함께 검증하기

실제 데이터 샘플을 분석하면 함수적 종속성 후보를 찾을 수 있으며, 대규모 데이터셋에서는 통계적 방법을 활용한다. 다만 데이터에서 보이는 관계만으로 제약을 확정할 수는 없다.

도메인 전문가의 지식을 바탕으로 종속성을 정의하고, 업무 프로세스를 분석해 데이터 관계를 확인해야 한다. ERD(Entity-Relationship Diagram)에서는 식별자와 비식별자 관계로 나타낼 수 있고, 속성 간 종속성은 제약조건으로 정의한다.

IBM InfoSphere, ERwin Data Modeler 등은 함수적 종속성 분석을 지원하며, 스키마 분석 및 정규화 도구도 활용할 수 있다.

함수적 종속성만으로 표현하기 어려운 제약

함수적 종속성은 현실 세계의 모든 제약조건을 표현하기 어렵고, 시간에 따라 변하는 함수적 종속성을 처리하기도 어렵다.

이런 경우 다치 종속성(MVD), 조인 종속성(JD) 등 확장된 개념을 사용할 수 있다. NoSQL 데이터베이스에서는 다른 형태의 데이터 모델링 방식을 적용한다.

함수적 종속성데이터베이스 정규화후보키암스트롱 공리최소 커버