Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

DBMS 종속성 유형 총정리: 함수적 종속성부터 부분 종속성까지

DBMS에서 종속성(Dependency)은 두 개 이상의 속성(Attribute) 사이의 관계를 의미합니다. 종속성은 데이터베이스 설계와 정규화(Normalization)의 기초가 되는 핵심 개념으로, DBMS에는 다음과 같은 유형이 있습니다.

  • 함수적 종속성 (Functional Dependency)
  • 완전 함수적 종속성 (Fully-Functional Dependency)
  • 이행적 종속성 (Transitive Dependency)
  • 다치 종속성 (Multivalued Dependency)
  • 부분 종속성 (Partial Dependency)

각 유형을 하나씩 자세히 살펴보겠습니다.

1. 함수적 종속성 (Functional Dependency)

테이블에 저장된 정보가 같은 테이블 내의 다른 정보를 고유하게 결정할 수 있을 때, 이를 함수적 종속성이라고 합니다. 즉, 하나의 릴레이션 내에서 두 속성 간의 연관 관계라고 볼 수 있습니다.

P가 Q를 함수적으로 결정한다면 다음과 같이 표기합니다.

P → Q

<Employee> 테이블 예시

EmpIDEmpNameEmpAge
E01Amit28
E02Rohit31

위 테이블에서 EmpNameEmpID에 함수적으로 종속됩니다. 주어진 EmpID 값에 대해 EmpName은 오직 하나의 값만 가질 수 있기 때문입니다.

EmpID → EmpName

2. 완전 함수적 종속성 (Fully-Functional Dependency)

한 속성이 다른 속성에 대해 완전 함수적으로 종속되려면, 해당 속성 전체에는 함수적으로 종속되지만 그 속성의 어떤 진부분집합(proper subset)에도 종속되지 않아야 합니다.

즉, 속성 Q가 속성 P에 완전 함수적으로 종속되려면 Q가 P에 함수적으로 종속되면서 동시에 P의 어떤 진부분집합에도 종속되지 않아야 한다는 의미입니다.

<ProjectCost> 테이블 예시

ProjectIDProjectCost
0011000
0025000

<EmployeeProject> 테이블 예시

EmpIDProjectIDDays (프로젝트 소요 일수)
E099001320
E056002190

위 릴레이션은 다음과 같이 표현할 수 있습니다.

EmpID, ProjectID, ProjectCost → Days

그러나 이것은 완전 함수적 종속이 아닙니다. 부분집합 {EmpID, ProjectID}만으로도 직원이 프로젝트에 소요한 {Days}를 충분히 결정할 수 있기 때문입니다.

따라서 실제 완전 함수적 종속성은 다음과 같습니다.

{EmpID, ProjectID} → Days

3. 이행적 종속성 (Transitive Dependency)

간접적인 관계로 인해 함수적 종속이 발생하는 것을 이행적 종속성이라고 합니다.

P → Q가 참이고 Q → R도 참이라면, P → R은 이행적 종속성입니다.

4. 다치 종속성 (Multivalued Dependency)

테이블에 하나 이상의 행(Row)이 존재할 때, 같은 테이블의 다른 행들이 함께 암시되는 경우 다치 종속성(Multi-valued Dependency)이 발생합니다.

테이블이 속성 P, Q, R을 가진다고 할 때, Q와 R은 P에 대한 다치 사실(multivalued facts)입니다.

다치 종속성은 이중 화살표로 표현합니다.

P→→Q
Q→→R

위의 경우, Q와 R이 서로 독립적인 속성일 때에만 다치 종속성이 성립합니다.

5. 부분 종속성 (Partial Dependency)

부분 종속성은 비주요(nonprime) 속성이 후보 키(candidate key)의 일부에 함수적으로 종속될 때 발생합니다.

제2정규형(2NF)은 바로 이 부분 종속성을 제거하기 위한 단계입니다.

<StudentProject> 테이블 예시

StudentIDProjectNoStudentNameProjectName
S01199KatieGeo Location
S02120OllieCluster Exploration

위 테이블에는 부분 종속성이 존재합니다. 그 이유를 살펴보겠습니다.

주요 키(primary key) 속성은 StudentIDProjectNo입니다.

앞서 설명한 대로, 비주요 속성인 StudentNameProjectName이 후보 키의 일부에 함수적으로 종속되면 부분 종속이 됩니다.

  • StudentNameStudentID만으로 결정할 수 있으므로, 이 릴레이션은 부분 종속입니다.
  • ProjectName 역시 ProjectID만으로 결정할 수 있으므로, 마찬가지로 부분 종속입니다.

이처럼 부분 종속성이 존재하는 테이블은 제2정규형(2NF)을 적용하여 테이블을 분리함으로써 데이터 중복과 이상 현상(anomaly)을 방지할 수 있습니다.