2025-08-11 23:27

Tags:

함수 종속성 핸드북 데이터 관계의 숨겨진 규칙을 밝히는 열쇠

만들어진 이유: 데이터 관계의 근본 원리

데이터베이스의 세계에서 **함수 종속성(Functional Dependency)**은 모든 데이터의 관계를 설명하는 가장 기본적인 언어입니다. 이는 마치 물리 법칙이 우주의 움직임을 설명하듯, 한 테이블 내의 속성(Attribute, 열)들이 서로 어떻게 연결되고 영향을 주는지에 대한 규칙. 이 개념을 이해하지 못하면 데이터 정규화(Normalization)는 물론, 효율적인 데이터베이스 설계 자체가 불가능합니다.

정규화는 데이터 중복을 제거하고 데이터의 무결성을 보장하기 위해 테이블을 쪼개는 과정. 그런데 무엇을 기준으로 쪼개야 할까요? 바로 이 함수 종속성이 그 기준을 제시합니다. 어떤 속성이 다른 속성의 값을 결정하는지 파악함으로써, 우리는 데이터의 논리적인 덩어리를 발견하고 이를 독립적인 테이블로 분리해낼 수 있습니다.

예를 들어, ‘학생’과 ‘수강 과목’을 한 테이블에 저장한다고 가정해봅시다. 학생ID학생이름을 결정하고, 과목ID과목이름을 결정하는 관계가 성립. 즉, 학생ID가 바뀌면 학생이름이 바뀌고, 과목ID가 바뀌면 과목이름이 바뀌는 것입니다. 함수 종속성은 이처럼 한 속성의 값이 다른 속성의 값을 유일하게 결정하는 관계를 공식적으로 정의한 개념. 이 규칙을 파악해야만 앞에서 언급한 데이터 이상 현상(삽입, 갱신, 삭제 이상)을 방지할 수 있습니다.

함수 종속성의 핵심 구조: 결정자와 종속자

함수 종속성은 간단한 공식으로 표현됩니다. A→B 이 공식은 “속성 A가 속성 B를 함수적으로 결정한다”는 의미입니다. 여기서 A와 B는 각각 다음과 같이 부릅니다.

  • 결정자(Determinant): 화살표(→) 왼쪽에 위치. 종속자의 값을 유일하게 결정하는 하나 이상의 속성 집합. 결정자는 종속자의 ‘주인’ 또는 ‘원인’ 역할을 수행합니다.

  • 종속자(Dependent): 화살표(→) 오른쪽에 위치. 결정자의 값에 의해 유일하게 결정되는 속성. 종속자는 결정자에 ‘의존’하는 ‘결과’ 또는 ‘정보’를 담고 있습니다.

예를 들어, 직원ID직원이름을 결정하는 관계는 직원ID직원이름으로 표현. 여기서 직원ID는 결정자이고, 직원이름은 종속자입니다.

함수 종속성은 크게 세 가지 유형으로 나눌 수 있습니다. 이 유형들을 이해하는 것이 데이터베이스 정규화의 핵심입니다.

1. 완전 함수 종속(Full Functional Dependency)

완전 함수 종속은 한 속성 집합이 다른 속성을 결정할 때, 그 속성 집합의 전체가 필요할 때 성립. 즉, 결정자의 어떤 부분집합만으로는 종속자를 결정할 수 없습니다.

예시: 수강 테이블이 (학번, 과목코드)를 **복합 기본 키(Composite Primary Key)**로 가집니다. 수강 테이블에는 학번, 과목코드 외에 성적 속성이 있습니다. 이때 성적학번과목코드 둘 다 알아야 유일하게 결정됩니다. 학번만으로는 어떤 과목의 성적인지 알 수 없고, 과목코드만으로는 어떤 학생의 성적인지 알 수 없기 때문입니다. 이 관계는 (학번, 과목코드)성적으로 표현되며, 성적(학번, 과목코드)완전 함수 종속됩니다.

2. 부분 함수 종속(Partial Functional Dependency)

부분 함수 종속은 복합 기본 키를 가진 테이블에서, 기본 키의 일부만으로도 특정 속성의 값이 결정되는 경우. 이 현상은 **2차 정규형(2NF)**의 위반을 의미.

예시: 위 수강 테이블에 학생이름과목명 속성이 추가되었다고 가정. 학번학생이름: 학생이름은 기본 키의 일부인 학번만으로 결정됩니다. 과목코드과목명: 과목명은 기본 키의 일부인 과목코드만으로 결정됩니다. 이 관계들은 부분 함수 종속. 이 상태에서 학생이름이나 과목명을 수정하려면 (학번, 과목코드)가 포함된 모든 행을 찾아야 하므로 갱신 이상이 발생합니다. 2NF는 이러한 부분 함수 종속을 제거하기 위해 테이블을 분리합니다.

3. 이행 함수 종속(Transitive Functional Dependency)

이행 함수 종속은 기본 키가 아닌 속성(A)이 또 다른 기본 키가 아닌 속성(B)을 결정하는 경우. 즉, 기본 키(PK) → A, 그리고 A → B의 관계가 성립. 마치 기차역도시도지사와 같이 중간다리를 건너서 종속되는 형태. 이 현상은 **3차 정규형(3NF)**의 위반을 의미.

