데이터베이스 설계의 기본: 함수 종속(Functional Dependency) 이해하기

이성혁·2024년 9월 10일

Database

목록 보기
21/24
post-thumbnail

1. 함수 종속이란?

  • 함수 종속(Functional Dependency)은 테이블에 있는 두 어트리뷰트 집합 간의 제약 관계를 의미합니다. 쉽게 말해, 하나의 값에 따라 다른 값이 결정되는 관계를 나타냅니다.

예를 들어, 다음과 같은 인플루이(Employees) 테이블을 살펴봅시다:

인플루이 아이디이름생일직군연봉부서 ID
1메리1990-01-01개발자6000101
2진호1985-06-12디자이너5500102
..................

여기서 인플루이 아이디는 각 직원마다 유일하게 부여된 ID로, 이를 기준으로 이름, 생일, 직군, 연봉, 부서 ID 등의 정보가 결정됩니다. 즉, 인플루이 아이디가 다른 모든 컬럼의 값을 결정하므로, 이 관계를 함수 종속이라고 합니다.

기호로는 다음과 같이 표현할 수 있습니다:

인플루이 아이디 → (이름, 생일, 직군, 연봉, 부서 ID)

이 기호는 "인플루이 아이디가 이름, 생일, 직군, 연봉, 부서 ID를 결정한다"는 의미입니다.

2. 함수 종속을 파악하는 방법

함수 종속을 파악하려면 테이블의 스키마(구조)를 분석해야 합니다. 테이블에 어떤 어트리뷰트가 포함되어 있는지, 각 어트리뷰트가 어떤 의미를 가지는지를 이해하는 것이 중요합니다.

예를 들어, 다음과 같은 테이블이 있다고 해봅시다:

이름생일
메리1990-01-01
진호1985-06-12

이 테이블에서 이름생일이 1:1로 대응되므로, 이름에 따라 생일이 결정된다고 생각할 수 있습니다. 하지만 이는 잘못된 결론입니다. 동명이인이 존재할 수 있기 때문에 이름이 같더라도 생일이 다를 수 있습니다. 따라서 이름과 생일 사이에는 함수 종속이 존재하지 않습니다.

이처럼 함수 종속은 단순히 데이터의 현재 상태만으로 판단할 수 없습니다. 테이블의 스키마와 의미를 바탕으로 함수 종속을 정의해야 합니다.

3. 함수 종속의 예

함수 종속의 예를 몇 가지 살펴보겠습니다:

  • 학생 테이블: 학생 ID → (이름, 생일, 주소)
  • 클래스 테이블: 클래스 ID → (클래스 이름, 년도, 학기, 학점)
  • 성적 테이블: (학생 ID, 클래스 ID) → 성적
  • 은행 계좌 테이블: (은행 이름, 계좌 번호) → (잔액, 개설 날짜)

이러한 함수 종속 관계를 통해 테이블 내에서 특정 값을 결정할 수 있습니다.

4. 함수 종속의 종류

함수 종속에는 여러 가지 유형이 있습니다:

  • 트리비얼 함수 종속(Trivial Functional Dependency): X가 Y를 결정하는 함수 종속에서, Y가 X의 부분집합일 때 발생합니다. 예: (A, B) → A
  • 비트리비얼 함수 종속(Non-Trivial Functional Dependency): Y가 X의 부분집합이 아닐 때 발생하는 함수 종속입니다. 예: (A, B) → C
  • 부분 함수 종속(Partial Functional Dependency): X의 부분집합이 Y를 결정할 수 있을 때 발생합니다. 예: (학생 ID, 클래스 ID) → 성적에서, 학생 ID만으로 성적을 결정할 수 있다면 부분 함수 종속입니다.
  • 완전 함수 종속(Full Functional Dependency): X의 어떤 부분집합도 Y를 결정할 수 없을 때 발생합니다. 예: (학생 ID, 클래스 ID) → 성적은 완전 함수 종속입니다.

5. 결론

함수 종속은 데이터베이스 설계에서 핵심적인 개념입니다. 이를 잘 이해하면 테이블을 효율적으로 설계할 수 있으며, 데이터베이스의 무결성을 유지하고 데이터 중복을 최소화할 수 있습니다.


출처

https://www.youtube.com/watch?v=aL0XXc1yGPs&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe

profile
항상 배우는 자세로 🪴

0개의 댓글