데이터베이스 함수 종속성(Functional Dependency)

busybean3·2021년 9월 7일
0

데이터베이스

목록 보기
2/6

함수 종속성(Functional Dependency) 이란? [1] 🤷‍♂️

함수 종속(functional dependency)이란 데이터베이스의 릴레이션(relation)에서 두 개의 속성(attribute) 집합 간 제약의 일종이다.

어떤 릴레이션 R에서, X와 Y를 각각 R의 속성(attribute) 집합의 부분 집합이라 하자. 속성(attribute) X의 값 각각에 대해 시간에 관계없이 항상 속성(attribute) Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 하고, X → Y라고 표기한다. [2]

다시 말해, R 내의 속성(attribute) 의 집합 X와 역시 R 내에 있는 또 다른 속성(attribute) 의 집합 Y에 대해, 각각의 X 값에 대해 최대 한 개의 Y 값에 연관되어 있을 때, 속성(attribute) 의 집합 X를 함수 결정(to functionally determine)하다고 한다.

X를 결정자(determinant set)이라 하고, Y를 종속자(dependent attribute)라고 한다.[2]

함수 종속을 찾아내는 것은, 관계형 모델 하의 데이터베이스를 설계한다든지, 데이터베이스 정규화, 데이터베이스 비정규화를 한다든지 할 때, 수행하는 매우 중요한 과정 중 하나이다.

함수 종속은 유저 도메인에 맞지 않은 가능한 한 많은 데이터를 제거 하기 위한 제약을 생성하기 위해 애트리뷰트 도메인과 함께 선택된다.

예를 들어 보자. 차량과 엔진 배기량을 추적 관리하는 시스템을 설계한다고 가정하자. 각 차량에는 차량별 고유한 차량 식별 번호(VIN)을 부여한다. 그러면, "VIN → 배기량" 이라고 적을 수 있다. 차량 한 대에는 배기량 하나만 있는 것이 맞는 말이기 때문이다. (이 예제에서는 차량에 엔진이 하나만 달려 있다고 가정한다.) 그러나, "배기량 → VIN"이라고 적는 것은 틀린 것이다. 같은 배기량을 가진 여러 대의 차가 있을 수 있기 때문이다.

함수 종속은 애트리뷰 "배기량"이 후보 키 "VIN"과 함께 하나의 릴레이션 안에 배치될 수 있다는 가능성을 말해 주고 있다. 그러나 이러한 하나의 릴레이션 안에 배치되는 것이 항상 알맞은 일은 아니다. 예를 들어 함수 종속은 이행적(transitive) 함수 종속의 결과로 나타날 수도 있다.

VIN → 차량모델, 차량모델→차량배기량

위와 같은 경우 이행적(Transitivity) 함수 종속으로[2] 보통의 정규화된 관계가 성립되지 않는다.

함수 종속성의 종류 🙋‍♂️

1. 완전 함수 종속 (Full Functional Dependency) [4]

종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우

예를 들어 설명해보자.


위의 그림은 사원정보가 저장된 릴레이션으로, 사원번호, 부서번호가 기본키로 지정되어 있다.

기본키(사원번호, 부서번호)를 통해서 종속자(직책)를 종속하는 경우를 완전 함수 종속이라고 한다.


2. 부분 함수 종속 (Partial Functional Dependency) [4]

릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 속성 중 일부만 종속된 경우.


위의 설명을 통해서 완전 함수 종속관계는 기본키(사원번호, 부서번호) - 종속자(직책) 이 있다는 것을 확인했다.

부분 함수 종속의 경우 기본키 중 사원번호를 통해서 종속자(사원이름, 주소, 전화번호)을 종속 할 수 있으며, 기본키 중 부서번호를 통해서 종속자(부서이름)을 종속 할 수 있다.

이를 우리는 부분 함수 종속이라고 한다.


3. 이행 함수 종속 (Transitive Functional Dependecy) [4]

릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 합니다. 즉, X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우.

위의 그림으로 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z 가 성립되는지 확인해보자.

X(사원번호)를 통해서 Y(사원이름)을 종속할 수 있다. Y(사원이름)를 통해서 Z(주소, 전화번호, 직책)등을 종속 할 수 있다.

또한 X(사원번호)를 통해서 Z(주소, 전화번호, 직책)등을 종속할 수 있으므로 이는 이행 함수 종속이 되는 것이다.


4. 결정자 함수 종속 (Boyce-codd Normalization) [5]

함수 종속의 결정자가 후보키가 아닌 경우.

위의 사진은 학생의 수강과목의 정보가 있는 릴레이션이다.

Student, Course가 기본키로 설정되어 있다고 가정하자.

결정자(Student, Course)로 Room을 종속할 수 있다. 하지만 Room으로 Course를 종속 할 수 있다.

Room은 기본키가 되지 않는다는 문제가 발생하며, 우리는 이를 결정자 함수 종속이라고 한다.


5. 다중값 종속 (Multi-Valued Dependency) [5]

한 Relation에서 둘 이상의 독립적인 다중값 속성이 존재하는 경우.


위 그림은 학생의 기본정보와 수강과목 동호회등 정보가 들어간 릴레이션이다.

수강과목은 3개, 동호회는 2개를 들은 것을 확인 할 수 있다. 하지만 여기서 하나의 과목을 더 듣게 되는 경우 동호회 정보를 넣어줘야하기 때문에 2개의 데이터(새로운 과목명 + 축구, 새로운 과명명 + 서예)를 넣어야 한다. 반대로 동호회를 하나 더 들을 경우 3개의 데이터가 추가되야 한다. 이는 A(학생번호), B(수강과목), C(동호회)를 각각 다중결정하여 발생하는 것으로 불필요한 정보가 중복되는 현상이 발생된다.

이를 우리는 다중값 종속이라고 한다.


6. 조인(결합) 종속 (Adjoin Dependency) [5]

Relation 중에서 둘로 나눌 때는 원래의 Relation로 회복할 수 없으나, 셋 또는 그 이상으로 분리시킬 때 원래의 Relation를 복원할 수 있는 특수한 경우.



우리는 함수 종속성의 정의와 종류를 알아 보았다.

다음으로는 함수 종속성의 종류에 따른 정규화 과정을 알아보며, 함수 종속의 성질을 알아보자.

REFERENCE

[1]. https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98_%EC%A2%85%EC%86%8D
[2]. 이석호 (2005년 8월 15일). 《데이터베이스 시스템》. 정익사. 218,219쪽.
[3]. https://yssa.tistory.com/entry/Database-%ED%95%A8%EC%88%98-%EC%A2%85%EC%86%8D%EC%84%B1Functional-Dependency%EA%B3%BC-%EC%A0%95%EA%B7%9C%ED%99%94Normalization
[4]. https://itwiki.kr/w/%ED%95%A8%EC%88%98%EC%A0%81_%EC%A2%85%EC%86%8D%EC%84%B1
[5]. https://needjarvis.tistory.com/610
[6]. https://valuefactory.tistory.com/222
[7]. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=myung_aoul&logNo=140029654106

profile
엉덩이 무거운 개발자가 되기 위해서 몸무게를 찌웠다...

0개의 댓글