예시: 직원 테이블이 직원ID를 기본 키로 가집니다. 직원ID부서ID: 직원ID부서ID를 결정. 부서ID부서이름: 부서ID부서이름을 결정. 이 관계는 직원ID부서ID부서이름의 형태. 부서이름은 기본 키인 직원ID이행적으로 종속됩니다. 이 상태에서는 같은 부서의 직원 정보를 여러 행에 중복해서 저장하게 되므로, 부서이름을 변경할 때 갱신 이상이 발생. 3NF는 이행 함수 종속을 제거하기 위해 부서ID부서이름을 별도의 테이블로 분리합니다.

실전 적용: 함수 종속성 분석 및 테이블 분리

실제 데이터베이스 설계에서 함수 종속성을 어떻게 활용하는지 예시를 통해 자세히 알아보겠습니다.

비정규화된 테이블: 수강_및_교수_정보

학번학생이름과목코드과목명교수ID교수명
A101김민준C101데이터베이스P201이재홍
A101김민준C102프로그래밍P202박수연
A102이서윤C101데이터베이스P201이재홍

함수 종속성 파악:

  1. 기본 키 후보: 테이블의 모든 행을 유일하게 식별할 수 있는 속성 집합은 (학번, 과목코드)입니다. 따라서 이 둘을 복합 기본 키로 설정합니다.

  2. 종속성 분석:

    • 학번학생이름: 부분 함수 종속. 학생이름은 기본 키의 일부인 학번에만 종속.

    • 과목코드과목명: 부분 함수 종속. 과목명은 기본 키의 일부인 과목코드에만 종속.

    • 과목코드교수ID: 부분 함수 종속. 교수ID는 기본 키의 일부인 과목코드에만 종속.

    • 교수ID교수명: 이행 함수 종속. 교수명은 기본 키가 아닌 교수ID에 의해 결정되며, 교수ID과목코드에 의해 결정. 즉, (학번, 과목코드)교수ID교수명 관계가 성립.

정규화 실행:

  1. 2차 정규형(2NF)으로 분리: 부분 함수 종속을 제거하기 위해 학번에 종속된 정보와 과목코드에 종속된 정보를 분리합니다.

    • 학번에 종속된 속성(학생이름) 분리: 학생 테이블 | 학번 (PK) | 학생이름 | | :--- | :--- | | A101 | 김민준 | | A102 | 이서윤 |

    • 과목코드에 종속된 속성(과목명, 교수ID, 교수명) 분리: 과목_정보 테이블 | 과목코드 (PK) | 과목명 | 교수ID | 교수명 | | :--- | :--- | :--- | :--- | | C101 | 데이터베이스 | P201 | 이재홍 | | C102 | 프로그래밍 | P202 | 박수연 |

    • 나머지 속성으로 수강 테이블 생성: 수강 테이블 | 학번 (PK, FK) | 과목코드 (PK, FK) | | :--- | :--- | | A101 | C101 | | A101 | C102 | | A102 | C101 |

  2. 3차 정규형(3NF)으로 분리: 과목_정보 테이블에는 교수ID교수명이라는 이행 함수 종속이 남아있습니다. 이를 제거하기 위해 테이블을 다시 분리합니다.

    • 교수ID에 종속된 속성(교수명) 분리: 교수 테이블 | 교수ID (PK) | 교수명 | | :--- | :--- | | P201 | 이재홍 | | P202 | 박수연 |

    • 과목_정보 테이블에서 교수명 제거: 과목 테이블 | 과목코드 (PK) | 과목명 | 교수ID (FK) | | :--- | :--- | :--- | | C101 | 데이터베이스 | P201 | | C102 | 프로그래밍 | P202 |

최종적으로 학생, 과목, 교수, 수강이라는 네 개의 테이블이 생성됩니다. 이 테이블들은 모두 3차 정규형을 만족하며, 데이터 중복이 최소화되고 무결성이 보장된 상태입니다.

심화 내용: BCNF와 함수 종속성의 확장

대부분의 데이터베이스는 3차 정규형(3NF)까지 정규화하는 것으로 충분. 그러나 때로는 3NF로도 해결되지 않는 복잡한 함수 종속성이 존재. **BCNF(Boyce-Codd Normal Form)**가 바로 그 경우를 다루는 더 엄격한 정규형.

BCNF는 “모든 결정자는 후보 키(Candidate Key)여야 한다”는 규칙을 가집니다. 여기서 후보 키는 한 테이블에서 각 행을 유일하게 식별할 수 있는 모든 최소 속성 집합. 기본 키는 여러 후보 키 중 하나를 선택한 것일 뿐입니다.

BCNF가 필요한 경우는 다음과 같은 예시. 한 테이블에 복수의 후보 키가 있고, 이들이 서로 겹치면서(Overlap) 기본 키가 아닌 속성이 다른 속성을 결정하는 복잡한 종속성이 있을 때입니다. 이러한 복잡한 상황을 해결하려면, 모든 결정자가 후보 키가 되도록 테이블을 더 세밀하게 분리해야 합니다.

함수 종속성을 정확히 파악하는 것은 데이터 모델링의 시작점이자 끝. 이를 통해 데이터베이스의 논리적 구조를 명확하게 이해하고, 데이터의 중복과 불일치를 사전에 방지할 수 있습니다.

요약하자면, 함수 종속성은 데이터베이스 설계의 가장 근본적인 도구이며, 이를 통해 데이터의 무결성을 지키고 효율적인 시스템을 구축하는 기반을 마련할 수 있습니다.

References

정규화 함수종속성