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 | 이재홍 |
함수 종속성 파악:
-
기본 키 후보: 테이블의 모든 행을 유일하게 식별할 수 있는 속성 집합은
(학번, 과목코드)
입니다. 따라서 이 둘을 복합 기본 키로 설정합니다. -
종속성 분석:
-
학번
→학생이름
: 부분 함수 종속.학생이름
은 기본 키의 일부인학번
에만 종속. -
과목코드
→과목명
: 부분 함수 종속.과목명
은 기본 키의 일부인과목코드
에만 종속. -
과목코드
→교수ID
: 부분 함수 종속.교수ID
는 기본 키의 일부인과목코드
에만 종속. -
교수ID
→교수명
: 이행 함수 종속.교수명
은 기본 키가 아닌교수ID
에 의해 결정되며,교수ID
는과목코드
에 의해 결정. 즉,(학번, 과목코드)
→교수ID
→교수명
관계가 성립.
-
정규화 실행:
-
2차 정규형(2NF)으로 분리: 부분 함수 종속을 제거하기 위해
학번
에 종속된 정보와과목코드
에 종속된 정보를 분리합니다.-
학번
에 종속된 속성(학생이름
) 분리:학생
테이블 | 학번 (PK) | 학생이름 | | :--- | :--- | | A101 | 김민준 | | A102 | 이서윤 | -
과목코드
에 종속된 속성(과목명
,교수ID
,교수명
) 분리:과목_정보
테이블 | 과목코드 (PK) | 과목명 | 교수ID | 교수명 | | :--- | :--- | :--- | :--- | | C101 | 데이터베이스 | P201 | 이재홍 | | C102 | 프로그래밍 | P202 | 박수연 | -
나머지 속성으로
수강
테이블 생성:수강
테이블 | 학번 (PK, FK) | 과목코드 (PK, FK) | | :--- | :--- | | A101 | C101 | | A101 | C102 | | A102 | C101 |
-
-
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) 기본 키가 아닌 속성이 다른 속성을 결정하는 복잡한 종속성이 있을 때입니다. 이러한 복잡한 상황을 해결하려면, 모든 결정자가 후보 키가 되도록 테이블을 더 세밀하게 분리해야 합니다.
함수 종속성을 정확히 파악하는 것은 데이터 모델링의 시작점이자 끝. 이를 통해 데이터베이스의 논리적 구조를 명확하게 이해하고, 데이터의 중복과 불일치를 사전에 방지할 수 있습니다.
요약하자면, 함수 종속성은 데이터베이스 설계의 가장 근본적인 도구이며, 이를 통해 데이터의 무결성을 지키고 효율적인 시스템을 구축하는 기반을 마련할 수 있습니다.