[데이터베이스] 함수 종속성

Yoon Uk·2023년 8월 16일
0

데이터베이스

목록 보기
15/20
post-thumbnail
post-custom-banner

함수 종속성

함수 종속성이란 데이터베이스에서 테이블의 속성들 간의 관계를 나타내는 개념입니다.

예를 들어, 학생 테이블에서 학번과 이름은 함수 종속 관계에 있습니다. 즉, 학번이 주어지면 이름을 유일하게 결정할 수 있습니다. 반대로, 이름이 주어지면 학번을 유일하게 결정할 수 없습니다. 이러한 함수 종속 관계를 표현할 때는 다음과 같이 쓸 수 있습니다.

학번 -> 이름

PK학번이름
12016116김철수
22017568김철수
32018789이맹구

속성(attribute) X의 값 각각에 대해 시간에 관계없이 항상 속성(attribute) Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 하고, X → Y라고 표기합니다.

함수 종속성은 데이터베이스 설계의 중요한 요소입니다. 함수 종속성을 이용하면 데이터의 중복성과 비일관성을 줄이고, 데이터의 무결성과 효율성을 높일 수 있습니다. 함수 종속성을 기반으로 테이블을 정규화하는 과정을 통해 데이터베이스의 품질을 향상시킬 수 있습니다.

완전 함수적 종속

완전 함수적 종속이란 한 테이블에서 어떤 속성이 다른 속성의 부분집합에 의해서만 결정되지 않고, 전체 속성에 의해서만 결정될 때를 말합니다.

예를 들어, 학생 테이블에서 학번, 이름, 학과를 속성으로 가지고 있다고 가정해 봅시다. 이때, 학번은 이름, 전공, 학과의 부분집합인 이름에 의해서만 결정되지 않습니다. 즉, 이름이 같은 학생이 여러 명 있을 수 있기 때문입니다. 따라서 학번은 이름, 전공, 학과의 전체 속성에 의해서만 결정됩니다.

이렇게 완전 함수적 종속을 만족하는 속성을 기본키로 선택하면 데이터의 중복과 불일치를 줄일 수 있습니다.

PK학번이름학과
12016116김철수전자공학과
22017568김철수컴퓨터공학과
32018789이맹구신소재공학과

부분 함수적 종속

부분 함수적 종속이란 한 릴레이션의 속성들이 다른 속성들의 일부에만 의존하는 경우를 말합니다.

예를 들어, 학생 릴레이션에서 학번, 이름, 학과, 학과장을 속성으로 가진다고 하면, 학과장은 학과에만 의존하고 학번과 이름에는 의존하지 않습니다. 이런 경우, 학과장은 학과에 부분 함수적 종속되어 있다고 할 수 있습니다.

부분 함수적 종속은 릴레이션을 정규화하는 과정에서 제거해야 하는 이상 현상을 발생시킬 수 있습니다.

예를 들어, 아래의 학생 릴레이션에서 학과가 변경되면, 그에 따라 학과장도 변경되어야 하는데, 이를 놓치면 데이터의 불일치가 발생할 수 있습니다. 따라서, 부분 함수적 종속을 제거하기 위해 릴레이션을 분해하는 것이 필요할 수 있습니다. 이것이 바로 제 2 정규형의 목적입니다.

PK학번이름학과학과장
12016116김철수전자공학과김학장
22017568김철수컴퓨터공학과박학장
32018789이맹구신소재공학과이학장
42018123진유리신소재공학과이학장

이행적 함수적 종속

이행적 함수적 종속은 다음과 같이 정의할 수 있습니다.

A -> B, B -> C 일 때, A -> C 인 관계를 이행적 함수적 종속이라고 합니다.

여기서 A, B, C는 속성(attribute) 또는 속성의 집합을 의미하며, ->는 결정자(determinant)와 종속자(dependent)의 관계를 나타냅니다. 즉, A의 값이 결정되면 B의 값도 결정되고, B의 값이 결정되면 C의 값도 결정된다는 뜻입니다.

이행적 함수적 종속은 데이터베이스 설계에서 문제를 일으킬 수 있습니다.
예를 들어, 학생-과목-교수 테이블에서 학생번호가 과목명을 결정하고, 과목명이 교수명을 결정한다면, 이는 이행적 함수적 종속입니다. 이 경우, 다음과 같은 문제가 발생할 수 있습니다.

  • 중복: 같은 과목을 여러 학생이 수강할 때, 교수명이 반복해서 저장됩니다.
  • 갱신 이상: 과목의 교수가 바뀌면, 모든 학생의 레코드를 수정해야 합니다.
  • 삽입 이상: 새로운 과목을 추가하려면, 적어도 하나의 학생이 수강해야 합니다.
  • 삭제 이상: 특정 학생이 수강하는 과목을 삭제하면, 그 과목의 교수 정보도 함께 사라집니다.
PK학번이름과목교수
12016116김철수전자회로김교수
22017568김철수컴퓨터구조박교수
32018789이맹구알고리즘이교수
42018123진유리알고리즘이교수

위의 예시에서는 학생-과목 테이블과 과목-교수 테이블로 분리하여 제3정규형을 만족시킬 수 있습니다. 이렇게 하면 중복과 갱신 이상, 삽입 이상, 삭제 이상을 방지할 수 있습니다.

post-custom-banner

0개의 댓글