제2정규형(2NF)이란?
제2정규형(Second Normal Form, 2NF)은 데이터베이스 정규화(Normalization) 과정의 두 번째 단계입니다.
테이블이 2NF를 만족하려면 다음 두 가지 조건을 충족해야 합니다.
- 해당 관계(relation)가 이미 1NF(제1정규형)의 모든 규칙을 만족할 것
- 모든 비주요 속성(non-key attribute)이 기본 키에 완전 함수 종속되어 있을 것
즉, 제2정규형의 핵심 목표는 기본 키에 대한 부분 종속성(Partial Dependency)을 제거하여 데이터 중복과 이상 현상(anomaly)을 방지하는 것입니다.
2NF 위반 사례
먼저 부분 종속성이 존재하는 <StudentProject> 테이블을 살펴보겠습니다.
| StudentID | ProjectID | StudentName | ProjectName |
| S89 | P09 | Olivia | Geo Location |
| S76 | P07 | Jacob | Cluster Exploration |
| S56 | P03 | Ava | IoT Devices |
| S92 | P05 | Alexandra | Cloud Deployment |
위 테이블에는 부분 종속성이 존재합니다. 그 이유를 하나씩 살펴보겠습니다.
이 테이블의 주요 속성(prime attribute), 즉 후보 키는 StudentID와 ProjectID로 구성된 복합 키입니다.
앞서 설명했듯이, 비주요 속성인 StudentName과 ProjectName이 복합 키의 일부에만 의존한다면 이를 '부분 종속'이라고 합니다.
- StudentName은 ProjectID와 무관하게 StudentID만으로 결정할 수 있으므로 부분 종속입니다.
- ProjectName 역시 StudentID와 무관하게 ProjectID만으로 결정할 수 있으므로 부분 종속입니다.
따라서 <StudentProject> 관계는 정규화 관점에서 2NF를 위반하며, 좋지 않은 데이터베이스 설계로 간주됩니다.
2NF로 변환한 예시
부분 종속성과 2NF 위반 문제를 해결하려면 위 테이블을 아래와 같이 분해(decompose)해야 합니다.
<StudentInfo> 테이블
| StudentID | ProjectID | StudentName |
| S89 | P09 | Olivia |
| S76 | P07 | Jacob |
| S56 | P03 | Ava |
| S92 | P05 | Alexandra |
<ProjectInfo> 테이블
| ProjectID | ProjectName |
| P09 | Geo Location |
| P07 | Cluster Exploration |
| P03 | IoT Devices |
| P05 | Cloud Deployment |
이처럼 테이블을 분해하면 모든 비주요 속성이 기본 키에 완전하게 종속되므로, 이제 관계는 데이터베이스 정규화의 제2정규형(2NF)을 만족하게 됩니다.
