본문 바로가기

CS

[DB] 1정규화(1NF) 2정규화(2NF) 3정규화(3NF) 간단정리

관계형 데이터 베이스를 사용 -> 정규화 해야함.

EX) mysql, oracledb, h2 등... 

 

비관계형 데이터 베이스를 사용 -> 정규화 안함.

EX) mongoDB, cassandra, dynamoDB 등...

 

제 1정규화 - 1 Normal Form

정의 : 최소한 테이블은 관계이며, 중복되는 항목이 없는 테이블.

- 한 칸에 한 데이터만 저장 -> 제 1 정규화 만족

 

1NF 만족 

학번 수강목록
1001 수학
1002 영어
1003 과학

 

1NF 불만족

학번 수강목록
1001 수학
1002 영어
1003 과학, 국어

 

제 2정규화 - 2 Normal Form

patial dependency를 제거한 테이블

- 관련이 없는 테이블은 분리

- 테이블을 최소 단위로 분리

 

2NF 불만족 예시)

수강신청목록 테이블 

학번 수강목록 가격
1001 수학 1000
1002 영어 2000
1003 과학 3000
1004 수학 1000

문제 : 위 수강신청목록 테이블처럼 관리하면, 수학 과목의 가격이 변동될 경우, 1행과 4행의 가격 컬럼을 수정해야함 -> 비효율

 

2NF 만족 예시)

수강신청목록 테이블

학번 수강목록
1001 수학
1002 영어
1003 과학
1004 수학

강의단가 테이블

학번 수강목록
수학 1000
영어 2000
과학 3000

2NF를 만족하도록 테이블을 분리하면, 강의 단가가 변경될 경우, 강의단가 테이블에서 1번만 수정하면 된다.

 

 

patial dependency를 제거한 테이블에 대한 추가 설명)

학번 수강목록 가격
1001 수학 1000
1002 영어 2000
1003 과학 3000
1004 수학 1000

위 테이블에서 학번과 수강목록을 합쳐 복합 키로 만들 수 있다.

이때, 가격 컬럼은 복합 키(학번+수강목록) 중 수강목록에만 부분 종속(patial dependency)된다. 

-> 따라서, 가격과 수강목록 컬럼에 대한 테이블을 따로 빼주면, 부분 종속(patial dependency)가 제거된다.

제 3정규화 - 3 Normal Form

PK가 아닌 다른 컬럼에 종속되는 컬럼을 분리

( 2NF와 비슷하다. 차이점은 2NF는 복합키에 대한 부분 종속, 3NF는 PK를 제외한 다른 컬럼에 대한 종속 )

 

 

 

참고 영상:

https://www.youtube.com/watch?v=Y1FbowQRcmI