-
정의
- 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔티티를 작은 단위로 분리하는 과정
- 데이터에 대한 중복성 제거
- 수행할수록 엔터티 증가됨
- 조회 성능은 향상되거나 저하됨
- 입력, 수정, 삭제 성능은 일반적으로 향상됨
- 함수 종속성 고려하여 이상현상 생기지 않도록 함
-
종류
-
제1정규형
- 모든 속성은 반드시 하나의 값만 가져야 함
- 하나의 속성이 다중값을 가지면 안 됨
- ex) JOB 속성값 가수, 배우, 작곡가 → 별도 엔터티 만들어서 row별로 분리
- 유사한 속성이 반복되면 안됨
- ex) 한 엔터티에 SITE1, SITE2, SITE3 속성 존재 → 별도 엔터티 만들어서 row별로 분리
- 원자값
-
제2정규형
- 모든 일반속성은 반드시 모든 주식별자에 종속되어야 함
- ex) PK가 주문번호, 음료코드이며 속성 중 음료명이 있음
- 음료명은 음료코드에만 종속됨 → 별도 엔터티 만들어서 음료코드, 음료명 관리
- 완전함수종속관계 (부분함수종속 제거)
-
제3정규형
- 주식별자가 아닌 모든 속성간에는 서로 종속되면 안 됨
- ex) PK가 일련번호, 일반속성에 소속사코드, 소속사명 존재
- 소속사명은 소속사코드에 종속 → 별도 엔터티 만들어서 소속사명, 소속사코드 관리
- 이행함수종속 제거
-
잘 쓰지 않는 정규화
-
주의사항
- 지나친 정규화는 성능에 좋지 않을 수 있음
- 여러번의 JOIN을 하게 될 경우 조회 성능이 떨어짐
- 이 경우 반정규화를 통해 성능 향상
- 무분별한 인덱스 생성은 지향
- 조회성능은 향상될지 모르나 입력, 수정, 삭제 성능이 저하
-
일어날 수 있는 이상현상
- 삽입이상 : (제 2 정규형) 주문번호, 상품코드 PK & 상품명 일반컬럼인 경우
- 주문되지 않은 상품의 정보를 삽입할 수 없음
- 삽입하려면 가짜 주문번호를 입력해야 함
- 갱신이상 : 중복된 데이터 중 일부만 업데이트되어 데이터 불일치 발생
- 삭제이상 : 데이터 삭제시 삭제되면 안되는 데이터까지 덩달아 삭제