결론 먼저
SQLD 1과목 과락 방어의 핵심은 정규화 4단계(1NF → 2NF → 3NF → BCNF)의 제거 대상을 순서대로 외우는 것입니다.
- 1NF: 반복 그룹(원자값 아닌 값) 제거
- 2NF: 부분 함수 종속 제거
- 3NF: 이행 함수 종속 제거
- BCNF: 결정자가 후보키가 아닌 경우 제거
이 네 줄만 손으로 쓸 수 있으면 객관식에서 고를 수 있어요.
왜 정규화가 1과목 과락 방어의 핵심인가
SQLD 1과목은 10문항 중 4개 이상을 맞춰야 과락을 피합니다(40% 커트라인). 그런데 1과목 10문항 중 정규화 관련이 1–2문제 나와요. 이 한 문제를 놓치면 과락 위험이 커집니다.
다행히 정규화는 정의만 정확히 외우면 풀리는 단답형 패턴이에요. 보기에서 각 정규형의 조건을 설명하고 "몇 NF인가?" 또는 "다음 중 맞는 것은?" 형태로 나옵니다. 2과목 SQL처럼 쿼리 결과를 추적할 필요가 없어서 투자 대비 점수 효율이 제일 좋은 주제입니다.
정규화 4단계 조건
각 단계마다 "직전 단계를 만족한 상태에서 + 추가 조건"을 만족해야 해요.
1NF (제1정규형) — 원자값
모든 속성이 원자값(더 이상 나눌 수 없는 값)이어야 함.
위반 예시:
| 학번 | 이름 | 수강과목 |
|---|---|---|
| 101 | 김 | SQL, DB, OS |
수강과목이 "SQL, DB, OS"처럼 여러 값을 담고 있으면 1NF 위반.
1NF 변환:
| 학번 | 이름 | 수강과목 |
|---|---|---|
| 101 | 김 | SQL |
| 101 | 김 | DB |
| 101 | 김 | OS |
2NF (제2정규형) — 부분 함수 종속 제거
1NF + 기본키의 일부에만 종속되는 속성 제거.
위반 예시 (기본키 = {학번, 과목코드}):
| 학번 | 과목코드 | 과목명 | 학점 |
|---|---|---|---|
| 101 | S01 | SQL | 95 |
| 101 | D02 | DB | 90 |
여기서 과목명은 과목코드에만 종속(학번은 필요 없음). 이게 부분 함수 종속.
2NF 변환 (테이블 분리):
수강 테이블: {학번, 과목코드, 학점}
과목 테이블: {과목코드, 과목명}
3NF (제3정규형) — 이행 함수 종속 제거
2NF + 기본키 → 속성A → 속성B 형태의 이행 종속 제거.
위반 예시:
| 학번 | 학과코드 | 학과명 |
|---|---|---|
| 101 | C01 | 컴퓨터공학 |
| 102 | C01 | 컴퓨터공학 |
학번 → 학과코드 → 학과명으로 이행 종속. 학과코드가 중간에 끼어있음.
3NF 변환:
학생 테이블: {학번, 학과코드}
학과 테이블: {학과코드, 학과명}
BCNF (보이스-코드 정규형) — 결정자가 후보키
3NF + 모든 결정자가 후보키여야 함.
위반 예시 (학생은 과목당 한 명의 교수만 수강):
| 학번 | 과목 | 교수 |
|---|---|---|
| 101 | SQL | 김교수 |
| 102 | SQL | 김교수 |
후보키: {학번, 과목}, {학번, 교수} 가정.
교수 → 과목 함수 종속이 있는데 교수는 후보키가 아님 → BCNF 위반.
BCNF 변환:
수강 테이블: {학번, 교수}
강의 테이블: {교수, 과목}
정규화 암기 팁
순서대로 제거 대상만 외우세요.
| 단계 | 제거 대상 | 한 줄 정의 |
|---|---|---|
| 1NF | 반복 그룹 | 모든 값이 원자값 |
| 2NF | 부분 함수 종속 | 기본키 전체에 종속 |
| 3NF | 이행 함수 종속 | 키 → A → B 금지 |
| BCNF | 비후보키 결정자 | 모든 결정자가 후보키 |
암기 주문: "1NF 원자값, 2NF 부분, 3NF 이행, BCNF 결정자"
자주 나오는 출제 유형
유형 1: 정규형 식별
"다음 테이블은 몇 NF인가?"
테이블 구조를 보고 각 단계 조건에 맞는지 차례로 체크.
유형 2: 제거 대상 매칭
"2NF의 제거 대상은?" ① 반복 그룹 ② 부분 함수 종속 ③ 이행 함수 종속 ④ 결정자
암기만 되어 있으면 10초 안에 답.
유형 3: 정규화 단계 순서
"올바른 정규화 순서는?"
1NF → 2NF → 3NF → BCNF 순서. 각 단계가 이전 단계를 만족해야 다음으로 감.
유형 4: 이상 현상(Anomaly) 연결
정규화는 이상 현상을 제거하기 위한 과정이에요.
- 삽입 이상: 새 데이터 추가 시 불필요한 다른 데이터까지 요구
- 갱신 이상: 중복된 데이터 수정 시 일부만 바뀌어 불일치
- 삭제 이상: 데이터 삭제 시 연관 정보까지 사라짐
"3NF 정규화로 제거되는 이상은?" 같은 연계 문제도 나옵니다.
자주 하는 실수
1. "함수 종속"과 "결정자" 헷갈림
- 함수 종속:
A → B(A가 B를 결정) - 결정자: 화살표 왼쪽의 A
2. 후보키 식별 오류 후보키는 유일성 + 최소성. 두 조건 모두 만족해야 해요. 슈퍼키(유일성만)와 다름.
3. 정규화가 항상 좋다는 착각 정규화하면 테이블이 많아져서 JOIN이 늘어나고 성능이 떨어져요. 그래서 실무에선 3NF까지만 하고 일부러 역정규화(denormalization)하는 경우도 있습니다. 시험에선 "정규화의 장점"만 묻는 편이지만, "단점"도 가끔 나옵니다.
4. BCNF와 3NF 차이 암기 부실 3NF: 이행 종속 제거 → 대부분의 테이블은 여기까지만 하면 됨 BCNF: 비후보키 결정자 제거 → 3NF 중 일부만 BCNF 위반
시험장에서의 접근법
- 테이블 보면 기본키·후보키 먼저 식별
- 각 속성이 기본키에 어떻게 종속되는지 화살표 그리기
- 부분/이행 종속 있으면 위반 단계 확정
- "몇 NF?" 문제는 위에서부터 체크 (1NF → 2NF → 3NF 순서로 위반 여부)
- 보기 4개 중 애매하면 "제거 대상" 순서로 소거
정리
- 1NF → 2NF → 3NF → BCNF 순서
- 제거 대상: 반복 그룹 → 부분 종속 → 이행 종속 → 비후보키 결정자
- 이상 현상(삽입/갱신/삭제)을 정규화로 제거
- 1과목 10문항 중 1–2문제 안정적으로 확보 가능