티스토리 뷰
정규화
제 1 정규화 1NF
오직 원자값만 저장한다. 한 컬럼에 여러 데이터가 들어오면 안된다.
영화명 | 장르 |
A | 공포, 액션 |
B | 드라마 |
C | 판타지 |
제 1 정규화를 거치면 아래 테이블처럼 된다.
영화명 | 장르 |
A | 공포 |
A | 액션 |
B | 드라마 |
C | 판타지 |
제 2 정규화 2NF
하나의 테이블 안에 종속되는 관계가 있으면 테이블을 분리한다. 기본 키가 여러 속성일 경우, 그 중 일부에 종속된 경우이다.
제 3 정규화 3NF
기본키와 상관없는 속성의 테이블인 경우가 있다. 키가 아닌 컬럼들은 키에만 의존해야한다.
X -> Y, Y -> Z, X -> Z가 성립하면 X, Y와 Y, Z로 분리한다. 후보키를 여러 개 가지고 있으면 이상 현상이 생길 수 있다.
BCNF
모든 결정자가 후보키 집합에 속한 정규형
학생명 | 과목 | 강사명 |
A | DB | XXX |
A | JAVA | YYY |
B | JSP | ZZZ |
B | JAVA | XXX |
위와 같은 경우 학생, 과목이 속성인 테이블과 과목, 강사명이 속성인 테이블이 따로 있어야 한다.
정리하자면
- 테이블을 많이 나눠 조인을 하는 게 정규화 과정이라고 보면 된다.
- 보통 제 1 정규화는 필수로 지키고 나머지는 때에 따라 다른데
- 이게 역정규화가 있는 이유이다. 정규화 과정이 잦으면 속도가 느려지기 때문이다.
- 이런 과정을 거쳐도 삽입 이상, 삭제 이상, 갱신 이상이 생길 수 있다.
'배운 것 기록 > etc' 카테고리의 다른 글
[Python] 자료형 - Set / List / 튜플 / 딕셔너리 (0) | 2022.07.13 |
---|---|
[C++] 포인터 (0) | 2022.07.12 |
정규표현식 (0) | 2022.07.07 |
댓글