🔹 제3정규형(3NF)란?
1. 3NF(제3정규형)의 정의
제3정규형(3NF, Third Normal Form)은 제2정규형(2NF)을 만족하면서, 이행적 종속성(Transitive Dependency)을 제거하여 데이터 무결성을 더욱 강화하는 데이터베이스 정규화 단계입니다.
즉, 기본 키(Primary Key)가 아닌 모든 속성(Non-Key Attribute)은 오직 기본 키에만 의존해야 하며, 다른 비식별자 속성(Non-Key Attribute)에 종속되지 않아야 합니다.
✅ 3NF의 주요 원칙:
- 테이블이 2NF(제2정규형)를 만족해야 함
- 이행적 종속성(Transitive Dependency)을 제거해야 함
- 기본 키(Primary Key)가 아닌 컬럼은 오직 기본 키에만 종속되어야 함
📌 3NF를 적용하면 데이터의 독립성을 강화하고, 수정 및 삭제 시 데이터 일관성을 유지할 수 있음
🔹 3NF를 충족하지 않는 테이블 예시
✔️ 2NF를 만족하지만 3NF를 위반하는 테이블
주문ID (PK) | 고객ID (FK) | 고객명 | 고객연락처 | 고객주소 |
---|---|---|---|---|
101 | 1 | 홍길동 | 010-1111-2222 | 서울시 강남구 |
102 | 2 | 이영희 | 010-3333-4444 | 부산시 해운대구 |
103 | 1 | 홍길동 | 010-1111-2222 | 서울시 강남구 |
📌 문제점:
- 고객명, 고객연락처, 고객주소는 주문ID가 아닌 고객ID에 종속됨 → 이행적 종속성 발생
- 고객 정보를 변경할 경우 모든 주문 데이터를 수정해야 하는 수정 이상(Update Anomaly) 발생 가능
- 고객 정보를 삭제할 경우 주문 데이터가 함께 삭제될 위험(삭제 이상)
🔹 3NF 적용 방법: 이행적 종속성 제거 및 테이블 분리
✔️ 3NF를 만족하는 테이블로 변환 (고객 정보 분리)
① 고객 테이블 (Customers)
고객ID (PK) | 고객명 | 고객연락처 | 고객주소 |
---|---|---|---|
1 | 홍길동 | 010-1111-2222 | 서울시 강남구 |
2 | 이영희 | 010-3333-4444 | 부산시 해운대구 |
② 주문 테이블 (Orders)
주문ID (PK) | 고객ID (FK) |
---|---|
101 | 1 |
102 | 2 |
103 | 1 |
📌 해결 방법:
- 고객 정보를 별도 테이블(Customers)로 분리하여 중복 제거
- 각 비식별자 속성이 기본 키에만 종속되도록 설계 → 3NF 충족
🔹 3NF 적용을 위한 SQL 예제
✔️ 비정규화된 테이블 생성 (3NF 위반)
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
CustomerName VARCHAR(100),
CustomerPhone VARCHAR(20),
CustomerAddress VARCHAR(255),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
✔️ 3NF를 만족하는 테이블로 변환 (고객 정보 분리)
-- 고객 테이블
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100),
Phone VARCHAR(20) UNIQUE,
Address VARCHAR(255)
);
-- 주문 테이블
CREATE TABLE Orders (
OrderID INT PRIMARY KEY AUTO_INCREMENT,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
📌 고객 정보를 Customers 테이블로 분리하여 중복을 최소화하고 데이터 무결성을 유지함
🔹 3NF의 장점과 단점
✅ 3NF의 장점
✔ 데이터 중복을 줄여 저장 공간 최적화
✔ 이행적 종속성을 제거하여 데이터 무결성 향상
✔ 삽입 이상, 수정 이상, 삭제 이상 방지
✔ 테이블 간 관계를 명확하게 정의하여 데이터 검색 성능 향상
❌ 3NF의 단점
✔ 테이블이 증가하면서 JOIN 연산 증가로 인해 성능 저하 가능성
✔ 복잡한 관계 설정으로 인해 SQL 쿼리 구조가 길어질 수 있음
🔹 3NF 실무 활용 사례
1. 전자상거래 시스템에서 고객, 주문, 상품 데이터 정규화
📌 문제:
- 고객 정보를 주문 테이블에 함께 저장하면 중복 발생 및 수정 이상 문제 발생
📌 해결책:
- 고객 정보(Customer), 주문 정보(Order), 주문 상세(OrderDetails) 테이블로 분리하여 3NF 적용
✔️ 정규화된 테이블 설계 (3NF 적용 후)
고객 테이블(Customers)
| 고객ID | 고객명 | 연락처 | 주소 |
|--------|--------|--------|--------|
| 1 | 홍길동 | 010-1111-2222 | 서울시 강남구 |
| 2 | 이영희 | 010-3333-4444 | 부산시 해운대구 |
주문 테이블(Orders)
| 주문ID | 고객ID | 주문일자 |
|--------|--------|--------|
| 101 | 1 | 2024-02-20 |
| 102 | 2 | 2024-02-21 |
📌 테이블을 분리하여 중복 제거 및 데이터 무결성 유지
📌 결론
✅ 제3정규형(3NF)은 데이터베이스 정규화의 세 번째 단계로, 2NF를 만족하면서 이행적 종속성을 제거하는 과정이다.
✅ 3NF를 적용하면 데이터 중복이 줄어들고, 데이터 무결성과 일관성이 향상된다.
✅ 고객, 주문, 상품과 같은 데이터가 포함된 시스템에서 3NF를 적용하면 데이터 관리가 더욱 효율적이다.
✅ 다만, 테이블이 증가하면서 JOIN 연산이 많아질 수 있으므로, 성능 최적화를 고려해야 한다.
'IT이야기 > 데이터베이스' 카테고리의 다른 글
ACID 특성: 데이터베이스 트랜잭션의 무결성을 보장하는 핵심 원칙 (0) | 2025.02.28 |
---|---|
트랜잭션(Transaction): 데이터 무결성과 일관성을 유지하는 핵심 개념 (0) | 2025.02.28 |
제2정규형(2NF): 데이터베이스 무결성을 강화하는 정규화 단계 (0) | 2025.02.28 |
제1정규형(1NF): 데이터베이스의 기본적인 정규화 단계 (0) | 2025.02.28 |
정규화(Normalization): 데이터베이스의 중복을 최소화하고 무결성을 유지하는 핵심 기법 (0) | 2025.02.28 |