본문으로 건너뛰기

함수 종속

정보처리기사 목차정규화레슨 83 / 233

목차

함수 종속(functional dependency)은 한 속성의 값이 정해지면 다른 속성의 값이 하나로 정해지는 관계입니다. X → Y로 쓰고, 화살표가 기본키 전체에서 나오는지·일부에서 나오는지·다른 속성을 거치는지에 따라 완전·부분·이행 함수 종속으로 나눕니다.

이상 현상은 한 표에 여러 주제를 담아 같은 값이 되풀이되어 생겼습니다. 표를 나누면 되는데, 아무렇게나 자르면 필요한 정보가 끊깁니다. 무엇을 기준으로 나눌지는 '어느 속성이 어느 속성을 정하는가'가 알려 줍니다. 학번을 알면 이름이 하나로 정해지지만, 학번만 알아서는 점수가 정해지지 않습니다. 이런 정하는 관계를 화살표로 적어 보면, 어느 속성이 어느 표로 가야 하는지가 보입니다.

6단계 중 1단계. 학번 하나에 이름이 하나로 정해지므로 학번 → 이름이라 쓰고, 학번을 결정자, 이름을 종속자라 합니다.

수강신청 표는 이상 현상 레슨의 표에 학과코드와 과목명을 더한 것입니다. 기본키는 '학번 + 과목코드'입니다. 그림과 아래 네 절은 학생 셋(101·102·104)의 7행을 봅니다.

학번이름학과코드학과명과목코드과목명점수
101김민수CS컴퓨터DS자료구조85
101김민수CS컴퓨터NW네트워크80
101김민수CS컴퓨터OS운영체제75
102이서준CS컴퓨터DS자료구조70
102이서준CS컴퓨터OS운영체제60
104박서연EE전자NW네트워크95
104박서연EE전자OS운영체제75

1결정자와 종속자 — 화살표 읽는 법

학번이 101인 행은 셋인데 이름은 모두 김민수입니다. 학번 하나에 이름이 하나로 정해지므로 학번 → 이름이라 쓰고 '학번이 이름을 결정한다'고 읽습니다. 화살표 왼쪽을 결정자(determinant), 오른쪽을 종속자(dependent)라 합니다. 함수 종속은 자료에 따라 함수적 종속이라고도 부릅니다. 아래 완전·부분·이행 함수 종속도 '함수적 종속'을 붙여 쓴 자료가 있습니다.

화살표가 성립하지 않는 쪽도 봅니다. 학번 101의 점수는 85·80·75로 셋이라, 학번만으로는 점수가 정해지지 않습니다. 과목코드 DS의 점수도 85·70으로 갈립니다. 점수는 학번과 과목코드를 함께 알아야 하나로 정해집니다. 이것을 (학번, 과목코드) → 점수로 씁니다.

2완전 함수 종속과 부분 함수 종속 — 기본키의 전체인가 일부인가

완전 함수 종속(full functional dependency)은 종속자가 결정자 전체에 종속되고, 결정자의 일부만으로는 정해지지 않는 관계입니다. 점수는 기본키 '학번 + 과목코드' 전체가 있어야 정해지므로 기본키에 완전 함수 종속입니다.

부분 함수 종속(partial functional dependency)은 기본키의 일부만으로도 정해지는 관계입니다. 이름은 기본키 전체로도 정해지지만 학번만으로도 정해집니다(학번 → 이름). 학과코드도 학번만으로, 과목명은 과목코드만으로 정해집니다. 기본키가 속성 하나뿐이면 '일부'가 없으므로 부분 함수 종속도 생기지 않습니다.

3이행 함수 종속 — 키가 아닌 속성을 거쳐 간다

이행 함수 종속(transitive functional dependency)은 X → Y이고 Y → Z일 때, X가 Y를 거쳐 Z를 정하는 관계입니다. 학번이 학과코드를 정하고, 학과코드가 다시 학과명을 정합니다(CS는 언제나 컴퓨터). 그래서 학과명은 학과코드를 거쳐 학번에 이행 함수 종속입니다. 자료에 따라 이행적 함수 종속이라고도 부릅니다.

4세 화살표를 가르는 기준

