DB 수업 중에 함수적 의존성에 관해 교수님께서 혼신의 힘을 다하여 설명해주셨지만, 내 머리가 부족한 탓에 100% 내것으로 만들지 못했다... (교수님 죄송합니다 😭)
함수적 의존성에 관해 추가적으로 정리하고 싶어 관련 레퍼런스들을 찾아보다, 단번에 이해할 수 있도록 기가 막히게 잘 정리해놓은 두 레퍼런스가 있어 다시 한번 글을 쓰면서 정리해보고자 한다.
함수적 의존성(Functional Dependency)
함수적 의존성(Functional Dependency, FD)이란 DB 정규화 작업에 필요한 개념으로 두 attributes 집합 사이의 의존성을 나타내는 개념을 의미한다.
예를 들어 아래와 같은 테이블이 있다고 가정하자.
emp_id | emp_name | birth_date | position | salary |
위 테이블에는 5개의 attributes(emp_id, emp_name, birth_date, position, salary)가 있다. 이 attributes를 X, Y 두 집합으로 나눠보자.
X = {emp_id}
Y = {emp_name, birth_date, position, salary}
X와 Y 사이에는 어떤 관계가 있을지 고민해보자. emp_id는 임직원 구별을 위해 부여된 Surrogate Key(대리키) 식별자이기 때문에, emp_id가 동일한데 다른 컬럼(emp_name, birth_date, position, salary)이 다르다고 생각할 수는 없다.
즉, emp_id가 동일하면, emp_name, birth_date, position, salary도 동일하다.
이는 집합 X의 값이 같으면 집합 Y의 값도 항상 같다고 인식할 수 있으며 수학에서의 함수의 기능과 비슷하다.
(보통 함수에서 기호로 X -> Y로 표현하며, 함수는 f(x)의 식만 동일하다면, INPUT 값에 따라 항상 동일한 OUTPUT값이 산출된다)
(이 때 X를 결정자라고 하며, Y를 종속자라고 한다)
위와 같은 관계를 X, Y의 입장에서 정리하면 아래와 같이 정리할 수 있다.
X가 Y를 함수적으로 결정한다. (functionally determine)
Y가 X에게 함수적으로 의존한다. (functionally dependent)
그리고 X, Y의 제약 관계를 Functional Dependency(함수적 의존성)이라고 하는 것이다.
정리하면, "DB 테이블의 Attributes로 이루어진 집합 X와 집합 Y 사이에 tuple들의 X값이 같다면 Y값도 같다"는 의존관계가 존재할 때 X와 Y의 관계를 함수적 의존성을 가진다고 한다.
함수적 의존성(Functional Dependency) != KEY
함수적 의존성의 개념과 KEY 둘다 attributes를 구분한다는 의미에서 헷갈릴 수 있는데, 이 둘은 다른 개념이다.
(나도 함수적 의존성은 값을 구분하게 하는 기능을 하는데, KEY도 값을 구분하는 역할을 하는 것을 깨닫고 혼란스러웠다)
정리하자면, KEY는 튜플(row)을 유니크하게 식별하는 attribute(s)이고 함수적 의존성은 특정 attributes를 유니크하게 식별해내는 집합이다.
즉, KEY의 경우 KEY의 attribute(s)를 알면 나머지 attributes를 알 수 있다. (아래와 같은 함수적 의존성 관계가 성립한다)
Key attribute(s) -> 나머지 attributes
그러나 Functional Dependency의 경우 x 집합을 안다고 해서 다른 attributes 모두를 알 수 있다고 보장할 수는 없다.
자칫 헷갈릴 수 있는 정의이기 때문에, KEY와 Functional Dependency 와의 관계를 잘 짚고 넘어가자.
[추가]
DB에는 중복적인 데이터가 계속 쌓일 경우에 불필요한 공간을 낭비하는 부작용을 가져올 수 있다. 이는 DB관리에 있어 매우 비효율적인 것이며 다른 부작용을 초래할 수 있기에 정규화를 통해 이러한 문제를 해결해야 한다.
(함수적 의존성이 존재하지 않을 때까지 DB 내의 table을 분할하는 것 = 정규화)
정규화 작업에 있어 함수적 의존성이라는 개념은 매우 중요하기 때문에, 한번 쯤 꼭 짚고 넘어가자!
Reference
https://easy-code-yo.tistory.com/40
https://www.youtube.com/watch?v=fw8hvolebLw
https://easy-code-yo.tistory.com/41?category=1037019
'Database' 카테고리의 다른 글
[Database] 정규화(Normalization)/비정규화(Denormalization) (0) | 2024.06.12 |
---|---|
[Database] Entity Relationships (3) (1) | 2024.06.11 |
[Database] Entity Relationships (2) (0) | 2024.06.11 |
[Database] Entity Relationships (1) (2) | 2024.06.11 |
[Database] 데이터 무결성 (1) | 2024.04.19 |