데이터베이스 정규화 완벽 가이드: 함수 종속부터 제3정규화(3NF)까지
데이터베이스 설계에 있어서 '정규화(Normalization)'는 불필요한 데이터 중복을 피하고, 데이터를 쉽게 검색할 수 있도록 관계형 스키마를 설계하는 핵심 과정입니다. 이 정규화 과정을 논리적이고 체계적으로 수행하기 위해 반드시 알아야 하는 절대적인 기준이 바로 **함수 종속(Functional Dependency)**입니다.
이번 블로그 포스트에서는 함수 종속의 수학적 정의부터 시작해, 이를 바탕으로 제1정규화(1NF)에서 제3정규화(3NF)까지 어떻게 데이터베이스가 최적화되는지 자세히 알아보겠습니다.
1. 정규화의 핵심: 함수 종속(Functional Dependency)이란?
데이터베이스는 현실 세계의 데이터와 그 제약 조건(Constraints)을 모델링합니다. 슈퍼키(Superkey)나 기본키(Primary Key)만으로는 현실 세계의 모든 복잡한 데이터 제약 조건을 표현할 수 없기 때문에 도입된 개념이 바로 함수 종속입니다.
함수 종속의 수학적 정의 관계형 스키마(relation schema) r(R)이 주어지고, 속성들의 집합 α⊆R 와 β⊆R이 있다고 가정해 봅시다. 이때 r(R)의 인스턴스에 존재하는 모든 튜플 쌍 t1과 t2에 대하여 다음 조건이 성립한다면, 해당 인스턴스는 함수 종속 **α→β**를 만족한다고 말합니다.
t1[α]=t2[α] 일 때, 항상 t1[β]=t2[β] 이다.
쉽게 말해, 어떤 속성 집합 α의 값을 알면 다른 속성 집합 β의 값을 유일하게 식별할 수 있다는 뜻입니다. 예를 들어 부서 이름(dept_name) -> 예산(budget)이라는 함수 종속이 있다면, 부서 이름이 같을 경우 그 부서의 예산은 항상 동일해야 합니다.
참고로, β가 α의 부분 집합일 때(예: A→A, AB→A) 이를 **자명한 함수 종속(trivial functional dependency)**이라고 부르며, 이는 모든 릴레이션에서 항상 성립합니다.
이러한 함수 종속 이론은 이후 설명할 모든 정규형(Normal Forms)을 정의하고 평가하는 수학적 근거가 됩니다.
2. 제1정규화 (1NF): 도메인의 원자성 확보
제1정규형(1NF, First Normal Form)은 관계형 데이터베이스 스키마가 갖추어야 할 가장 기본적인 형태입니다.
정의: 릴레이션 스키마 R에 속한 모든 속성의 도메인이 **원자적(Atomic)**일 때, 해당 스키마는 제1정규형을 만족합니다.
여기서 '원자적'이라는 것은 도메인의 요소가 더 이상 분할할 수 없는 단일 단위(indivisible units)로 간주됨을 의미합니다.
•
위반 사례: 직원 테이블에 '전화번호' 속성이 있고, 한 직원이 여러 개의 전화번호(다중값 속성, Multivalued attributes)를 배열이나 리스트 형태로 가지고 있다면 이는 1NF 위반입니다. 또한 주소를 '시', '구', '동'으로 나눌 수 있음에도 통째로 묶어 복합 속성(Composite attributes)으로 취급하여 저장하는 경우도 1NF를 위반할 수 있습니다.
함수 종속과의 관계: 제1정규화는 함수 종속성을 적용하기 위한 필수 전제 조건입니다. 속성값이 원자적이지 않고 리스트나 집합 형태를 띤다면, α→β라는 1:1 결정 관계를 명확히 성립시킬 수 없습니다. 따라서 모든 속성을 단일 값으로 평탄화(Flattening)하여 1NF를 만족시켜야만 비로소 함수 종속을 논할 수 있습니다.
3. 제2정규화 (2NF): 부분 함수 종속 제거
제2정규형(2NF)은 1NF를 만족하는 테이블에서, 복합키(Composite Key)의 일부분에만 종속되는 **부분 함수 종속(Partial Dependency)**을 제거하는 과정입니다.
정의: 관계형 스키마 R의 모든 속성 A가 다음 기준 중 하나를 충족하면 제2정규형(2NF)에 해당합니다.
1.
속성 A가 후보키(Candidate key)의 일부로 나타납니다 (즉, Prime attribute).
2.
속성 A가 후보키에 대해 부분적으로 종속되지 않습니다 (Not partially dependent).
수학적으로 부분 함수 종속 α→β란, α의 진부분집합(proper subset)인 γ가 존재하여 γ→β가 성립하는 경우를 말합니다.
예를 들어, 기본키가 {학생ID, 과목ID} 인 수강 테이블에 학생명이라는 속성이 있다고 가정해 보겠습니다. 학생명은 복합 기본키 전체 {학생ID, 과목ID}가 아니라, 오직 학생ID에 의해서만 결정됩니다 (학생ID -> 학생명). 이러한 부분 함수 종속이 존재하면 데이터 중복과 갱신 이상이 발생하므로, 테이블을 분해(Decomposition)하여 2NF를 만족시켜야 합니다.
4. 제3정규화 (3NF): 이행적 함수 종속 제거
제3정규형(3NF)은 데이터베이스 내에서 종속성을 보존(Dependency Preservation)하면서도 정보의 중복을 획기적으로 줄여주는 매우 중요한 정규형입니다.
정의 (함수 종속 기반): 릴레이션 스키마 R과 함수 종속 집합 F가 있을 때, F+에 속하는 모든 α→β (α⊆R, β⊆R)에 대해 다음 중 최소 하나가 성립하면 R은 3NF에 해당합니다.
1.
α→β는 자명한 함수 종속이다 (즉, β⊆α).
2.
α는 R의 슈퍼키(Superkey)이다.
3.
β−α에 속하는 각 속성 A가 R의 후보키(Candidate key)에 포함된다 (각 속성이 서로 다른 후보키에 포함되어도 무방함).
정의 (이행적 종속 기반): 수학적으로 좀 더 직관적인 3NF의 다른 정의는 **"후보키가 아닌 속성(Nonprime attribute)이 릴레이션의 키에 이행적으로 종속(Transitively dependent)되지 않아야 한다"**는 것입니다. 이행적 종속이란 α→β가 성립하고 β→α는 성립하지 않으며, 다시 β→A가 성립할 때, 속성 A가 α에 이행적으로 종속되는 것을 말합니다 (A∈/α,A∈/β).
예를 들어, 직원(직원ID, 부서명, 부서위치) 테이블에서 직원ID -> 부서명 이고 부서명 -> 부서위치 라면, 결과적으로 직원ID -> 부서위치라는 이행적 함수 종속이 발생합니다. 이는 3NF 위반이므로 직원 테이블과 부서 테이블로 분해하여 중복을 제거해야 합니다.
5. 마무리
데이터베이스 설계 시 1NF, 2NF를 거쳐 3NF 구조를 갖추는 것은 **데이터 중복을 방지(Lossless decomposition)하고 함수 종속성을 보존(Dependency preservation)**하는 훌륭한 타협점입니다. Boyce-Codd 정규형(BCNF)이라는 더 엄격한 기준도 존재하지만, 때로는 BCNF를 만족시키기 위해 함수 종속성 보존을 포기해야 하는 경우가 발생하기 때문에 실무에서는 3NF가 매우 이상적인 설계 기준으로 여겨집니다.
결과적으로, 올바른 데이터베이스를 설계하기 위해서는 가장 먼저 데이터 간의 **함수 종속(α→β)**을 명확히 정의하고, 이를 바탕으로 체계적인 정규화 알고리즘을 적용해 나가는 것이 필수적입니다.