세 화살표는 나오는 곳이 다릅니다. 완전은 기본키 전체에서, 부분은 기본키의 일부에서 나오고, 이행은 키가 아닌 속성을 거쳐 갑니다. 학과명은 기본키의 일부인 학번에 종속되므로 부분이면서 이행이기도 합니다. 다음 레슨에서는 부분 함수 종속을 없애는 2정규형, 이행 함수 종속을 없애는 3정규형으로 표를 나눕니다.

예제

성적 표를 하나 더 봅시다. 기본키는 '학번 + 과목코드'이고, 등급은 점수로 정합니다(90점 이상 A, 80점대 B, 70점대 C, 60점대 D, 60점 미만 F).

학번과목코드과목명점수등급
101DS자료구조85B
101OS운영체제75C
102DS자료구조70C
104OS운영체제75C

아래 표를 보기 전에, 다음 세 화살표가 완전·부분·이행 가운데 무엇인지 먼저 골라 보세요.

  • (가) 과목코드 → 과목명
  • (나) (학번, 과목코드) → 점수
  • (다) (학번, 과목코드) → 점수 → 등급
가르는 기준완전 함수 종속부분 함수 종속이행 함수 종속
화살표가 나오는 곳기본키 전체기본키의 일부키가 아닌 속성을 거침
기본키가 속성 하나뿐이면생긴다생기지 않는다생긴다
성적 표(나)(가)(다)
수강신청 표(학번, 과목코드) → 점수학번 → 이름학번 → 학과코드 → 학과명

(가)는 기본키의 일부인 과목코드만으로 과목명이 정해지니 부분 함수 종속입니다. (나)는 학번과 과목코드가 함께 있어야 점수가 정해지니 완전 함수 종속입니다. (다)의 등급은 기본키의 일부가 아니라 키가 아닌 점수를 거쳐 정해지니 이행 함수 종속입니다.

시험 포인트

  • 필기: X → Y는 X 값 하나에 Y 값이 하나로 정해진다는 뜻이고, X가 결정자·Y가 종속자입니다. 기본키 전체에 종속되면 완전, 기본키의 일부에 종속되면 부분(기본키가 여러 속성일 때만), X → Y·Y → Z로 Y를 거쳐 종속되면 이행 함수 종속입니다. 화살표를 보고 종속의 이름을 고르는 문제와, 부분 함수 종속은 2정규형·이행 함수 종속은 3정규형에서 없앤다는 짝을 묻는 문제로 나옵니다.
  • 실기: 함수 종속(Functional Dependency, 자료에 따라 함수적 종속)·결정자(Determinant)·종속자(Dependent)·완전 함수 종속(Full Functional Dependency)·부분 함수 종속(Partial Functional Dependency)·이행 함수 종속(Transitive Functional Dependency). 완전·부분·이행도 '함수적 종속'을 붙인 이름을 받습니다.

확인 문제

1. 다음 네 표 가운데 부분 함수 종속이 있는 것을 고르세요.

  • ① 학과(학과코드, 학과명, 건물) — 기본키 학과코드
  • ② 좌석예약(공연코드, 좌석번호, 관람객, 좌석등급) — 기본키 '공연코드 + 좌석번호', 좌석등급은 좌석번호로 정해진다
  • ③ 수강(학번, 과목코드, 점수) — 기본키 '학번 + 과목코드'
  • ④ 장비(장비번호, 모델코드, 모델명) — 기본키 장비번호, 모델명은 모델코드로 정해진다
정답

②입니다. 기본키는 '공연코드 + 좌석번호' 둘인데, 좌석등급은 그 가운데 좌석번호만으로 정해집니다. 기본키의 일부가 결정자이므로 부분 함수 종속입니다.

  • ① 키가 아닌 속성이 기본키에 종속되면 부분이라고 봤습니다. 기본키가 속성 하나면 '일부'가 없어 부분 함수 종속은 생기지 않습니다.
  • ③ 기본키가 둘이면 부분 함수 종속이 반드시 있다고 봤습니다. 점수는 학번과 과목코드를 함께 알아야 정해지는 완전 함수 종속입니다.
  • ④ 기본키 전체가 아닌 것이 정하면 모두 부분이라고 봤습니다. 모델명의 결정자인 모델코드는 기본키의 일부가 아니라 키가 아닌 속성이어서 이행 함수 종속입니다.

