제 2 정규화(2NF)는 부분 함수적 종속을 제거하여 완전 함수적 종속을 가지게 만드는 과정이다.
함수적 종속(Functional Dependency)란 하나의 컬럼이 다른 컬럼을 결정하는 관계를 의미한다. 예를 들어, 학생 ID
가 학생 이름
을 결정할 수 있다면, 학생 이름
은 학생 ID
에 함수적으로 종속되어 있다고 할 수 있다.
부분 함수적 종속(Partial Dependency)이란 복합 키(여러 개의 컬럼이 합쳐져 기본 키 역할을 하는 경우)를 사용하는 테이블에서, 기본 키의 일부만으로 특정 컬럼이 종속되는 것을 의미한다. 예를 들어, 수강 테이블
에서 (학생 ID, 과목 ID)
가 기본 키라면, 학생 이름
이 학생 ID
에만 종속되는 경우가 발생할 수 있다. 이때 학생 이름
은 전체 기본 키 (학생 ID, 과목 ID)
에 대해 부분적으로만 종속된 것이다.
완전 함수적 종속(Full Functional Dependency)이란 기본 키의 모든 컬럼에 대해 종속된 상태를 의미한다. 제 2 정규화를 달성하려면 기본 키의 일부가 아닌 전체에 대해 완전히 종속되어야 한다.
제 2 정규화 과정은 이러한 부분 함수적 종속을 제거하기 위해 부분적으로 종속된 컬럼들을 별도의 테이블로 분리하는 것이다. 예를 들어, 학생 ID
와 관련된 속성들(예: 학생 이름, 학년)을 새로운 테이블 학생 테이블
로 분리하여, 수강 테이블
에서는 완전하게 종속된 속성들만 남겨두는 방식으로 나눌 수 있다.
이 과정을 통해 데이터 중복을 줄이고 테이블 구조가 보다 효율적으로 변하게 된다.
아래는 제 2 정규화 전후의 예시를 테이블로 정리한 것이다. 이 예시는 수강 테이블
을 기준으로 부분 함수적 종속을 제거하는 과정을 보여준다.
학생 ID | 과목 ID | 학생 이름 | 학년 | 과목 이름 |
---|---|---|---|---|
101 | A01 | 김철수 | 3학년 | 데이터베이스 |
102 | A02 | 이영희 | 2학년 | 운영체제 |
101 | A02 | 김철수 | 3학년 | 운영체제 |
103 | A03 | 박민수 | 1학년 | 네트워크 |
위의 테이블에서는 학생 ID
와 과목 ID
가 복합 기본 키다. 하지만 학생 이름
과 학년
은 학생 ID
에만 종속되어 부분 함수적 종속이 발생하고 있다.
학생 테이블
학생 ID | 학생 이름 | 학년 |
---|---|---|
101 | 김철수 | 3학년 |
102 | 이영희 | 2학년 |
103 | 박민수 | 1학년 |
수강 테이블
학생 ID | 과목 ID | 과목 이름 |
---|---|---|
101 | A01 | 데이터베이스 |
102 | A02 | 운영체제 |
101 | A02 | 운영체제 |
103 | A03 | 네트워크 |
이제 학생 테이블
과 수강 테이블
로 분리되어, 학생 ID
와 관련된 학생 이름
과 학년
속성들이 완전 함수적 종속 관계를 갖게 되었다. 이를 통해 데이터의 중복이 줄어들고, 테이블이 보다 효율적으로 관리될 수 있게 된다.