Skip to content
난이도 출제 빈출문제은행 5

이상과 정규화 ​

정규화(normalization)는 한 테이블에 섞인 정보를 종속 관계에 따라 나누어, 중복 때문에 생기는 이상(anomaly)을 없애는 과정이다. 실기 시험은 이상의 세 종류, 함수적 종속(functional dependency)의 종류, 각 정규형(normal form)에서 없애는 것을 단답형으로 묻고, 표를 주고 몇 정규형인지 판단하게 한다.

이상 ​

이상(anomaly)은 중복 때문에 테이블을 조작할 때 예기치 않게 생기는 문제다. 아래 수강 테이블은 (학번, 강좌)가 기본키(primary key)이고, 학생 정보와 학과장까지 한곳에 담았다.

학번강좌이름학과학과장성적
S1C1하늘컴공김교수A
S1C2하늘컴공김교수B
S2C1바다전자이교수B
S3C2구름컴공김교수A
이상이 표에서 생기는 일
삽입 이상수강 전인 신입생은 강좌가 없어 넣을 수 없다
삭제 이상바다의 수강을 지우면 전자과 학과장 정보도 사라진다
갱신 이상컴공 학과장이 바뀌면 세 행을 다 고쳐야 한다

함수적 종속 ​

함수적 종속(functional dependency)은 X 값을 알면 Y 값이 하나로 정해지는 관계(X → Y)이고, X를 결정자(determinant), Y를 종속자(dependent)라 한다.

종류뜻위 표의 예
완전(full) 함수적 종속키 전체에만 종속, 키 일부로는 결정 안 됨(학번, 강좌) → 성적
부분(partial) 함수적 종속복합키의 일부만으로 결정됨학번 → 이름
이행적(transitive) 함수적 종속X → Y이고 Y → Z라서 X → Z학번 → 학과 → 학과장

정규화 과정 ​

정규형은 테이블이 지켜야 할 설계 기준의 단계이고, NF는 Normal Form의 약자라 1NF·2NF처럼 숫자로 어디까지 만족하는지 나타낸다. BCNF(Boyce-Codd Normal Form, 보이스-코드 정규형)는 3NF와 4NF 사이 단계다.

정규형조건
1NF모든 속성의 도메인(domain)이 원자값만 가진다
2NF1NF이고 부분 함수적 종속을 제거했다
3NF2NF이고 이행적 함수적 종속을 제거했다
BCNF모든 결정자가 후보키(candidate key)다
4NFBCNF이고 다치 종속(multivalued dependency)을 제거했다
5NF모든 조인 종속(join dependency)이 후보키를 통해서만 성립한다

위 수강 테이블은 값이 모두 원자값이라 1NF지만, 이름·학과·학과장이 키의 일부인 학번에만 종속되어 2NF가 아니다. 학생(학번, 이름, 학과, 학과장)을 떼어 내면 수강(학번, 강좌, 성적)이 남아 2NF가 된다. 학생 테이블에는 아직 학번 → 학과 → 학과장이라는 이행 종속이 남아 있다. 학과(학과, 학과장)를 다시 떼어 내면 3NF가 된다. 세 테이블을 다시 자연 조인(natural join)하면 원래 네 행이 그대로 나오므로 무손실 분해(lossless decomposition)다. 이제 컴공 학과장은 한 행만 고치면 된다.

BCNF는 3NF보다 엄격하다. 기본키가 (고객, 분야)인 상담(고객, 분야, 상담원)에서 상담원 → 분야가 성립하면, 상담원은 후보키가 아니므로 BCNF가 아니다. 상담원(상담원, 분야)을 떼어 내 해결한다.

4NF의 다치 종속은 A 값 하나에 B 값 집합이 C와 무관하게 대응하는 관계(A →→ B)이고, 5NF의 조인 종속은 여러 프로젝션으로 나눴다가 조인하면 원래대로 돌아오는 성질이다.

위 정의는 국내 시험식 표현이고, 표준 정의는 조금 더 엄밀하다.1

시험 포인트 ​

  • 이상 세 가지: 삽입·삭제·갱신 이상. "일부 행만 고쳐 불일치" → 갱신 이상.
  • 단계 암기: 도메인 원자값 → 부분 함수 종속 제거 → 이행 함수 종속 제거 → 결정자이면서 후보키가 아닌 것 제거 → 다치 종속 제거 → 조인 종속 이용.
  • 복합키 일부에 종속 → 부분 함수적 종속(2NF에서 제거). X → Y → Z → 이행적 함수적 종속(3NF에서 제거).
  • "모든 결정자가 후보키" → BCNF.

참고

  1. 표준 정의는 BCNF를 "자명하지 않은 모든 함수 종속의 결정자가 슈퍼키"로, 2NF·3NF를 "키가 아닌 속성이 후보키에 부분·이행 종속하지 않음"으로 쓴다. 시험에 나오는 표에서는 대개 판단 결과가 같다. ↩︎

관련 문서