ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DB] 함수 종속성(functional dependency)이란?
    데이터베이스 2022. 5. 11. 00:18

    함수 종속성(functional dependency) 정의

    함수 종속성은 특정 속성(컬럼) A의 값이 바뀌면 다른 속성(컬럼) B의 값도 바뀌거나

    특정 속성(컬럼) A의 값을 알면 다른 속성(컬럼) B의 값도 유일하게 정해지는 종속 관계를 말합니다.

     

    다음은 축구선수 정보를 나타내는 축구선수 테이블입니다.

    name team age address initials
    James Rodríguez new york city 27 Gotham JR
    Park Ji Sung Manchester United 25 Manchester JSP
    cristiano ronaldo Real Madrid 22 Madrid CR

    이니셜(initials) 열이름(name) 열 값의 이니셜 문자를 포함하고 있습니다.

    만약 이름(name) 열이 변경된다면 이니셜(initials) 열도 변경되야합니다.

     

    이처럼 특정 열이 변경될 때 다른 열도 변경해야한다면 변경되어야하는

    열은 변경되는 열에 함수적으로 종속되어있다고 말합니다.

    이 경우엔 이니셜 열이 이름 열에 함수적으로 종속되어있는 경우입니다.

     

     

    다른 예를 들어보겠습니다. 다음은 학생 정보와 수강 정보를 저장하는 학생수강성적 테이블입니다.

    학생번 학생이름 주소 학과 학과사무실 강좌이름 강의실 성적
    501 박지성 영국 런던 컴공과 공학관 101 데이터베이스 공학관 110 3.5
    401 김연아 한국 서울 체육학과 체육관 101 데이터베이스 공학관 110 4.0
    402 장미란 한국 강원도 체육학과 체육관 101 스포츠경영학 체육관 103 3.5
    501 박지성 영국 런던 컴공과 공학관 101 자료구조 공학관 111 3.5

    '강좌이름' 이라는 열이 존재합니다. 강좌이름 '데이터베이스'인 경우 강의실은 '공학관 110'호 한 곳뿐입니다.

    반면 학생이름이 '박지성'인 경우 강좌이름은 '데이터베이스'도 있고 '자료구조'도 있습니다. 

     

    강의실은 강좌이름만 알면 바로 알 수 있지만 강좌이름은 학생이름만으로 바로 알 수 없습니다.

    이처럼 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존관계를 '속성 B는 속성 A에 종속한다'

    혹은 '속성 A는 속성 B를 결정한다'라고 합니다.

     

    간단한 표기법

    함수 종속 관계를 명시하는 간단한 방법은 아래와 같습니다. 

    T.x   -- > T.y

    위 표시는 다음과 같이 읽습니다. "T라는 테이블에서 열 y는 열 x에 함수적으로 종속된다"

    football_player.name   -- >   football_player.initials

    "football_player 테이블에서 initials 열은 name 열에 함수적으로 종속된다"

    student_grade.course_name   -- >  student_grade.class_room

    "student_grade 테이블에서 class_room 열은 course_name 열에 함수적으로 종속된다"

     

     

     

    부분적 함수 종속(불완전 함수 종속)

    name team age address initials
    James Rodríguez new york city 27 Gotham JR
    Park Ji Sung Manchester United 25 Manchester JSP
    cristiano ronaldo Real Madrid 22 Madrid CR

    (name, team) 두 열을 합성키로 지정했을 때 initials 열은 name 열에 종속되지만 team 열에는 종속되지 않습니다.

    이와 같이 부분적 함수 종속은 키가 아닌 열이 합성키의 전부가 아닌 일부에 종속되는 경우를 의미합니다.

     

    위 football_player 테이블에서 name이 변하면 initials도 같이 변하지만 team이 변하면 initials은 변하지 않기 때문에

    initials 열이 name 열에 부분적으로 함수 종속됩니다.

     

    다른 예를 들어보겠습니다. 아래 수강강좌 테이블은 수강 정보와 강의실 정보를 저장합니다.

    학생번호 강좌이름 강의실 성적
    501 데이터베이스 공학관 110 3.5
    401 데이터베이스 공학관 110 4.0
    402 소포츠경영학 체육관 111 3.5
    502 자료구조 공학관 111 4.0

    위 테이블의 합성키는 (학생 번호, 강좌 이름)이고 '성적'은 (학생번호, 강좌이름)에 함수적으로 종속되어있지만,

    '강의실'은 부분 함수 종속되어 있습니다.

     

    강좌 이름이 변경되면 당연히 강의실도 변경됩니다. 하지만 학생번호가 바뀐다고 강의실이 바뀌지 않습니다.

    다수의 학생이 같은 강의실에 들어가기 때문입니다.

    반면에 성적같은 경우는 학생번호가 변경되거나 강좌이름이 변경될 시 2가지 경우 둘 다 변경됩니다.

     

    강의실 경우와 같이 기본키가 아닌 일반 열이 합성키에 부분적으로만 종속되는 경우를 부분적 함수 종속

    또는 불완전 함수 종속이라 합니다.

     

     

     

    이행적 함수 종속(Transitive Functional Dependency)

    키가 아닌 일반열의 값이 변경되었는데 만일 다른 열의 값을 변경시킨다면 이는 이행적 함수 종속입니다.

     

    이행적 함수 종속은 기본키가 아닌 일반열이 해당 테이블의 다른 열의 변경을 야기시키는 경우를 말합니다.

    id(PK) name team age address initials
    1 James new york city 27 Gotham JR
    2 Park Manchester United 25 Manchester JSP
    3 ronaldo Real Madrid 22 Madrid CR

    위 테이블에서 name 열이 변경한다고 치면 initials 열도 변할 것입니다.

    이렇게 키가 아닌 열이 다른 열의 변경을 초래한다면 이는 이행적 종속 열을 보유한 상황인 것입니다.

Designed by Tistory.