Anomaly
1. 갱신 이상
Id | Name | Age | Subject |
1 | 홍길동 | 20 | 수학 |
2 | 홍길동 | 20 | 과학 |
Update School Set Age = 23 Where Id = 2
위와 같은 상황에서 ID 2번의 나이를 23로 바꾸면 홍길동의 나이가 20살인지 25살인지 알 수 없게 된다.
2. 삽입 이상
Id | Name | Age | Subject |
1 | 홍길동 | 20 | 수학 |
2 | 홍길동 | 20 | 과학 |
3 | 고길동 | 30 | NULL |
새로운 학생이 추가될 경우, 수강하는 과목이 없더라도 무엇이든 넣어야 삽입이 가능하다.
3. 삭제 이상
Id | Name | Age | Subject |
1 | 홍길동 | 20 | 수학 |
2 | 고길동 | 30 | 과학 |
홍길동을 삭제하면 수학이라는 과목의 정보도 같이 사라지게 된다.
정규화
위와 같은 이상 현상 및 데이터 중복을 최소화 하기 위해 일련의 normal forms(NF)에 따라 Relation DB를 구성하는 과정을 정규화라 한다.
Normal Forms
: 정규화가 되기 위해 준수해야 하는 규칙
정규화는 다음과 같은 단계로 구성되어 있다.
1NF > 2NF > 3NF > BCNF > 4NF > 5NF > 6NF
FD와 Key만으로 정의되는 NF는 BCNF까지이며, 앞 단계를 만족해야 다음 단계로 넘어갈 수 있다.
1NF
테이블의 컬럼이 원자 값을 갖도록 분리
ID | 구매자 | 공연ID | 사이트 | 등급 | 공연 제목 | 러닝 타임 | 좌석 | 가격 |
1 | 짱구 | A1 | 인터파크 | VIP | 레베카 | 175분 | A | 150,000 |
2 | 짱구 | B1 | 인터파크 | VIP | 프랑켄슈타인 | 180분 | A | 150,000 |
3 | 맹구 | C1 | 인터파크 | FAMILY | 웃는 남자 | 180분 | B | 100,000 |
4 | 유리 | D1 | 예스24 | 플레티넘 | 지킬앤하이드 | 170분 | B | 100,000 |
5 | 철수 | D2 | 예스24 | 로얄 | 지킬앤하이드 | 170분 | C | 50,000 |
6 | 철수 | A2 | 예스24 | 로얄 | 레베카 | 175분 | C | 50,000 |
2NF
non-prime attribute는 모든 key에 대해 완전 함수 종속을 만족하도록 테이블을 분해
완전 함수 종속
: 기본키의 부분집합이 결정자가 되어선 안된다는 것
ID | 구매자 | 공연ID | 사이트 | 등급 | 공연 제목 | 러닝 타임 | 좌석 |
1 | 짱구 | A1 | 인터파크 | VIP | 레베카 | 175분 | A |
2 | 짱구 | B1 | 인터파크 | VIP | 프랑켄슈타인 | 180분 | A |
3 | 맹구 | C1 | 인터파크 | FAMILY | 웃는 남자 | 180분 | B |
4 | 유리 | D1 | 예스24 | 플레티넘 | 지킬앤하이드 | 170분 | B |
5 | 철수 | D2 | 예스24 | 로얄 | 지킬앤하이드 | 170분 | C |
6 | 철수 | A2 | 예스24 | 로얄 | 레베카 | 175분 | C |
좌석 | 가격 |
A | 150,000 |
B | 100,000 |
C | 50,000 |
3NF
이행적 종속 관계가 없도록 테이블을 분해
이행적 종속 관계
: A → B, B→C 인 경우 A → C가 성립되는 것
러닝 타임은 공연 제목에 종속되어 있고, 공연 제목은 공연 ID에 종속되어 있다. (공연 ID > 공연 제목 > 러닝 타임)
때문에 공연 ID만으로도 러닝 타임을 알 수 있는데, 이를 이행적 종속 관계라고 한다.
ID | 구매자 | 공연ID | 사이트 | 등급 | 공연 제목 | 좌석 |
1 | 짱구 | A1 | 인터파크 | VIP | 레베카 | A |
2 | 짱구 | B1 | 인터파크 | VIP | 프랑켄슈타인 | A |
3 | 맹구 | C1 | 인터파크 | FAMILY | 웃는 남자 | B |
4 | 유리 | D1 | 예스24 | 플레티넘 | 지킬앤하이드 | B |
5 | 철수 | D2 | 예스24 | 로얄 | 지킬앤하이드 | C |
6 | 철수 | A2 | 예스24 | 로얄 | 레베카 | C |
공연 제목 | 러닝 타임 |
레베카 | 175분 |
프랑켄슈타인 | 180분 |
웃는 남자 | 180분 |
지킬앤하이드 | 170분 |
좌석 | 가격 |
A | 150,000 |
B | 100,000 |
C | 50,000 |
BCNF
모든 결정자가 후보키가 되도록 테이블을 분해하는 것
ID | 구매자 | 공연ID | 등급 | 공연 제목 | 좌석 |
1 | 짱구 | A1 | VIP | 레베카 | A |
2 | 짱구 | B1 | VIP | 프랑켄슈타인 | A |
3 | 맹구 | C1 | FAMILY | 웃는 남자 | B |
4 | 유리 | D1 | 플레티넘 | 지킬앤하이드 | B |
5 | 철수 | D2 | 로얄 | 지킬앤하이드 | C |
6 | 철수 | A2 | 로얄 | 레베카 | C |
등급 | 사이트 |
VIP | 인터파크 |
FAMILY | 인터파크 |
WELCOME | 인터파크 |
플레티넘 | YES24 |
골드 | YES24 |
로얄 | YES24 |
공연 제목 | 러닝 타임 |
레베카 | 175분 |
프랑켄슈타인 | 180분 |
웃는 남자 | 180분 |
지킬앤하이드 | 170분 |
좌석 | 가격 |
A | 150,000 |
B | 100,000 |
C | 50,000 |
정규화의 장단점
: 입력, 수정, 삭제 성능을 향상 시키지만 조회 시 Join을 유발하여 성능 저하가 발생 할 수도 있다.
반정규화 :: De-Nomalization
정규화 된 엔티티, 속성, 관계에 대해 시스템의 성능 향상과 개발/운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법