함수 종속성
이란 데이터베이스에서 테이블의 속성들 간의 관계
를 나타내는 개념입니다.
예를 들어, 학생 테이블에서 학번과 이름은 함수 종속 관계에 있습니다. 즉, 학번이 주어지면 이름을 유일하게 결정할 수 있습니다. 반대로, 이름이 주어지면 학번을 유일하게 결정할 수 없습니다. 이러한 함수 종속 관계를 표현할 때는 다음과 같이 쓸 수 있습니다.
학번 -> 이름
PK | 학번 | 이름 |
---|---|---|
1 | 2016116 | 김철수 |
2 | 2017568 | 김철수 |
3 | 2018789 | 이맹구 |
속성(attribute) X의 값 각각에 대해 시간에 관계없이 항상 속성(attribute) Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속
이라 하고, X → Y
라고 표기합니다.
함수 종속성은 데이터베이스 설계의 중요한 요소입니다. 함수 종속성을 이용하면 데이터의 중복성과 비일관성을 줄이고, 데이터의 무결성과 효율성을 높일 수 있습니다. 함수 종속성을 기반으로 테이블을 정규화하는 과정을 통해 데이터베이스의 품질을 향상시킬 수 있습니다.
완전 함수적 종속
이란 한 테이블에서 어떤 속성이 다른 속성의 부분집합에 의해서만 결정되지 않고, 전체 속성에 의해서만 결정될 때를 말합니다.
예를 들어, 학생 테이블에서 학번, 이름, 학과를 속성으로 가지고 있다고 가정해 봅시다. 이때, 학번은 이름, 전공, 학과의 부분집합인 이름에 의해서만 결정되지 않습니다. 즉, 이름이 같은 학생이 여러 명 있을 수 있기 때문입니다. 따라서 학번은 이름, 전공, 학과의 전체 속성에 의해서만 결정됩니다.
이렇게 완전 함수적 종속을 만족하는 속성을 기본키로 선택하면 데이터의 중복과 불일치를 줄일 수 있습니다.
PK | 학번 | 이름 | 학과 |
---|---|---|---|
1 | 2016116 | 김철수 | 전자공학과 |
2 | 2017568 | 김철수 | 컴퓨터공학과 |
3 | 2018789 | 이맹구 | 신소재공학과 |
부분 함수적 종속
이란 한 릴레이션의 속성들이 다른 속성들의 일부에만 의존하는 경우를 말합니다.
예를 들어, 학생 릴레이션에서 학번, 이름, 학과, 학과장을 속성으로 가진다고 하면, 학과장은 학과에만 의존하고 학번과 이름에는 의존하지 않습니다. 이런 경우, 학과장은 학과에 부분 함수적 종속되어 있다고 할 수 있습니다.
부분 함수적 종속은 릴레이션을 정규화하는 과정에서 제거해야 하는 이상 현상을 발생시킬 수 있습니다.
예를 들어, 아래의 학생 릴레이션에서 학과가 변경되면, 그에 따라 학과장도 변경되어야 하는데, 이를 놓치면 데이터의 불일치가 발생할 수 있습니다. 따라서, 부분 함수적 종속을 제거하기 위해 릴레이션을 분해하는 것이 필요할 수 있습니다. 이것이 바로 제 2 정규형의 목적입니다.
PK | 학번 | 이름 | 학과 | 학과장 |
---|---|---|---|---|
1 | 2016116 | 김철수 | 전자공학과 | 김학장 |
2 | 2017568 | 김철수 | 컴퓨터공학과 | 박학장 |
3 | 2018789 | 이맹구 | 신소재공학과 | 이학장 |
4 | 2018123 | 진유리 | 신소재공학과 | 이학장 |
이행적 함수적 종속
은 다음과 같이 정의할 수 있습니다.
A -> B, B -> C 일 때, A -> C 인 관계를 이행적 함수적 종속이라고 합니다.
여기서 A, B, C는 속성(attribute) 또는 속성의 집합을 의미하며, ->는 결정자(determinant)와 종속자(dependent)의 관계를 나타냅니다. 즉, A의 값이 결정되면 B의 값도 결정되고, B의 값이 결정되면 C의 값도 결정된다는 뜻입니다.
이행적 함수적 종속은 데이터베이스 설계에서 문제를 일으킬 수 있습니다.
예를 들어, 학생-과목-교수 테이블에서 학생번호가 과목명을 결정하고, 과목명이 교수명을 결정한다면, 이는 이행적 함수적 종속입니다. 이 경우, 다음과 같은 문제가 발생할 수 있습니다.
PK | 학번 | 이름 | 과목 | 교수 |
---|---|---|---|---|
1 | 2016116 | 김철수 | 전자회로 | 김교수 |
2 | 2017568 | 김철수 | 컴퓨터구조 | 박교수 |
3 | 2018789 | 이맹구 | 알고리즘 | 이교수 |
4 | 2018123 | 진유리 | 알고리즘 | 이교수 |
위의 예시에서는 학생-과목 테이블과 과목-교수 테이블로 분리하여 제3정규형을 만족시킬 수 있습니다. 이렇게 하면 중복과 갱신 이상, 삽입 이상, 삭제 이상을 방지할 수 있습니다.