2. 사원 표에서 사번을 알면 그 사원의 전화번호가 반드시 하나로 정해지고, 이 관계를 사번 → 전화번호로 적었습니다. 다음 (가)~(다)에 맞는 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 사번과 전화번호 사이의 이런 관계를 가리키는 이름입니다.
  • (나) 사번처럼 다른 속성의 값을 정하는 쪽을 가리키는 이름입니다.
  • (다) 전화번호처럼 값이 따라 정해지는 쪽을 가리키는 이름입니다.
정답

받는 답: (가) 함수 종속(Functional Dependency) · (나) 결정자(Determinant) · (다) 종속자(Dependent)

실마리는 '값 하나에 다른 값이 반드시 하나로 따라 정해진다'(가)와, 그 관계를 화살표로 적었을 때 값을 정하는 쪽(나)·따라오는 쪽(다)입니다.

  • 같은 이름의 다른 꼴: (가) 함수적 종속 — 자료에 따라 그렇게 부르므로 함께 받습니다. 영문은 같습니다.
  • 틀리는 꼴 종속자 — (나)에: 값이 따라 정해지는 쪽입니다. 사번은 전화번호를 정하는 쪽이라 반대입니다.
  • 틀리는 꼴 기본키 — (나)에: 행을 구별하는 키의 이름입니다. 사번은 기본키이면서 결정자이지만, 화살표 왼쪽을 가리키는 이름은 결정자입니다. 기본키가 아닌 속성도 결정자가 될 수 있습니다.

3. 표 둘을 봅니다.

  • 배송(주문번호, 상품번호, 배송수량, 상품명) — 기본키 '주문번호 + 상품번호'. 상품명은 상품번호만으로 정해집니다.
  • 운송(운송장번호, 택배사코드, 택배사이름) — 기본키 운송장번호. 택배사이름은 택배사코드만으로 정해집니다.

다음 (가)~(다)에 맞는 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 배송 표의 (주문번호, 상품번호) → 배송수량입니다. 왼쪽에서 하나를 빼면 배송수량이 하나로 정해지지 않습니다.
  • (나) 배송 표의 상품번호 → 상품명입니다. 기본키 가운데 한 속성만으로 상품명이 정해집니다.
  • (다) 운송 표의 운송장번호 → 택배사코드 → 택배사이름⁠입니다. 택배사이름은 키가 아닌 속성을 거쳐 기본키에 딸려 옵니다.
정답

받는 답: (가) 완전 함수 종속(Full Functional Dependency) · (나) 부분 함수 종속(Partial Functional Dependency) · (다) 이행 함수 종속(Transitive Functional Dependency)

실마리는 화살표가 나오는 곳입니다. 기본키 전체여야 하면 (가), 기본키의 일부면 (나), 키가 아닌 속성을 거치면 (다)입니다.

  • 같은 이름의 다른 꼴: 완전 함수적 종속·부분 함수적 종속·이행적 함수 종속 — 자료에 따라 그렇게 부르므로 함께 받습니다.
  • 틀리는 꼴 부분 함수 종속 — (다)에: 결정자가 기본키의 일부일 때입니다. 운송 표의 기본키는 운송장번호 하나라 '일부'가 없습니다.
  • 틀리는 꼴 이행 함수 종속 — (나)에: 키가 아닌 속성을 거쳐 딸려 올 때입니다. 상품번호는 기본키의 일부입니다.

4. 과목 표는 DS 자료구조(선수과목 없음) · OS 운영체제(선수과목 DS) · NW 네트워크(선수과목 OS) 세 행입니다. 선수과목이 적힌 두 행만 보면 DS에 OS가, OS에 NW가 하나씩 짝지어집니다. 그러면 선수과목 → 과목코드라고 할 수 있을까요?

정답

할 수 없습니다. 함수 종속은 지금 들어 있는 값이 아니라, 앞으로 들어올 수 있는 모든 행에서 지켜지는 업무 규칙입니다. 자료구조를 선수과목으로 하는 과목이 하나 더 생기면 DS 하나에 과목코드가 둘이 되어 바로 깨집니다. 한 과목이 여러 과목의 선수과목이 될 수 있으므로 함수 종속이 아닙니다. 방향을 돌린 과목코드 → 선수과목은 과목마다 선수과목이 하나로 정해지므로 함수 종속입니다. 화살표는 한쪽 방향으로만 성립할 수 있습니다.

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

정보처리기사 목차로