
안녕하세요, 공부하는 감자입니다 🥔
SQLD 1과목에서 정규화 문제를 만나면 고민할 시간이 없어요. 10~15초 안에 답을 정하고 넘어가야 하는 유형입니다.
그게 가능한 이유는 정규화가 사실상 암기 네 줄로 끝나는 주제이기 때문이에요. 쿼리 결과를 추적할 필요도 없으니, 투자 시간 대비 점수 효율로는 SQLD 전체에서 최상위권입니다.
그 네 줄은 각 단계의 제거 대상이에요.
| 단계 | 제거 대상 | 한 줄 요약 |
|---|---|---|
| 1NF | 반복 그룹 | 모든 값은 원자값 |
| 2NF | 부분 함수 종속 | 기본키 전체에 종속돼야 함 |
| 3NF | 이행 함수 종속 | 키 → A → B 금지 |
| BCNF | 비후보키 결정자 | 모든 결정자는 후보키 |
저는 "원자값, 부분, 이행, 결정자" 이렇게 주문처럼 외웠습니다.
왜 이 한 문제가 중요하냐면
1과목은 10문항 중 4개 미만이면 과락이에요. 그런데 정규화가 매회 1~2문제 나옵니다.
과락선이 4문제인 시험에서 거저 주는 1~2문제를 놓치면 그만큼 위험해지는 거죠. 보기에서 정규형 조건을 설명하고 "몇 NF 위반인가?"를 묻는 정형화된 패턴이라, 외우기만 하면 무조건 맞는 문제입니다.
단계별로 예시 하나씩만
각 단계는 "직전 단계 만족 + 추가 조건" 구조예요.
1NF — 한 칸에 값 하나
| 회원ID | 이름 | 관심분야 |
|---|---|---|
| M01 | 박감자 | 주식, 부동산, 코인 |
관심분야 한 칸에 값이 세 개 들어 있으면 1NF 위반입니다. 행을 나눠서 한 칸에 하나씩 담으면 해결돼요.
| 회원ID | 이름 | 관심분야 |
|---|---|---|
| M01 | 박감자 | 주식 |
| M01 | 박감자 | 부동산 |
| M01 | 박감자 | 코인 |
이렇게 한 칸에 값이 하나씩이면 1NF 만족입니다.
2NF — 기본키 일부에만 매달린 속성 제거
기본키가 {주문번호, 상품코드}인 주문상세 테이블을 봅시다.
| 주문번호 | 상품코드 | 상품명 | 수량 |
|---|---|---|---|
| 1001 | P01 | 키보드 | 2 |
| 1001 | P02 | 마우스 | 1 |
상품명은 상품코드만 알면 정해집니다. 주문번호는 필요 없어요.
이렇게 복합키의 일부에만 종속된 게 부분 함수 종속이고, 2NF 위반입니다. 주문상세{주문번호, 상품코드, 수량}와 상품{상품코드, 상품명}으로 분리하면 해결.
3NF — 키 → A → B 사슬 끊기
이번엔 부서 정보가 붙어 있는 사원 테이블이에요.
| 사번 | 부서코드 | 부서명 |
|---|---|---|
| E10 | D1 | 영업팀 |
| E11 | D1 | 영업팀 |
사번 → 부서코드 → 부서명. 부서명이 키에 직접 종속된 게 아니라 부서코드를 거쳐 종속돼 있죠.
이게 이행 함수 종속입니다. 사원{사번, 부서코드}와 부서{부서코드, 부서명}으로 쪼개면 3NF.
BCNF — 결정자가 후보키가 아니면 위반
수강 테이블에서 "강사 한 명은 강좌 하나만 담당, 수강생은 강좌당 강사 한 명"이라는 조건이 있다고 해요.
| 수강생 | 강좌 | 강사 |
|---|---|---|
| 101 | SQL입문 | 김강사 |
| 102 | SQL입문 | 김강사 |
여기서 강사 → 강좌라는 함수 종속이 있는데, 강사는 후보키가 아닙니다. 3NF는 만족해도 BCNF 위반이에요.
수강{수강생, 강사}와 담당{강사, 강좌}으로 분리합니다.
BCNF는 3NF의 깐깐한 버전이라고 보면 됩니다. 대부분 테이블은 3NF면 BCNF도 자동 만족인데, 복합 후보키가 얽히면 예외가 생겨요.
같이 외워야 하는 것: 이상 현상
정규화의 목적이 이상 현상(Anomaly) 제거라서, 연계 문제가 같이 나옵니다.
- 삽입 이상 — 새 데이터를 넣으려는데 관계없는 데이터까지 요구됨
- 갱신 이상 — 중복 데이터 중 일부만 수정돼서 불일치 발생
- 삭제 이상 — 행 하나 지웠는데 다른 정보까지 같이 사라짐
그리고 함정 하나. 정규화가 무조건 좋은 게 아니에요.
테이블이 쪼개지니 JOIN이 늘고 조회 성능이 떨어집니다. 그래서 실무에선 일부러 역정규화를 하기도 하고, 시험에서 "정규화의 단점"을 묻는 보기도 가끔 등장합니다.
풀이 순서를 기계화하세요
- 테이블 보면 기본키·후보키부터 식별
- 각 속성이 키에 어떻게 종속되는지 화살표 그리기
- 부분 종속이 보이면 2NF 위반, 거쳐 가는 종속이면 3NF 위반
- "몇 NF인가?" 문제는 1NF부터 순서대로 체크
- 헷갈리면 제거 대상 순서(반복 그룹 → 부분 → 이행 → 결정자)로 보기 소거
자주 틀리는 포인트는 후보키 정의예요. 후보키는 유일성과 최소성을 둘 다 만족해야 합니다.
유일성만 있는 건 슈퍼키예요. 이 구분을 묻는 보기가 종종 섞여 나옵니다.
암기가 됐다 싶으면 실제 기출 유형으로 확인해보세요. 저는 문어CBT 모의고사로 1과목만 빠르게 점검했는데, 무료라서 정규화 유형 감 잡는 용도로는 충분했습니다.
SQLD·정처기·컴활·ADsP 무료 CBT 모의고사
기출 변형 문제, 자동 채점, 회차별 실력 추적까지 가입 없이 바로 풀어보세요.
sqldpass.com
네 줄 암기, 화살표 그리기, 순서대로 체크. 이 세 가지면 정규화 문제는 시험장에서 제일 빨리 끝나는 문제가 됩니다.
'자격증 > SQLD' 카테고리의 다른 글
| SQLD 62회 접수 전 응시료·환불 마감일 정리 (0) | 2026.07.02 |
|---|---|
| SQLD 윈도우 함수 정리 (RANK·DENSE_RANK 구분) (0) | 2026.07.01 |
| SQLD 빈출 개념 정리 (정규화·JOIN·서브쿼리·윈도우 함수) (0) | 2026.07.01 |
| SQLD 시험 정보 총정리, 일정·응시료·합격 기준 (0) | 2026.06.30 |
| 비전공자 SQLD 4주 합격 공부법 (문과생) (0) | 2026.06.30 |