Soyeon Park 님의 블로그
함수 종속성 본문
0. 개요
데이터베이스 정규화는 함수 종속성을 제거하는 방향으로 진행된다.
따라서, 정규화 전에 함수 종속성에 대해서 먼저 알아보자.
1. 함수 종속성이란?
함수 종속성(Functional Dependency)은 FD로 줄여서 말하기도 한다.
디비에서 속성들 간의 종속 관계를 말한다. 테이블 필드들의 종속 관계를 알아야 데이터 중복을 줄이고, 테이블을 논리적으로 만들 수 있다.
속성 A의 값에 따라 속성 B의 값이 유일하게 결정될 때, 속성 B는 A에 함수 종속적이라고 한다. A → B로 표현하며 A가 B를 결정한다는 의미를 가진다. 이때 A를 결정자, B를 종속자라고 한다.
2. 완전 함수 종속 (Full Functional Dependency)
기본키 전체가 다른 속성을 결정할 때 발생하는 종속성이다.
예를 들면, {학번, 과목코드}라는 기본키가 {성적}을 결정하는 관계이다. 학번으로만 또는 과목코드만으로는 성적을 결정할 수 없다.
3. 부분 함수 종속 (Partial Functional Dependency)
기본키의 일부 속성만으로 다른 속성이 결정할 때 발생하는 종속성이다. 다시 말해, 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합 중 일부분에만 종속되어 있다는 것이다.
예시로 알아보자.

이 테이블에서 알 수 있는 점은 이렇다.
- candidate key : {sid, cid}
- non-prime attribute : sname, addr, major, title, iname,iloc, grade
종속 관계 :
{sid → sname, addr, major}
{cid → title, iname, iloc}
{sid, cid → grade}
sname, addr, major는 기본키(sid, cid)의 일부분인 sid에만 종속되어 있다. 마찬가지로 title, iname, iloc은 cid에 대해서만 결정된다. 따라서 부분 함수 종속성이 있다. 앞서 말했던 것처럼 정규화는 함수 종속성을 제거하는 방향으로 진행되며, 이런 부분 함수 종속성을 없애는 정규화는 제2정규화(2NF)이다. 함수 종속성을 제거하기 위해서 테이블을 따로 빼낸다.

4. 이행 함수 종속 (Transitive Functional Dependecy)
Transitive의 뜻은 전이적이다. 테이블에서 x, y, z 라는 3개의 속성이 있을 때, x → y, y → z 라는 종속 관계가 있을 경우, x → z가 성립되면 이행 함수 종속이 있다고 한다.
위의 예시를 다시 생각해보자. 부분 함수 종속이 제거된 상태에서, 이행 함수 종속이 어디 있을까? iname → iloc 에 주목해보자.
(cid → iname), (iname → iloc) 일 때, cid → iloc이 성립한다. 이행 함수 종속이다.
5. 다치 종속 (Multivalued Dependency)
한 속성이 다른 속성 집합에 독립적으로 여러 값을 가질 때를 말한다. A라는 속성에 대해서 여러개의 B가 가능할 때이다. 그리고 그 B에 해당하는 값들은 서로 독립적이어야 한다. 기호로는 A →→ B 로 표현한다.
이해하기 쉬운 예제가 있다.

여기서 (restaurant →→ pizza variety), (restaurant →→ delivery area) 로 다치 종속이 발생한다.
restaurant →→ pizza variety 의 의미는 restaurant 하나에 대해서 pizza 종류가 여러개라는 뜻이다. 1:N으로 이해해도 좋다.
restaurant(A)에 대해서 pizza variety(B)와 delivery area(B)가 각각 여러개의 값을 가지고 있고, 피자 종류와 배달지역은 서로 독립적이다.
6. 조인 종속 (Join Dependency)
조인 종속은 다치 종속의 일반화된 형태이다.
하나의 테이블을 여러개의 테이블로 무손실 분해를 했다가 다시 결합할 수 있다면 이를 조인 종속이라고 한다. 조금 더 정확하게 말하자면, 릴레이션 R이 여러개의 부분 테이블로 나누어져 있고, 이 테이블을 natural join을 통해 다시 원래 R로 정확히 복원할 수 있을 때 성립한다.
이제 함수 종속성을 제거하는 정규화를 배울 준비가 되었다.
'데이터베이스' 카테고리의 다른 글
| RAG ; Retrieval-Augmented Generation (0) | 2025.12.20 |
|---|---|
| 검색 엔진의 발전 과정 (0) | 2025.11.25 |
| 데이터베이스 정규화 (0) | 2025.11.12 |