정규화와 이상 현상
쉽게 말하면
한 표에 너무 많은 정보를 몰아넣으면 문제가 생겨요. 예를 들어 '수강' 표에 학생 주소까지 넣어 두면 주소가 바뀔 때 그 학생의 수강 줄을 전부 고쳐야 하고, 하나라도 빠뜨리면 주소가 서로 달라져요. 정규화는 이런 표를 주제별로 쪼개서 같은 정보가 한곳에만 있게 만드는 과정이에요.
시험용 정의
정규화(Normalization)는 하나의 테이블에 너무 많은 정보가 들어 있어 생기는 이상(Anomaly) 현상을 없애려고 테이블을 무손실 분해하는 과정이다. 이상 현상에는 원하지 않는 값까지 함께 넣어야 하는 삽입 이상, 하나를 지우면 필요한 정보까지 지워지는 삭제 이상, 일부만 고쳐 값이 서로 달라지는 갱신 이상이 있다. 정규화는 속성 사이의 함수적 종속(X 값이 정해지면 Y 값이 하나로 정해짐)을 따져 진행한다. 제1정규형은 모든 속성이 원자값, 제2정규형은 기본 키 일부에만 종속되는 부분 함수 종속 제거, 제3정규형은 A→B→C처럼 이어지는 이행 함수 종속 제거, BCNF는 모든 결정자가 후보 키인 상태다. 정규화의 목적은 중복 최소화, 이상 현상 방지, 데이터 구조의 안정성이다. 중복을 완전히 없애지는 못하고, 테이블이 나뉘어 필드 수가 서로 달라지며, 조회할 때 조인이 늘어 속도가 느려질 수 있다.
비유로 이해하기
한 상자에 옷·책·그릇을 다 넣어 두면 그릇 하나를 꺼내려다 옷을 쏟는다. 정규화는 물건을 종류별 상자로 나누고, 상자마다 번호표(키)를 붙여 필요하면 번호로 다시 찾아 합치는 정리법이다.
자세히
이상 현상
| 이상 | 예 (수강 표에 학생 주소까지 있을 때) |
|---|---|
| 삽입 이상 | 아직 수강 신청을 안 한 학생은 주소를 넣을 수 없다 |
| 삭제 이상 | 학생의 마지막 수강을 지우면 주소 정보까지 사라진다 |
| 갱신 이상 | 주소를 고칠 때 일부 줄만 고치면 같은 학생의 주소가 서로 달라진다 |
정규형 단계
| 단계 | 없애는 것 |
|---|---|
| 제1정규형(1NF) | 반복 그룹. 모든 값을 원자값으로 |
| 제2정규형(2NF) | 부분 함수 종속 (복합 키 일부에만 종속) |
| 제3정규형(3NF) | 이행 함수 종속 (키 → A → B) |
| BCNF | 후보 키가 아닌 결정자 |
| 4NF·5NF | 다치 종속·조인 종속 |
헷갈리기 쉬운 것
- 정규화 → 중복 최소화 (완전 제거 아님)
- 정규화 → 종속성을 줄이는 과정 (높이는 것이 아님)
- 정규화 뒤 테이블마다 필드 수는 제각각이다
- 테이블 수가 늘어 조회 때 조인이 많아질 수 있다
시험에 이렇게 나와요
- 정규화 → 이상 현상(삽입·삭제·갱신) 방지 설계 기술
- 중복 최소화(완전 제거 아님), 종속성을 줄이는 과정
- 더 작은 테이블로 분해, 모든 테이블의 필드 수가 같아지지 않음
- 1NF 원자값, 2NF 부분 함수 종속 제거, 3NF 이행 함수 종속 제거
확인 문제
Q1. 정규화에 대한 설명으로 옳지 않은 것은?
- 이상 현상을 막는다
- 테이블을 더 작은 테이블로 나눈다
- 데이터 중복을 완전히 없앤다
- 데이터 중복을 최소화한다
정답 보기
3번 데이터 중복을 완전히 없앤다
정규화는 중복을 최소화한다. 관계를 잇는 외래 키처럼 필요한 중복은 남는다.
Q2. 데이터를 넣거나 지울 때 이상 현상이 생기지 않도록 테이블을 설계하는 기술은?
- 자동화
- 순서화
- 추상화
- 정규화
정답 보기
4번 정규화
정규화는 이상 현상을 막으려고 테이블을 나누는 과정이다.
Q3. 학생의 마지막 수강 기록을 지웠더니 학생의 주소까지 사라졌다. 어떤 이상인가?
- 삭제 이상
- 삽입 이상
- 참조 이상
- 갱신 이상
정답 보기
1번 삭제 이상
지우면 필요한 정보까지 함께 사라지는 것이 삭제 이상이다.
Q4. 기본 키 일부에만 종속되는 속성을 없애 만드는 정규형은?
- BCNF
- 제2정규형
- 제3정규형
- 제1정규형
정답 보기
2번 제2정규형
부분 함수 종속 제거가 2NF, 이행 함수 종속 제거가 3NF다.
Q5. 정규화에 대한 설명으로 옳지 않은 것은?
- 테이블 사이의 종속성을 높이기 위한 것이다
- 갱신 이상을 막는다
- 데이터 중복을 최소화한다
- 테이블을 더 작은 테이블로 나눈다
정답 보기
1번 테이블 사이의 종속성을 높이기 위한 것이다
정규화는 속성 사이의 종속성을 줄이는 과정이다.
헷갈리기 쉬운 O·X
정규화를 하면 모든 테이블의 필드 수가 같아진다.
정답 보기
X 테이블마다 필드 수는 제각각이다.
정규화를 하면 테이블이 나뉘어 조회할 때 조인이 늘어날 수 있다.
정답 보기
O 그래서 성능을 위해 일부러 덜 나누기도 한다(반정규화).