[Database] 함수 종속성

GreenBean·2022년 1월 17일
1
post-thumbnail

함수 종속성

함수 종속성(Functional Dependency)이란?

  • 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 관계종속성이라 함
  • A → B로 표기하며 A를 B의 결정자라고 함

  • 위의 그림과 같은 학생 수강 성적 릴레이션이 있다고 가정했을 때, 학생과 수강 그리고 성적의 속성에는 의존성이 존재한다고 표현
  • 여기서 말하는 의존성이란 501이라는 학생번호를 보면 학생이름이 박지성으로 정해지는 관계를 의미하며, 정리하면 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존관계속성 B는 속성 A에 종속한다(Dependent) 또는 속성 A는 속성 B를 결정한다(Determine)라고 함
    • 학생번호 → 학생이름 처럼 A → B로 표현하며 A가 B를 결정한다고 하여 A를 B의 결정자라고 함
      • 그 외에도 아래의 그림에는 학과 → 학과사무실, 강좌이름 → 강의실과 같은 종속관계가 있음
      • 종속하지 않는 관계로는 학과 → 학생번호, 학생이름 → 강좌이름이 있음
      • 학생이름 → 학과는 종속하는 것처럼 보이지만 동명이인의 학생이 있는 경우 그 학생의 이름은 학과를 결정하지 못하므로 종속의 관계가 아님

함수 종속성 다이어그램

  • 릴레이션의 속성: 직사각형
  • 속성 간의 함수 종속성: 화살표
  • 복합 속성: 직사각형으로 묶어서 그림

  • 함수 종속성 다이어그램(Functional Dependency Diagram)은 함수 종속성을 나타내는 표기법
    • 학생이름, 학과, 주소 등과 같은 릴레이션의 속성은 직사각형으로 표기
    • 그리고 두 속성이 종속적인 관계를 가질 때 예를 들면 학생번호가 학생이름을 결정하는 관계를 가질 때는 화살표를 이용하여 종속성을 표현
    • 또한 복합속성의 경우에는 그 속성들을 묶어 하나의 직사각형으로 표시
      • 예를 들어 학생번호와 강좌이름을 확인하면 성적을 확인할 수 있으므로 학생번호와 강좌이름을 큰 직사각형으로 묶어 복합 속성으로 두고 성적에 화살표 연결을 해줌

함수 종속성 규칙

  • 부분집합 규칙 : If Y ⊆ X, then X -> Y
  • 증가 규칙 : If X -> Y then XZ -> YZ
  • 이행 규칙 : If X -> Y and Y -> Z then, X -> Z
  • 결합 규칙 : If X -> Y and X -> Z then, X -> YZ
  • 분해 규칙 : If X -> YZ, then X -> Y and X -> Z
  • 유사이행 규칙 : If X -> Y and WY -> Z, then WX -> Z

릴레이션과 기본키

  • 관계(Relationship)란 개체 사이의 연관성을 나타내는 개념
  • 관계 타입(Relationhip Type)이란 개체 타입과 개체 타입 간의 연결 가능한 관계를 정의한 것
  • 관계 집합(Relationship set)은 관계로 연결된 집합을 의미

  • 릴레이션의 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 함
    • 기본키가 함수의 종속성에서 어떤 역할을 하는지 알면 이상 현상을 제거하는 정규화 과정을 쉽게 이해할 수 있음
    • 여기서 기본키한 릴레이션의 다른 속성들을 모두 결정할 수 있어야 함
      • 위와 같은 그림에서 이름을 기본키로 사용하면 어느 과인지, 어디에 사는지, 어떤 학점을 받았는지 알 수 있으므로 이름이라는 속성이 기본키가 된다고 분석할 수 있음

이상현상과 결정자

  • 이상현상은 한 개의 릴레이션에 두 개 이상의 속성이 포함되어 있고 기본키가 아닌 속성이 결정자일 때 발생
    • 위의 학생수강성적 릴레이션의 경우 기본키를 지닌 학생 정보(학생번호, 학생이름, 주소, 학과)와 기본키가 아니지만 결정자적 성질을 지닌 강좌 정보(강좌이름, 강의실)가 한 릴레이션에 포함되어 이상현상이 나타남
    • 그 외에도 학과, 학생 번호, 강좌 이름은 기본키가 아니면서 결정자이기 때문에 이상현상을 해결하기 위해 총 4개의 릴레이션으로 학생수강성적 릴레이션을 분해하면 됨

profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글