제1정규형 (1NF)
핵심 인사이트 (3줄 요약)
- 본질: 제1정규형 (First Normal Form, 1NF)은 데이터베이스 테이블의 모든 속성이 원자값 (Atomic Value)만을 가지며, 반복 그룹이나 다중값 속성이 없는 상태다.
- 가치: 1NF를 만족하면 데이터의基本 구조가確立되어, 데이터 조작의 일관성과 신뢰성을 보장하는基礎가 된다.
- 융합: 1NF는 관계형 데이터베이스의基本 요건으로, NoSQL의 문서/배열数据类型과 비교하여 관계형의 구조적 엄격성을示す。
Ⅰ. 개요 및 필요성 (Context & Necessity)
개념 정의
제1정규형 (1NF)은 테이블의 모든 속성이 원자값 (Atomic Value)만を持ち、반복 그룹이나 다중값 속성이 없는 상태다. 관계형 데이터베이스의 가장 기본적인 정규형이다.
원자값 (Atomic Value)란?
원자값은 더 이상 분할할 수 없는 단일 값을 의미한다.
┌─────────────────────────────────────────────────────────────────────┐
│ 원자값 vs 비원자값 비교 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ✅ 원자값 (1NF 충족): │
│ ┌────────┬────────┬────────┐ │
│ │ 고객ID │ 이름 │ 전화번호 │ │
│ ├────────┼────────┼────────┤ │
│ │ C001 │ 김철수 │ 010-1234-5678 │ │
│ └────────┴────────┴────────┘ │
│ → 전화번호가 단일 값으로 구성 │
│ │
│ ❌ 비원자값 (1NF 미충족): │
│ ┌────────┬────────┬──────────────────────┐ │
│ │ 고객ID │ 이름 │ 전화번호 │ │
│ ├────────┼────────┼──────────────────────┤ │
│ │ C001 │ 김철수 │ 010-1234-5678, │ │
│ │ │ │ 02-2345-6789 │ ← 여러 값! │
│ └────────┴────────┴──────────────────────┘ │
│ → 전화번호가 여러 개의 값 (반복 그룹)을含みます │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 비원자값은 한 셀 안에 여러 값이 쉼표 등으로 구분되어 저장된 경우다. 이런 경우 "첫 번째 전화번호만 조회"하거나 "특정 전화번호를 삭제"하는 것이 어려워진다. 1NF를 만족하려면 다중값 속성을 별도 테이블로 분리해야 한다.
비유
원자값은 급식 카드에 한 칸에 하나의 음식만 기입하는 것과 같다. "밥, 반찬, 국"을 한 칸에 모두 적으면 (비원자값) 개별 음식의 수량을管理하기 어렵지만, 각각의 칸에 구분하여 적으면 (원자값)管理이 쉬워진다.
- **📢 섹션 요약 비유:**우편번호를 "12345"로 하나만 쓰는 것은 원자값이고, "12345, 67890" 같이 나열하면 비원자값이 되어 문제가 생길 수 있어요.
Ⅱ. 1NF 위반 사례와 해결
문제: 다중값 속성
┌─────────────────────────────────────────────────────────────────────┐
│ 다중값 속성 문제와 해결 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ [1NF 미충족: 고객이 여러 전화번호를 가짐] │
│ ┌────────┬────────┬──────────────────────┐ │
│ │ 고객ID │ 이름 │ 전화번호 │ │
│ ├────────┼────────┼──────────────────────┤ │
│ │ C001 │ 김철수 │ 010-1234-5678, │ │
│ │ │ │ 02-2345-6789 │ │
│ └────────┴────────┴──────────────────────┘ │
│ │
│ [1NF 충족: 별도 테이블로 분리] │
│ customers: │
│ ┌────────┬────────┐ │
│ │ 고객ID* │ 이름 │ │
│ ├────────┼────────┤ │
│ │ C001 │ 김철수 │ │
│ └────────┴────────┘ │
│ │
│ phone_numbers: (고객ID + 전화번호) │
│ ┌────────┬──────────────┐ │
│ │ 고객ID† │ 전화번호 │ │
│ ├────────┼──────────────┤ │
│ │ C001 │ 010-1234-5678│ │
│ │ C001 │ 02-2345-6789 │ ← 고객ID 중복 (허용) │
│ └────────┴──────────────┘ │
│ * = customers의 기본 키 † = 외래 키 (참조) │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 전화번호가 여러 개면 쉼표로 구분하여 하나의 셀에 저장하기 쉽지만, 이는 1NF를 위반한다. 해결 방법은 전화번호를 별도 테이블로 분리하여 고객ID를 외래 키로 참조하게 하는 것이다. 이렇게 하면 전화번호 추가/삭제가 용이하고, 특정 고객의 전화번호 수 조회가 가능하다.
문제: 반복 그룹
반복 그룹은 동일한 구조의 값들이 반복되는 것이다.
┌─────────────────────────────────────────────────────────────────────┐
│ 반복 그룹 문제와 해결 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ [1NF 미충족: 주문 항목이 반복됨] │
│ ┌────────┬────────┬────────┬────────┬────────┐ │
│ │ 주문ID │ 고객명 │ 항목1 │ 항목2 │ 항목3 │ │
│ ├────────┼────────┼────────┼────────┼────────┤ │
│ │ O001 │ 김철수 │ TV │ 냉장고 │ 세탁기 │ ← 3개 항목 │
│ │ O002 │ 이영희 │ 컴퓨터 │ 모니터 │ (N/A) │ ← 2개 항목 │
│ └────────┴────────┴────────┴────────┴────────┘ │
│ → 항목 수의 상한이 제한됨, 항목별 분석 어려움 │
│ │
│ [1NF 충족: 주문항목 테이블 분리] │
│ orders: │
│ ┌────────┬────────┐ │
│ │ 주문ID* │ 고객ID │ │
│ └────────┴────────┘ │
│ │
│ order_items: │
│ ┌────────┬────────┬────────┐ │
│ │ 주문ID† │ 항목순번 │商品名 │ │
│ ├────────┼────────┼────────┤ │
│ │ O001 │ 1 │ TV │ │
│ │ O001 │ 2 │ 냉장고 │ │
│ │ O001 │ 3 │ 세탁기 │ │
│ │ O002 │ 1 │ 컴퓨터 │ │
│ │ O002 │ 2 │ 모니터 │ │
│ └────────┴────────┴────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 주문 항목가Orders表에 항목1, 항목2, 항목3...으로 나열되면, 항목 수의 상한이 설정되어 유연성이 떨어지고, 특정 항목에 대한 분석이困難하다. 별도 테이블로 분리하면 항목 수에 제한이 없고, 각 항목을 개별 행으로管理할 수 있다.
Ⅲ. 1NF 충족 조건 요약
┌─────────────────────────────────────────────────────────────────────┐
│ 1NF 충족 조건 체크리스트 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ □ 모든 열이 원자값 (단일 값)만 가짐 │
│ □ 반복 그룹이 없음 │
│ □ 다중값 속성이 별도 테이블로 분리됨 │
│ □ 행을 구분하는 기본 키가 존재 │
│ │
└─────────────────────────────────────────────────────────────────────┘
- **📢 섹션 요약 비유:**한 서랍에 같은 종류의 옷만 한 올씩折叠되어 있어야 (원자값), 옷을 세고 찾기 쉽듯이, 1NF도 데이터의基本整理原則입니다.
📌 관련 개념 맵 (Knowledge Graph)
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 원자값 | 더 이상 분할할 수 없는 단일 값으로, 1NF의 기본 조건이다. |
| 반복 그룹 | 동일 구조의 값들이 행 내에서 반복되는 것으로, 1NF 위반이다. |
| 다중값 속성 | 하나의 속성에 여러 값이 가능한 것으로, 1NF 충족을 위해 별도 테이블 분리 필요하다. |
| 기본 키 | 각 행을 유일하게 식별하는 속성으로, 1NF에서도 필요하다. |
👶 어린이를 위한 3줄 비유 설명
- 1NF는 급식카드에 한 칸에 하나의 음식만 적는 규칙과 같아요.
- 만약 한 칸에 "밥+김치+국"을 같이 적으면 (비원자값), 김치만 먹었다고 표시하기 어려워요.
- 컴퓨터에서도 한 칸에 하나의 정보만 있게 하면 (원자값), 데이터를 정확하게管理할 수 있어요!