제2정규형(2NF): 데이터베이스 무결성을 강화하는 정규화 단계
🔹 제2정규형(2NF)란?
1. 2NF(제2정규형)의 정의
제2정규형(2NF, Second Normal Form)은 제1정규형(1NF)을 만족하면서, 부분적 종속성을 제거하여 데이터의 중복을 최소화하는 데이터베이스 정규화 단계입니다.
즉, 모든 비식별자 속성(Non-Key Attribute)이 기본 키(Primary Key) 전체에 종속되어야 하며, 기본 키의 일부분에만 의존하는 속성은 제거해야 합니다.
✅ 2NF의 주요 원칙:
- 테이블이 1NF(제1정규형)를 만족해야 함
- 기본 키의 일부분에만 종속된 컬럼(부분적 종속성, Partial Dependency) 제거
- 모든 비식별자 속성이 기본 키 전체에 완전 종속(Full Functional Dependency)되어야 함
📌 2NF를 적용하면 데이터 중복이 줄어들고, 삽입 이상(Insertion Anomaly), 수정 이상(Update Anomaly), 삭제 이상(Deletion Anomaly)이 해결됨
🔹 2NF를 충족하지 않는 테이블 예시
✔️ 1NF를 만족하지만 2NF를 위반하는 테이블
주문ID (PK) | 고객명 | 고객연락처 | 상품명 (PK) | 수량 |
---|---|---|---|---|
101 | 홍길동 | 010-1111-2222 | 노트북 | 1 |
101 | 홍길동 | 010-1111-2222 | 스마트폰 | 2 |
102 | 이영희 | 010-3333-4444 | 태블릿 | 1 |
📌 문제점:
- 고객명과 고객연락처는 주문ID(OrderID)와 직접적인 관계가 없음
- 주문 테이블은 상품과 관계가 있지만, 고객 정보까지 포함되어 중복 발생
- 고객 정보를 변경할 경우 모든 주문 데이터를 수정해야 하는 수정 이상(Update Anomaly) 발생 가능
🔹 2NF 적용 방법: 부분적 종속성 제거 및 테이블 분리
✔️ 2NF를 만족하는 테이블로 변환 (고객 정보 분리)
① 고객 테이블 (Customers)
고객ID (PK) | 고객명 | 고객연락처 |
---|---|---|
1 | 홍길동 | 010-1111-2222 |
2 | 이영희 | 010-3333-4444 |
② 주문 테이블 (Orders)
주문ID (PK) | 고객ID (FK) |
---|---|
101 | 1 |
102 | 2 |
③ 주문 상세 테이블 (OrderDetails)
주문ID (PK) | 상품명 (PK) | 수량 |
---|---|---|
101 | 노트북 | 1 |
101 | 스마트폰 | 2 |
102 | 태블릿 | 1 |
📌 해결 방법:
- 고객 정보를 별도 테이블(Customers)로 분리하여 중복 제거
- 주문 테이블(Orders)과 주문 상세 테이블(OrderDetails)을 따로 관리하여 데이터 무결성 유지
- 각 비식별자 속성이 기본 키 전체에 완전 종속됨 → 2NF 충족
🔹 2NF 적용을 위한 SQL 예제
✔️ 비정규화된 테이블 생성 (2NF 위반)
CREATE TABLE Orders (
OrderID INT,
CustomerName VARCHAR(100),
CustomerPhone VARCHAR(20),
ProductName VARCHAR(255),
Quantity INT,
PRIMARY KEY (OrderID, ProductName) -- 복합 기본 키 사용 (부분적 종속성 존재)
);
✔️ 2NF를 만족하는 테이블로 변환 (고객 정보 분리)
-- 고객 테이블
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100),
Phone VARCHAR(20) UNIQUE
);
-- 주문 테이블
CREATE TABLE Orders (
OrderID INT PRIMARY KEY AUTO_INCREMENT,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
-- 주문 상세 테이블
CREATE TABLE OrderDetails (
OrderID INT,
ProductName VARCHAR(255),
Quantity INT,
PRIMARY KEY (OrderID, ProductName),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
📌 고객 정보를 Customers 테이블로 분리하여 중복을 최소화하고 데이터 무결성을 유지함
🔹 2NF의 장점과 단점
✅ 2NF의 장점
✔ 데이터 중복을 줄여 저장 공간 최적화
✔ 삽입 이상, 수정 이상, 삭제 이상 방지
✔ 데이터 무결성과 일관성을 유지
✔ 테이블 간 관계를 명확하게 정의하여 데이터 검색 성능 향상
❌ 2NF의 단점
✔ 테이블이 분리되면서 JOIN 연산 증가로 인해 성능 저하 가능성
✔ 복잡한 관계 설정으로 인해 SQL 쿼리 구조가 길어질 수 있음
🔹 2NF 실무 활용 사례
1. 전자상거래 시스템에서 고객, 주문, 상품 데이터 정규화
📌 문제:
- 고객 정보를 주문 테이블에 함께 저장하면 중복 발생 및 수정 이상 문제 발생
📌 해결책:
- 고객 정보(Customer), 주문 정보(Order), 주문 상세(OrderDetails) 테이블로 분리하여 2NF 적용
✔️ 정규화된 테이블 설계 (2NF 적용 후)
고객 테이블(Customers)
| 고객ID | 고객명 | 연락처 |
|--------|--------|--------|
| 1 | 홍길동 | 010-1111-2222 |
| 2 | 이영희 | 010-3333-4444 |
주문 테이블(Orders)
| 주문ID | 고객ID | 주문일자 |
|--------|--------|--------|
| 101 | 1 | 2024-02-20 |
| 102 | 2 | 2024-02-21 |
주문 상세 테이블(OrderDetails)
| 주문ID | 상품명 | 수량 |
|--------|------|----|
| 101 | 노트북 | 1 |
| 101 | 스마트폰 | 2 |
📌 테이블을 분리하여 중복 제거 및 데이터 무결성 유지
📌 결론
✅ 제2정규형(2NF)은 데이터베이스 정규화의 두 번째 단계로, 1NF를 만족하면서 부분적 종속성을 제거하는 과정이다.
✅ 2NF를 적용하면 데이터 중복이 줄어들고, 데이터 무결성과 일관성이 향상된다.
✅ 고객, 주문, 상품과 같은 데이터가 포함된 시스템에서 2NF를 적용하면 데이터 관리가 더욱 효율적이다.
✅ 다만, 테이블이 증가하면서 JOIN 연산이 많아질 수 있으므로, 성능 최적화를 고려해야 한다.