약 6분
읽기 설정
글자 크기
줄 간격
글꼴
3.5.3 3NF 이해
데이터베이스 설계에서 3NF(제3 정규형, Third Normal Form)는 데이터 중복을 최소화하고 데이터 무결성을 유지하기 위한 중요한 개념입니다. 3NF는 테이블의 모든 비주요 속성이 기본 키에 의존하면서도 서로 독립적이어야 한다는 규칙을 따릅니다. 이를 통해 데이터베이스의 효율성을 극대화하면서도 데이터를 안전하게 저장할 수 있습니다.
3NF의 필요성
복잡한 데이터 모델을 단순화하고, 무결성 오류를 감소시키며, 데이터 무결성을 유지하기 위해 3NF를 적용해야 합니다. 예를 들어, 동일한 데이터가 여러 곳에 존재할 경우, 한 곳의 데이터가 변경되어도 다른 곳에서는 변경되지 않는 오류가 발생할 수 있습니다.
3NF 조건
- 테이블이 2NF를 만족해야 합니다.
- 기본 키가 아닌 속성이 기본 키에만 의존해야 합니다. 즉, 기본 키의 부분 집합에 의존하면 안 됩니다.
예제
기존의 고객 주문 데이터 테이블이 다음과 같다고 가정해보겠습니다.
| OrderID | CustomerName | Product | Quantity |
|---|---|---|---|
| 1 | Alice | Laptop | 2 |
| 2 | Bob | Mouse | 5 |
| 3 | Alice | Keyboard | 1 |
이 테이블은 고객 정보, 제품 정보, 수량 정보가 혼합되어 있습니다. 여기서 CustomerName이 기본 키(OrderID)에만 의존하지 않고, 다른 속성에 그대로 종속되어 있습니다.
3NF 적용
3NF를 위해 테이블을 분리해 보겠습니다. 첫 번째 테이블은 고객 정보를, 두 번째 테이블은 주문 정보를 보관합니다.
Customers 테이블
| CustomerID | CustomerName |
|---|---|
| 1 | Alice |
| 2 | Bob |
Orders 테이블
| OrderID | CustomerID | Product | Quantity |
|---|---|---|---|
| 1 | 1 | Laptop | 2 |
| 2 | 2 | Mouse | 5 |
| 3 | 1 | Keyboard | 1 |
이 구조는 3NF를 만족합니다. CustomerID가 기본 키로 설정되었고, 고객 이름과 주문은 별개의 테이블에 저장되어 서로 독립적입니다.
실습
다음의 SQL 문을 사용하여 이러한 테이블을 생성해 봅시다.
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
Product VARCHAR(100),
Quantity INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
이 코드로 두 개의 테이블을 생성한 후 데이터를 삽입하여 3NF의 구조를 실습해 보세요. 마지막으로, SQL 쿼리를 작성하여 고객과 주문 정보를 조회해 보십시오.
정리
3NF는 데이터베이스 설계의 효율성을 높이고 데이터 무결성을 유지하는데 핵심적인 개념입니다. 이를 통해 여러분은 더욱 안정적이고 효과적인 데이터베이스 구조를 만들 수 있을 것입니다.
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
Product VARCHAR(100),
Quantity INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.