💡 핵심 인사이트
제1정규형(1NF, First Normal Form)은 엑셀 쪼가리를 데이터베이스의 고귀한 릴레이션(테이블)으로 취급받기 위한 가장 기초적인 첫 번째 관문입니다.
**"테이블의 모든 셀(칸)에는 반드시 더 이상 쪼갤 수 없는 딱 1개의 값(원자값, Atomic Value)만 들어가야 한다"**는 절대 규칙입니다. 쉼표(,)를 써서 리스트를 쑤셔 넣는 행위는 사형감입니다.
Ⅰ. 1NF를 위반한 엑셀식 사고방식 (비정규 릴레이션)
DB를 처음 배우는 사람들은 엑셀을 쓰던 버릇 때문에 아래와 같이 편하게 표를 그립니다.
[ 학생_취미 테이블 (1NF 위반) ]
| 학번 | 이름 | 취미 (다중값 속성) |
|---|---|---|
| 101 | 김철수 | 독서, 영화, 등산 |
| 102 | 이영희 | 수영 |
| 103 | 박민수 | 게임, 피아노 |
- 문제점: 101번 김철수의 '취미' 칸 하나에 값 세 개가 콤마(,)로 묶여 들어갔습니다.
- DB 엔진의 오열: 나중에 "영화가 취미인 학생을 찾아라!"라는 SQL 쿼리(
SELECT)를 날리면, DB는 저 콤마로 묶인 텍스트 덩어리를 쪼개고 분석하느라 엄청난 버하(Full Scan)가 걸리며 인덱스도 타지 않습니다. 이것은 관계형 모델의 기본 사상(수학적 집합)을 뿌리부터 파괴하는 행위입니다.
Ⅱ. 1NF 수술법: 쪼개고 복사하기
이 기형적인 다중값(Multivalued) 속성을 박살 내어 제1정규형(1NF)을 만족시키려면 어떻게 해야 할까요? 가장 원초적인 방법은 **"콤마로 묶인 값들을 분리해서 하나하나 행(Row)으로 새로 늘려버리는 것"**입니다.
[ 수술 완료: 제1정규형 (1NF) 만족 테이블 ]
| 학번 | 이름 | 취미 |
|---|---|---|
| 101 | 김철수 | 독서 |
| 101 | 김철수 | 영화 |
| 101 | 김철수 | 등산 |
| 102 | 이영희 | 수영 |
| 103 | 박민수 | 게임 |
| 103 | 박민수 | 피아노 |
이제 모든 셀(칸)에 더 이상 쪼갤 수 없는 '단 하나의 단어(원자값)'만 깔끔하게 들어갔습니다! 이 테이블은 비로소 제1정규형(1NF) 시험을 당당히 통과했습니다.
Ⅲ. 1NF 통과 후 마주하는 새로운 지옥 (부분 종속)
축하합니다, 모든 칸이 원자값이 되었습니다. 하지만 위 테이블을 자세히 보세요. 무언가 심각하게 잘못되었습니다.
- 데이터 중복의 폭발: 김철수가 취미가 3개라고 해서,
101, 김철수라는 개인정보가 쓸데없이 테이블에 3번이나 중복(Redundancy) 복사되어버렸습니다. - 기본키의 변경: 원래
학번혼자 PK를 할 수 있었는데, 이제 철수가 3줄이 되었으므로 학번만으론 행을 찾을 수 없습니다. 어쩔 수 없이 억지로 **{학번, 취미}를 묶어서 거대한 복합 기본 키(Composite PK)**로 만들어야 합니다. - 이상 현상의 도래: 철수가 이름을 개명하면 3줄을 다 찾아서 고쳐야 하는 끔찍한 '갱신 이상'의 수렁에 빠졌습니다.
이 1NF가 낳은 끔찍한 똥(중복과 부분 종속)을 치우기 위해, 우리는 다음 단계인 **제2정규형(2NF)**의 메스를 들어야만 합니다.
📢 섹션 요약 비유: 제1정규형(1NF)은 알약(데이터)을 포장하는 약국의 **'1칸 1알 규칙'**입니다. 약국 알바생이 귀찮다고 캡슐 한 칸에 감기약, 두통약, 소화제 3알을 쑤셔 넣고 밀봉(1NF 위반)하면, 나중에 환자가 감기약만 골라 먹으려 할 때 캡슐을 뜯어 헤집어야 하는 대참사가 벌어집니다. 반드시 빈 캡슐 3개를 새로 늘려서라도 한 칸(셀)에는 무조건 알약 한 개(원자값)만 넣게 포장지를 뜯어고치는 기초 작업입니다.