함수 종속(functional dependency)은 "A 값이 정해지면 B 값이 하나로 정해진다"는 관계로, A → B로 쓴다. 학번을 알면 이름을 안다면 학번 → 이름이다. 정규화의 각 단계는 특정한 종속을 없애는 작업이다.
용어
- 결정자(determinant): 다른 속성 값을 유일하게 정하는 속성.
학번 → 이름에서 학번 - 후보키(candidate key): 각 행을 유일하게 식별하는 최소한의 속성 집합. 유일성과 최소성을 모두 만족해야 한다. 학번·주민번호·이메일은 후보키가 될 수 있지만, (학번, 이름)은 학번만으로 충분하므로 최소성을 어긴다
- 기본키(primary key): 후보키 중 대표로 고른 하나
종속의 종류
- 부분 종속(partial dependency): 복합키의 일부에만 종속된다. (주문번호, 상품코드)가 키인데 주문일자가 주문번호에만 종속 → 2NF 위반
- 이행 종속(transitive dependency): A → B → C처럼 다른 컬럼을 거쳐 간접적으로 종속된다. 사번 → 부서코드 → 부서명 → 3NF 위반
- 결정자이지만 후보키가 아님: 교수 → 과목인데 교수가 후보키가 아님 → BCNF 위반
- 다치 종속(Multivalued Dependency, MVD):
A →→ B. A 값 하나에 B 값의 집합이 대응하고, 그것이 다른 속성과 무관하게 결정된다. 학생의 취미 집합과 외국어 집합이 독립인데 한 테이블에 두면 모든 조합이 생긴다 → 4NF 위반
함수 종속 A → B : A가 정해지면 B는 하나
다치 종속 A →→ B : A가 정해지면 B는 집합이 관계를 찾는 일은 결국 "이 사실은 무엇에 의해 정해지는가"를 묻는 도메인 분석이다. 같은 질문을 코드 쪽에서 하면 응집도가 되고, 키 구조를 잘못 잡으면 무결성 제약도 제대로 걸 수 없다.