#database > [!abstract] Introduction > 이번 글에서는 데이터베이스가 현실을 제대로 반영했는지를 판단하는 기준 중 하나인 함수 의존성*Functional Dependency*에 대해 알아봅니다. # Legal Instance 데이터베이스는 현실 세계를 본떠 설계하기 때문에, 데이터베이스의 객체와 관계는 현실 세계의 여러 제약을 반영해야 한다. 관계의 인스턴스 중 현실 세계의 제약 조건을 충족하는 인스턴스를 관계의 합법적 인스턴스*Legal Instance*라 부르며, 데이터베이스의 합법적 인스턴스는 데이터베이스 내의 모든 관계 인스턴스가 합법적인 경우다. 현실 세계의 제약 조건을 데이터베이스로 가져오기 위해서는 이 제약 조건이 수식으로 표현되어야 하지만, 보통 현실 세계의 제약 조건은 `모든 학생은 고유의 학번을 가진다`와 같이 문장으로 되어 있다. # Functional Dependency 여기서 등장하는 것이 바로 함수 의존성*Functional Dependency*이다. Relation Schema가 $R$인 관계 $r$과 $R$의 속성인 $\alpha, \beta$, 그리고 $r$의 인스턴스에 속하는 임의의 튜플 $t_1, t_2$에 대하여 $t_1[\alpha] = t_2[\alpha]$일 때 언제나 $t_1[\beta] = t_2[\beta]$라면 해당 인스턴스에 대하여 함수 의존성 $\alpha \to \beta$가 성립한다고 말한다. 그리고 $r$의 모든 합법적인 인스턴스에서 함수 의존성 $\alpha \to \beta$가 성립할 때 함수 의존성 $\alpha \to \beta$가 $R$에서 유지된다고 말한다. 그리고 데이터베이스에서 속성의 이름이 단 한가지 의미만 가진다면, 함수 의존성 $\alpha \to \beta$가 데이터베이스의 제약 조건으로 유지될 때 $\alpha \subseteq R, \beta \subseteq R$이면서 해당 데이터베이스에 존재하는 임의의 Schema $R$에 대하여 함수 의존성 $\alpha \to \beta$가 반드시 성립해야 한다. 함수 의존성은 속성의 집합으로 튜플을 구분하는 슈퍼키에 비해 더 광범위한 제약 조건을 표현할 수 있게 해주며 속성 간의 관계로 구현된 제약 조건을 나타낸다. 그런데 어떤 함수 의존성은 현실의 제약 조건과는 거리가 멀어 보인다. ![[StrangeFunctionDependency.png]] 함수 의존성 $room\_number \to capacity$는 정의상 성립하기는 하지만, 현실에서 강의실 번호가 같아도 건물이 다르면 강의실의 수용 인원이 다르다는 것을 우리는 알고 있다. 반면, 여기에 건물에 대한 정보까지 함께 적용한 함수 의존성 $building, room\_number \to capacity$는 현실의 제약 조건을 반영하며 $classroom$의 인스턴스에서 유지될 것이다. # Closure 앞서 살펴본 경우와는 약간 다르지만, 어떤 함수 의존성들의 집합 $F$가 관계 $r$에서 유지될 때 $F$에 존재하는 함수 의존성들을 연결하여 $r$에서 유지되는 다른 함수 의존성을 끄집어 낼 수도 있다. $A \to B$와 $B \to C$가 유지된다면 $A \to C$도 유지될 것이다. 이렇게 암묵적으로 유지되는 함수 의존성을 하나둘 $F$에 합치다 보면 $F$에서 유추할 수 있는 모든 함수 의존성의 집합이 탄생한다. 이 집합을 $F$의 클로저*Closure*라 부르며, $F^+$로 표기한다. # 함수 의존성의 활용 함수 의존성은 크게 두 가지 상황에서 사용하는데, 하나는 관계의 인스턴스들이 함수 의존성들의 집합 $F$를 만족하는지 확인하는 상황이며, 또 하나는 합법적인 관계들의 집합에 존재하는 제약 조건을 기술하는 상황이다. 만약 Relation Schema $R$ 전체에 대하여 $F$가 충족한다면 그때는 $F$가 $R$에서 유지된다고 말한다. 그리고 모든 관계에서 유지되는 함수 의존성은 사소하다*Trivial*고 말하는데, 이러한 함수 의존성은 $A \to A$나 $AB \to A$와 같이 $\beta \subseteq \alpha$인 $\alpha, \beta$에 대하여 $\alpha \to \beta$의 형태로 정의된다. # 출처 - Silberschatz, A., Korth, H.F. and Sudarshan, S. (2020) _Database system concepts_. Seventh edition. New York, NY: McGraw-Hill.