제3정규형(3NF, Third Normal Form)은 데이터베이스 설계에서 데이터의 무결성과 중복을 최소화하기 위한 중요한 단계입니다. 제3정규형은 제2정규형을 만족하면서, 비기본 속성 간의 이행적 종속성을 제거하는 것을 목표로 합니다. 이 과정은 데이터베이스의 구조를 정제하여 데이터의 중복을 줄이고 무결성을 유지하는 데 도움을 줍니다.
제3정규형(3NF)의 정의
**제3정규형(3NF)**은 다음 조건을 만족하는 상태를 의미합니다:
- 제2정규형(2NF) 만족: 테이블이 제1정규형(1NF)을 만족하고, 모든 비기본 속성이 기본 키에 완전히 종속되어 있어야 합니다.
- 이행적 종속성 제거: 모든 비기본 속성이 기본 키에 직접적으로 종속되어야 하며, 비기본 속성 간의 이행적 종속성이 없어야 합니다. 즉, 비기본 속성 B가 비기본 속성 C에 종속되면 안 됩니다.
이행적 종속성(Transitive Dependency)
- 정의: A → B, B → C가 있을 때, A → C가 성립하는 경우를 의미합니다. 즉, A가 C를 직접 결정하지 않지만, B를 통해서 C를 결정할 때 발생합니다.
제3정규형의 예
1. 비정규형 테이블
- 테이블: Employee
- 문제: DepartmentLocation은 Department에 의해 결정되며, 이는 Department가 비기본 속성 DepartmentLocation에 영향을 미치므로 이행적 종속성이 존재합니다. 따라서 EmployeeID → Department → DepartmentLocation이 성립합니다.
-
css코드 복사EmployeeID | Name | Department | DepartmentLocation -----------|-----------|------------|-------------------- 1 | John Doe | HR | Building A 2 | Jane Smith| IT | Building B 3 | Bob Brown | HR | Building A
2. 제3정규형 변환
이행적 종속성을 제거하기 위해 테이블을 분해합니다. Department와 DepartmentLocation을 별도의 테이블로 분리합니다.
- Employee 테이블:
-
diff코드 복사EmployeeID | Name | Department -----------|-----------|------------ 1 | John Doe | HR 2 | Jane Smith| IT 3 | Bob Brown | HR
- Department 테이블:
-
css코드 복사Department | DepartmentLocation -----------|-------------------- HR | Building A IT | Building B
이제 DepartmentLocation은 Department에 직접적으로 종속되며, 비기본 속성 간의 이행적 종속성이 제거되었습니다.
제3정규형의 중요성
- 데이터 중복 최소화: 비기본 속성 간의 이행적 종속성을 제거함으로써 데이터의 중복을 줄일 수 있습니다.
- 데이터 무결성 유지: 각 테이블이 논리적으로 관련된 정보를 포함하므로 데이터 무결성을 유지하기 쉬워집니다.
- 데이터 수정 용이: 데이터가 더 명확하게 분리되므로, 데이터 업데이트나 삭제 시 불필요한 데이터 중복이 방지됩니다.
제3정규형 적용 시 고려 사항
- 속성 분석: 각 비기본 속성이 기본 키에 직접적으로 종속되는지 분석합니다. 이행적 종속성이 발견되면 테이블을 적절히 분해합니다.
- 테이블 분해: 이행적 종속성을 제거하기 위해 관련된 속성을 별도의 테이블로 나누고, 외래 키를 사용하여 관계를 정의합니다.
- 무결성 제약: 외래 키와 같은 제약 조건을 정의하여 데이터의 무결성을 유지합니다.
요약
제3정규형(3NF)은 제2정규형을 만족하고 비기본 속성 간의 이행적 종속성을 제거하는 과정입니다. 이 과정은 데이터베이스의 구조를 정제하고, 데이터 중복을 최소화하며, 데이터 무결성을 유지하는 데 중요합니다. 제3정규형을 적용하면 데이터베이스의 설계가 더 효율적이고 유지 관리가 용이해집니다.