IT이야기/데이터베이스

제2정규형(2NF): 데이터베이스 무결성을 강화하는 정규화 단계

Chiba-in 2025. 2. 28. 12:00

🔹 제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 연산이 많아질 수 있으므로, 성능 최적화를 고려해야 한다.