변수의 기록

(데이터베이스) 설계의 기초: Functional Dependency 정리 본문

CS지식/데이터베이스 (Database)

(데이터베이스) 설계의 기초: Functional Dependency 정리

불광동 물주먹 2025. 5. 23. 01:56

데이터베이스 설계의 기초: Functional Dependency 정리

오늘은 DB 설계의 핵심 개념 중 하나인 **Functional Dependency (함수 종속성)**에 대해 정리해보겠습니다.
이 개념은 정규화(normalization) 과정의 기반이 되는 중요한 원리로, 테이블 구조의 논리적 정합성을 판단하는 기준이 됩니다.


✅ Functional Dependency란?

Functional Dependency(FD)는 하나의 테이블 내 속성들 사이의 의미적 제약 조건을 말합니다.
어떤 속성 집합 X가 있을 때, X의 값이 주어지면 Y의 값이 항상 유일하게 결정된다면,
이를 X → Y 라고 표현합니다.

예:

학생ID → 생년월일
(학생 ID가 같으면 생일도 같아야 한다)

 

 

 

❗ 중요한 점은 FD는 테이블의 현재 데이터(state)가 아니라 의미(semantics)를 기준으로 판단해야 합니다.
즉, 단순히 현재 테이블에 같은 값이 없다고 해서 종속이 존재한다고 볼 수는 없습니다.

 


✅ Functional Dependency의 구성 요소

함수 종속 표현 X → Y에서

  • X: Left side (결정자, determinant)
  • Y: Right side (종속자, dependent)

의미는 다음과 같습니다:

  • X의 값이 주어지면, 항상 Y의 값이 유일하게 결정된다.
  • 이 관계는 X가 Y를 결정한다는 의미이지, 반대는 일반적으로 성립하지 않음.

예시:

 
학생ID → 생일
  • 여기서 학생ID가 left side, 생일이 right side입니다.
  • 학생ID가 같으면 생일은 무조건 같아야 하지만,
  • 같은 생일을 가진 여러 학생이 있을 수 있으므로 생일 → 학생ID는 성립하지 않습니다.

💡 참고: FD는 “항상 한 개의 Y값을 가진다”는 의미

  • X → Y는 X에 대해 Y값이 항상 유일하게 존재한다는 의미지,
  • Y가 유일한 값을 갖는다는 말은 아님
  • 즉, {} → Y 는 테이블 전체에서 Y가 단 하나의 값을 갖는 경우만 성립 (거의 없음)

 

✅ FD의 방향성과 의미

  • X → Y 는 Y가 X에 함수적으로 종속된다는 의미입니다.
  • 반대는 성립하지 않습니다. 즉, Y → X는 일반적으로 성립하지 않습니다.
계좌번호 → 잔액       ✅
잔액 → 계좌번호       ❌ (여러 계좌가 같은 잔액일 수 있음)

✅ Trivial vs Non-Trivial FD

Trivial Functional Dependency (자명한 종속)

  • Y가 X의 부분집합인 경우
    예:
{a, b} → {b}
{a, b, c} → {a, b}

 

Non-Trivial Functional Dependency (비자명한 종속)

  • Y가 X의 일부 부분집합만 포함되는 경우 
    예:
{a, b} → {b,d}
{a,b,c} -> {b,c,d}

 

 

 

Non-Trivial Functional Dependency (비자명한 종속) &&  Completely Non-Trivial FD

  • Y가 X의 부분집합이 아닌 경우
    예:
{a,b,c} -> {d,e} 
{stu_id, class_id} → {grade}

 

Completely Non-Trivial FD는 X와 Y가 완전히 겹치지 않을 때를 말합니다.


✅ Partial vs Full Functional Dependency

이제 본질적인 구분인 Partial FD와 Full FD를 살펴봅니다.
이는 복합키(여러 속성으로 이루어진 후보키)가 있을 때, 속성이 전체 후보키에 의존하느냐 아니냐를 따지는 기준입니다.

▸ Partial Functional Dependency

  • X → Y 이고,
  • X의 proper subset(진부분집합) 중 일부가 Y를 결정할 수 있다면,
  • 이는 Partial FD입니다.

예:

학생ID, 수업ID → 생일     ✅ Partial FD  
(사실 생일은 학생ID만으로 결정됨 → 전체 키가 필요 없음)

▸ Full Functional Dependency

  • X → Y 이고,
  • X의 어떤 진부분집합도 Y를 결정하지 못하면,
  • 이는 Full FD입니다.

예:

학생ID, 수업ID → 성적     ✅ Full FD  
(성적은 학생ID만으로도, 수업ID만으로도 결정할 수 없음)

Full FD는 2NF(제2정규형)의 기준이 되며, Partial FD가 있는 경우 정규화를 통해 테이블을 분해해야 합니다.


✅ 실전 예제 정리

테이블: 성적(학생ID, 수업ID, 성적, 생일)

후보키 종속성 종류 설명
(학생ID, 수업ID) → 성적 Full FD 성적은 둘 다 있어야 결정됨
(학생ID, 수업ID) → 생일 Partial FD 생일은 학생ID만으로 결정됨
 

→ 이 경우 생일 속성은 다른 테이블로 분리해야 2NF가 만족됩니다.


✅ 마무리 정리

Functional Dependency는 테이블 구조를 분석하고 정규화를 수행하는 데 있어 핵심적인 개념입니다.
특히 Partial vs Full FD는 **정규화(2NF)**를 위한 중요한 기준이므로 반드시 구분할 수 있어야 합니다.

추후에는 이 FD 개념을 바탕으로 정규형(NF) 정리, BCNF, 다치 종속(MVD) 등으로 확장할 수 있습니다.