본문 바로가기

ComputerScience/Database

[Database] functional dependency(함수 종속) 이란?

데이터베이스 설계를 위한 functional dependency (함수 종속) 개관

  • functional dependency란, 테이블에 있는 어트리뷰트 집합 사이의 제약을 의미하며, 이를 통해 데이터베이스 설계의 기본이 된다.
  • 집합 X와 Y를 나눈 후, X의 값이 같으면 Y의 값도 같다는 걸 알 수 있으며, 이 경우 X가 Y를 함수적으로 결정한다.
  • 이 경우 functional dependency(FD)라 부르며 Symbol로는 X -> Y와 같이 표현할 수 있다.
  • 테이블의 스키마를 보고 FD를 파악할 수 있지만, 테이블의 State를 보고 FD를 파악하면 안 된다.
이미지 출처: https://medium.com/techprodezza/functional-dependency-in-dbms-1708f5cd79ab

위 테이블에서, 집합 X를 {Student_ID}, 집합 Y를 {Student_Name, Stream}라 했을때 집합 X인 Student_ID가 같으면 집합 Y의 값들도 모두 같다 (위에선 Student_ID가 1일 때). 이를 "X가 Y를 함수적으로 결정한다" 또는 "Y가 X에 함수적으로 의존한다"라고 표현한다. 그리고 이러한 관계를 functional dependency(FD)라고 부른다.

함수 종속성을 파악하기 위해서는 테이블의 스키마로부터 의미적으로 관계와 결합을 이해해야 한다.

  • 테이블에서 일부 데이터 관찰로 함수 종속성이 있다고 판단하면 안되며, 각 속성에 대한 의미적 관계를 파악해야 한다.
  • 예를 들어, 이름을 저장하는 name과 그 사람의 생일인 birth_date에 대해 일대일로 매칭되더라도, 이름이 생일을 결정할 수 없으며 동명이인이 있을 가능성이 있으므로 함수 종속성이 없으며, 따라서 가능한 모든 데이터를 파악해야 한다.
  • 함수 종속성을 파악하기 위해서는 서로 다른 속성 간의 관계를 의미적으로 이해해야 하며, 모든 데이터를 파악한 후에 판단해야 한다.

데이터베이스에서 기능 종속성과 관련한 예시들

  • 회사의 정책이 임직원이 한 부서에만 속해야 한다면, 그 부서에 속한 사람이 결정을 적용할 수 있다.
  • 하지만 회사의 정책이 임직원이 여러 부서에 속할 수 있다면, 그 경우에는 임직원이 결정을 적용하지 못한다.
  • 부서 DB에서 FD을 설명하는데, 이것은 의미적 이해가 중요하다.
  • 자료 구축시, 어트리뷰트가 관계적으로 어떤 의미를 지니는지에 따라서 기능 종속성이 달라질 수 있다.
  • 어트리뷰트가 함께 있을 때, 그 어트리뷰트를 통해 정보를 결정할 수 있다.

Functional Dependency(FD)의 5가지 예시와 특징

  • Functional Dependency는 여러 액트리뷰트가 함께 있을 때만 정보를 특정할 수 있는 것이다.
  • Functional Dependency의 예시로는 위치기반 SNS가 있다. 이 경우 사용자의 아이디, 방문 위치, 방문 날짜가 같은 집합에 속해야만 댓글, 사진 URL 등을 특정할 수 있다.
  • Functional Dependency가 존재하더라도 그 역이 항상 참일 수 없다.
    예를 들어, Employee ID가 있을 때 Employee의 name을 결정할 수 있지만, Employee name에 따라 Employee ID를 결정할 수는 없다.
  • 경우에 따라서는 애트리뷰트의 공집합으로 Functional Dependency를 표현할 수 있다. 예를 들어, 특정 액트리뷰트가 없는 경우 Y 집합을 결정하는데, 이는 항상 단 하나의 값을 갖는다.
  • Functional Dependency는 특정 액트리뷰트에 따라 값이 변하는 것이 아니라 항상 동일한 값을 가지는 경우에도 표현 가능하다.

Trivial Functional Dependency

  • 정규화에서 Second normal 폼에서 다루는 Functional dependency의 종류 중 하나인 Trivial functional dependency가 있음.
  • Trivial functional dependency는 y가 x의 부분집합일 때, x가 y를 결정하는 function을 dependency로 갖는 경우를 말함.
  • 예를 들어, 에트리뷰트 {a,b,c} 로 이루어진 집합이 {a,c}를 결정하게 되면, 이때 이 functional dependency는 Trivial functional dependency를 갖는다.
  • Trivial functional dependency는 왼쪽이 오른쪽의 부분집합이며, 동일한 경우도 포함된다.

Non-trivial functional dependency

  • Non-trivial functional dependency는 왼쪽이 오른쪽의 부분집합이 아닌 경우다.
  • 예를 들어, {a, b, c} -> {b, c, d}의 경우 d는 왼쪽의 부분집합이 아니므로 Non-trivial 이다.

Partial functional dependency

  • Partial Functional Dependency는 왼쪽의 proper subset이 오른쪽을 결정 짓는 경우다.
  • 여기서 Proper Subset은 집합에서 최소한 하나의 attribute를 제거한 집합을 의미한다.
    예를 들어, A= {a, b, c}에 대해 B = {a, b, c}라는 집합은 제거된 요소가 없으므로 B는 A의 Proper subset이 아니다.
  • Partial functional dependency의 예시로, Employee ID와 Employee name이 일치하는 경우 같은 birth_date을 지닌다는 정보를 얻게 된다. 그리고 Employee ID만으로도 생일을 결정지을 수 있다. 따라서, {Employee_ID, Employee_name} 집합에서 name을 제거하더라도 {birth_date}를 특정지을 수 있으므로 이는 Partial functional dependency이다.

Full functional dependency

  • 함수적 디펜던시가 전부 결정적인 경우, 즉 프로퍼티 전부가 값을 결정하면 full functional dependency라고 한다.
  • 예를 들어, {student ID, class ID} -> {grade} 일 때, student ID 또는 class ID만으로는 grade을 고유하게 결정할 수 없다.
    따라서 둘 다 같은 집합에 속해야만 grade의 집합을 결정할 수 있으므로 full fucntioanl dependency이다.
  • Full functional dependent의 반대로, 특정 프로퍼티 서브셋을 제거해도 여전히 종속성이 유효하다면 partial functional dependency라고 한다.
  • 이 functional dependence 개념은 데이터베이스 정규화에서 사용된다.

참고 자료

https://youtu.be/fw8hvolebLw?si=NXNgxlEgNi9L-ePy

https://medium.com/techprodezza/functional-dependency-in-dbms-1708f5cd79ab

 

Functional Dependency in DBMS

What is your identity now?

medium.com