Skip to Content
Suffering builds character

5.2정규형

2정규형은 부분 함수 종속 문제를 해결한 정규형을 의미함

일반적으로 어떤 릴레이션(테이블)이 식별자가 2개 이상으로 구성된 복합 식별자일 때 2정규형 적용대상이 됨

💡
Tip

부분 함수 종속

릴레이션 내 어떤 속성(컬럼)이 복합 식별자가 아닌 일부 키만 가지고도 식별(종속)이 가능한 경우 부분적으로 함수 종속이 되었다고 함

정리하면,
식별자가 아닌 일반 속성이 복합 식별자만으로 종속되지 않고, 일부 식별자만으로도 종속될 경우, 2정규형을 위반한 케이스라고 볼 수 있음

nf2_break

1-1. 2정규형을 위반한 케이스

2정규형을 위반한 테이블 예시는 다음과 같음

주문 상품 테이블
#주문코드#상품코드상품명단가수량
1523P001사과100001
1533P002바나나50001
1562P003이불1000001
1567P004가방1200002
1599P005키보드1000001
1600P006바나나50003

주문 코드 없이, 상품 코드 식별자 만으로도 상품명과 단가를 알 수 있음

수량은 주문번호와 상품번호를 모두 알고 있어야 파악 가능

발생할 수 있는 문제점
1. 부분 함수 종속
상품명과 단가는 상품코드만 알면 결정 가능
→ 복합키 (주문코드 + 상품코드) 전체에 종속되지 않음

2. 갱신(Update) 이상
상품 가격이나 상품명이 변경될 경우, 해당 상품이 여러 주문에 있으면 모든 행을 수정해야 함

3. 삽입(Insert) 이상
새로운 상품 정보를 추가하려면 주문도 해야함(?)

1-2. 2정규형 적용 후

nf2_apply

주문 상품 테이블
#주문코드#상품코드(FK)수량
1523P0011
1533P0021
1562P0031
1567P0042
1599P0051
상품 테이블
#상품코드상품명단가
P001사과10000
P002바나나5000
P003이불100000
P004가방120000
P005키보드100000

적용 결과

1. 부분 종속 제거
상품명과 단가가 상품코드만으로 결정되므로, 주문코드에 종속되지 않음
→ 2NF 충족

2. 갱신 이상 해결
상품 가격이나 이름 변경 시, 상품 테이블에서 하나의 행만 수정하면 됨

3. 삽입 이상 해결
아직 주문되지 않은 상품도 상품 테이블에 미리 등록 할 수 있음

Last updated on