데이터베이스 함수 종속성(Functional Dependency)

DB물리DB 설계정규화
읽는데 4분 소요
처음 쓰여진 날: 2025-09-21
마지막 수정일: 2025-10-18

요약

데이터베이스 정규화의 핵심 개념인 함수 종속성에 대해 알아봅니다. 완전 함수 종속, 부분 함수 종속, 이행 함수 종속의 개념과 구체적인 예시를 통해 정규화 과정을 이해해봅니다.

함수 종속성(Functional Dependency)이란?

정규화를 이해하기 위해선 함수 종속성 개념을 먼저 알아야 합니다.

어떤 릴레이션에서 속성 A의 값이 속성 B의 값을 유일하게 결정할 때, "속성 B는 속성 A에 함수적으로 종속된다"고 말하며, A → B로 표기합니다. 여기서 A를 결정자(Determinant), B를 종속자(Dependent) 라고 합니다.

함수 종속성의 유형

완전 함수 종속 (Full Functional Dependency)

기본키 전체에 대해서만 종속되며, 기본키의 일부에는 종속되지 않는 경우입니다. 제2정규형(2NF)의 핵심 개념입니다.

완전 함수 종속
완전 함수 종속은 누가 어디에 사는지 알고 싶을때 해당합니다. 기본키가 아파트 단지, 동, 호수일때, 김철수가 사는 곳을 알려면 단지, 동, 호수가 전부 필요하죠.

부분 함수 종속 (Partial Functional Dependency)

기본키(복합 기본키12)34의 일부 속성에 종속되는 경우입니다. 이는 2NF에서 제거되어야 하는 종속성입니다.

부분 함수 종속 감자
부분 함수 종속은 아파트 관리인이 어느 단지를 관리하고 있는지 알고 싶을때 해당합니다. 기본키가 아파트 단지, 동, 호수일때, 아파트 관리인이 관리하는 단지를 알기 위해선 단지만 알면 그만입니다.

이행 함수 종속 (Transitive Functional Dependency)

A → B이고 B → C일 때, A → C가 성립하는 관계입니다. 제3정규형(3NF)의 핵심 개념입니다.


함수 종속성 예시

1. 기본적인 함수 종속성

학번이름입학년도
13-1001김철수2013
14-1002이영희2014
12-1003박민준2012
  • 학번 → 이름 : 학번이 결정되면 이름이 유일하게 결정됩니다.(학번 = 결정자, 이름 = 종속자)
  • 학번 → 입학년도 : 학번 앞 2자리가 입학년도(20xx년의 뒤 2자리)를 나타내므로 유일하게 결정됩니다.(학번 = 결정자, 입학년도 = 종속자)

2. 완전 함수 종속 vs 부분 함수 종속

[수강 테이블 - 기본키: (학번, 과목코드)]

학번과목코드과목명교수명성적
13-1001CS101자료구조김교수A+
13-1001CS202알고리즘이교수A0
14-1002CS101자료구조김교수B+
  • 완전 함수 종속: (학번, 과목코드) → 성적 - 기본키 전체에 종속
  • 부분 함수 종속: 과목코드 → 과목명, 과목코드 → 교수명 - 기본키 일부(과목코드)에만 종속

문제점: 부분 함수 종속으로 인해 이상 현상이 발생할 수 있습니다.

3. 이행 함수 종속

[학생 테이블]

학번이름학과코드학과명
13-1001김철수CS컴퓨터과학
14-1002이영희EE전자공학
12-1003박민준CS컴퓨터과학

함수 종속 관계:

  • 학번 → 학과코드 (기본키인 학번이 학과코드를 결정)
  • 학과코드 → 학과명 (학과코드가 학과명을 결정)
  • 이행 함수 종속: 학번 → 학과명 (학번 → 학과코드 → 학과명)

문제점: 이행 함수 종속으로 인해 데이터 중복과 이상 현상이 발생할 수 있습니다.


함수 종속성과 정규화

함수 종속성은 각 정규형에서 다음과 같이 활용됩니다:

  • 2NF: 부분 함수 종속을 제거하여 완전 함수 종속만 남김
  • 3NF: 이행 함수 종속을 제거
  • BCNF: 모든 결정자가 후보키가 되도록 함

연습 문제


Footnotes

  1. 복합 기본키는 두 개 이상의 속성으로 구성된 기본키를 의미합니다. 예를 들어, (학번, 과목코드)가 기본키인 경우, 학번 또는 과목코드 중 하나만으로는 튜플을 유일하게 식별할 수 없습니다.

  2. 당연하게도 기본키가 단일 속성인 경우는 일부 속성에 종속될 수 없기 때문에 부분 함수 종속이 발생하지 않습니다.

  3. 학술적으로는 후보키의 일부 속성에 종속되면 모두 부분 함수 종속이라고 합니다.(위키피디아 - Second Normal Form 참고)

  4. 하지만, 실무에서는 선택된 후보키(즉, 기본키)를 중심으로 정규화를 설명하는 경우가 많습니다. 따라서 기본키의 일부 속성에 종속되는 경우를 부분 함수 종속이라고 알고 계시는 것이 좋습니다.