제1정규형 (1NF)

핵심 인사이트 (3줄 요약)

  1. 본질: 제1정규형 (First Normal Form, 1NF)은 데이터베이스 테이블의 모든 속성이 원자값 (Atomic Value)만을 가지며, 반복 그룹이나 다중값 속성이 없는 상태다.
  2. 가치: 1NF를 만족하면 데이터의基本 구조가確立되어, 데이터 조작의 일관성과 신뢰성을 보장하는基礎가 된다.
  3. 융합: 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줄 비유 설명

  1. 1NF는 급식카드에 한 칸에 하나의 음식만 적는 규칙과 같아요.
  2. 만약 한 칸에 "밥+김치+국"을 같이 적으면 (비원자값), 김치만 먹었다고 표시하기 어려워요.
  3. 컴퓨터에서도 한 칸에 하나의 정보만 있게 하면 (원자값), 데이터를 정확하게管理할 수 있어요!