결정자, 함수적 종속성 & BCNF에 대한 개인적 고찰
앞 글의 마지막 질문부터 다시 시작해 보죠.
“결정자란 무엇입니까?”
글자 그대로 결정(Determinate)하는 놈이겠죠.
그럼 결정이라는 것이 뭔가요.
오래 전에 이휘재가 “난 결심했어!”라고 외치며 서로 다른 길에 대한 진행을 보여주던 프로그램이 생각나네요. 사회자인 이문세가 굵은 테의 선글라스를 쓰고 괜히 호들갑스럽게 소개하던 그 프로그램 말이죠. 요즘 이문세는 뭐하나.
결정이라는 것은 갈팡질팡 고민하는 상태가 아닙니다.
“결심했어!”
곧, 여러 변수 중 하나로 정해진 상태를 말합니다.
예를 들면,
오늘 저녁 영화를 볼까, 술을 마실까, 당구나 칠까, 데이트나 할까, 등등의 변수에서
“술을 마신다”라고 하나로 정한 상태를 말한다는 것입니다.(데이트가 더 좋나?)
여전히 하나로 정하지 못하고 고민하고 있는 상태는 당연히 결정이 아니죠.
뭔 이리 당연한 소리를?
그림으로 한번 옮겨 볼까요.
<그림 - 1>은 결정한 상태이고, <그림 - 2>는 갈팡질팡 상태입니다.
우리가 주목하는 것은 결정한 상태이죠.
그나 저나 결정한 상태이든 아니든 <그림 - 1>과 <그림 - 2>는 어디서 많이 본 그림이죠?
바로 중학교 수학과정에서 배웠던 함수의 그림입니다.
대응이 어쩌고, 독립변수와 종속변수가 어쩌고 저쩌고...
여기서 우리는 결정에 대한 실생활의 예로부터 함수적인 수학모델로 자연스럽게 이동하게 됩니다. 곧, 결정이라는 것은 중학수학과정에서 배운 함수의 ‘대응관계’과 관련이 있군요.
대응관계 : 독립변수 X는 종속변수Y에 반드시, 하나와 대응한다.
따라서, 함수를 가지고 <그림 - 1>과 <그림 - 2>를 표현하면
<그림 - 1> -> 함수, <그림 - 2> -> 함수 아님
여기서 잠시 꼬부랑말을 좀 가져와서 생각해 봅시다.
R : a relation (or a relation variable for time-independence)
X, Y : subsets of the set of attributes of R
X --> Y: Y is functionally dependent on X, iff each X-value in R is associated with
exactly one Y-value in R. That is, if T1[X] = T2[X], then T1[Y] = T2[Y]
X called determinant; Y called dependent
복잡한 듯 하지만 내용은 간단합니다.
어떤 릴레이션(테이블) R이 있고, R을 구성하는 속성들의 부분집합인 X, Y에 대하여, 이런 것이 함수적 종속, 저런 것이 결정자, 종속자고 하고 있죠.
if T1[X] = T2[X], then T1[Y] = T2[Y]의 뜻은 10. 정규화(Normalization)1에서 설명했다시피 각 X 값에 대해 반드시 한 개의 Y 값이 대응한다는 뜻이죠.
그 다음 문장에 결정자(Determinant)와 종속자(Dependent)가 있네요.
즉, 함수의 X가 결정자이고, Y가 종속자라는 거죠. 그리고 이런 경우, Y는 X에 함수적으로 종속되어 있다는 거구요. 그것 참...
자, 실제 우리가 다루는 테이블에 이 개념을 적용해 봅시다.
<학생>테이블
학번 |
이름 |
성별 |
나이 |
학년 |
학과 |
100 |
아무개 |
남 |
20 |
2 |
국문 |
200 |
홍길동 |
남 |
20 |
2 |
영문 |
300 |
박문수 |
남 |
19 |
2 |
영문 |
400 |
갑순이 |
여 |
19 |
1 |
정치 |
500 |
홍길동 |
남 |
19 |
1 |
행정 |
<학생>테이블의 컬럼 간의 대응관계를 그림으로 나타내 보면
나머지 속성 간의 관계는 각자 한번 생각해 보시고
(학번) - (이름) 과 (이름) - (학과) 속성 간의 관계만 위의 그림으로 분석해보면,
▶ 그림 - 1에서
(학번)은 (이름)에 반드시, 하나만 대응하고 있다.
-> (이름)은 (학번)에 함수적으로 종속하고 있으며,
(학번)은 결정자(Determinant), (이름)은 종속자(Dependent)이다.
▶ 그림 - 2에서
(이름)과 (학과)는 함수적 종속관계가 아니다.
홍길동이 영문, 행정에 복수대응하고 있으며, 앞의 표현을 빌리면 아직 ‘갈팡질팡’의 상태인 것이다. 그럼 둘은 무슨 관계? 부적절한 관계? ^^
여기서 질문.
Q : "학번은 결정자가 되는데 이름은 결정자가 되지 못하는 이유?"
A : "학번은 같은 값이 존재하지 않는, 모두 유일한 값들이지만, 이름은 그렇지 않다"
곧, 결정자의 핵심조건은 유일한 값을 가져야만 한다는 것이죠.
유일한 값을 갖지 못한다면?
그렇다면 위의 경우처럼 반복되는 값(이름의 경우, 홍길동)에서 반드시 중복대응(아직 결정되지 않은 갈팡질팡한 상태)이 발생하여 함수적 종속관계가 성립하지 않게 되겠죠.
따라서 우리는 결정자를 찾고자 하면 우선 반복값을 가지는 속성들을 제외하고서 찾으면 되는 것이죠.
<학생>테이블에서는 (학번)이 유일하게 반복값을 갖지 않는 속성이며, 따라서 (학번)은 다른 속성들의 결정자가 되고 있습니다.
하나의 개체에는 대부분 그 개체 고유의 결정자가 있습니다.(Weak Entity는?)
두 개의 개체 간의 함수적 종속관계는 어떨까요? 결정자와 종속자는?
예를 들어 보죠.(에구, 예가 무거워서 들기가 힘들구만)
학생(학번, 이름, 성별, 나이, 학년, 학과)
교수(교수번호, 이름, 성별, 학과, 학위종류, 직급)
<학생>테이블과 마찬가지로 <교수>테이블에서는 (교수번호)가 결정자 역할을 하고 있지요.
서로 다른 개체의 속성 간에 결정관계가 존재할까요? 곧, 함수적 종속관계가 성립할까요?
쟤는 쟤고 얘는 얜데 함수적 종속관계가 성립하겠습니까.
“학생의 (학번)이 교수의 (학위종류)에 대한 결정자라고 우기고 있음”
교수 왈, "자네가 내 학위 따는데 한번이라도 도와준 적이 있어?”
결국 학생은 학생이고 교수는 교수이며 따라서 서로 다른 개체 간에 함수적 종속관계는 일반적으로 성립하지 않게 되지요.
그러나 사람이라는 존재는 어떤 존재인가요.
바로 관계적 존재이죠, 혼자서는 살 수 없는.
누군가와 알게 모르게, 끈끈하든지 느슨하든지 관계를 맺고 살 수밖에 없는 그런 존재.
즉, 전혀 관계없던 학생과 교수의 관계가 교수가 학생의 지도교수로 설정이 되는 경우, 학생이 교수가 강의하는 과목을 수강하는 경우, 비로소 관계가 발생하고 학생의 정보에 다음이 추가되겠지요.
지도교수의 경우 : 학생(학번, 이름, 성별, 나이, 학년, 학과, 교수번호(지도교수))
앞서 함수적 종속관계와 결정자, 종속자의 정의를 토대로 분석하면, 학번과 지도교수 간에는 함수적 종속관계가 성립하고 학번이 역시 결정자의 역할을 하게 됩니다.
자, 그럼 글 15의 <예제테이블>을 다시 봅시다.
(학번, 학생명, 학년, 학과, 수강과목, 학점, 교수명, 개설학과)
<예제테이블>
학번 |
학생명 |
학년 |
학과 |
수강과목 |
학점 |
교수명 |
개설학과 |
100 |
아무개 |
3 |
전산 |
DB |
3 |
노련한 |
전산 |
200 |
홍길동 |
3 |
전기 |
반도체 |
3 |
기민한 |
전기 |
200 |
홍길동 |
3 |
전기 |
전자기학 |
2 |
기민한 |
전기 |
300 |
갑을병 |
2 |
전산 |
자료구조 |
3 |
예민한 |
전산 |
400 |
박문수 |
3 |
전산 |
자료구조 |
3 |
예민한 |
전산 |
400 |
박문수 |
3 |
전산 |
DB |
3 |
노련한 |
전산 |
이 테이블의 주키는 (학번, 수강과목)입니다. 곧, 중복값이 없는 유일한 값이죠.
따라서 (학번, 수강과목)은 이 테이블의 결정자역할을 합니다.
그러나, 결정자가 (학번, 수강과목)뿐인가요. (학번) 자체도, (수강과목) 자체도 자신의 엔터티에 속하는 속성들에게는 결정자역할을 하고 있지요.
결정자가 난립하고 있는 상황인데, 그래서 먼저 독립적인 엔터티들을 각각 추출하였던 것이죠. 물론 한 눈에 다 구별이 된다면야 할 말이 없지만.
자, 정리해 봅시다.
결정자, 함수적 종속성은 어떻게 판별할 것인가.
step 1. 뒤죽박죽 상태를 정리
- 컬럼명들로부터 어떤 엔터티들이 있는지를 추정
- tuple들을 분석하여 대응규칙을 분석
step 2. 엔터티 추출
step 3. 속성 맵핑 & 관계 설정
step 4. 속성 간의 대응관계 조사 -> 함수적 종속성 판단
step 5. 함수적 종속성 -> 결정자, 종속자 판단
[출처] 16. 결정자, 함수적 종속성 & BCNF - 2|작성자 행인
'DB > MySQL' 카테고리의 다른 글
Mysql 유틸리티 (0) | 2012.03.27 |
---|---|
중복 데이터의 포함 설계 지침 (0) | 2012.03.27 |
데이터베이스 설계 지침 (0) | 2012.03.26 |
SQL 명령문의 최적화 (0) | 2012.03.21 |
락(LOCK) (0) | 2012.03.21 |
댓글