정규화(Normalization)
in BackEnd / Database
테이블을 쪼갠다?
정보처리기사 필기를 공부하는데 정규화에 대한 내용이 나왔다.
나름 이해한 바를 간단하게 요약하면 테이블을 특정 도메인별로 쪼개는 과정인 것 같다.
정규화(Normalization)
제1 정규형
학생
학번 | 학과 | 과목코드 | 지도교수 | 성적 |
1000 | 컴퓨터공학 | MSC1000 | 홍길동 | A |
모든 튜플의 값이 원자성을 가진다.
제1 정규형을 만족한다.
하지만 함수적 종속관계가 존재한다.
학번은 학과와 지도교수를 결정할 수 있고,
학번과 과목코드는 성적을 결정할 수 있다.
정리하자면
{학번, 과목코드} → 성적
학번 → 학과
학과 → 지도교수
학번 → 지도교수
성적은 학번과 과목코드에 완전 함수적 종속성
을 갖고,
학과와 지도교수는 학번에 부분 함수적 종속성
을 갖는다.
그러므로 학번은 결정자, 학과와 지도교수는 종속자가 된다.
제2 정규형
학생
학번 | 학과 | 지도교수 |
1000 | 컴퓨터공학 | 홍길동 |
성적
학번 | 과목코드 | 성적 |
1000 | MSC1000 | A |
학번 → 학과
학과 → 지도교수
학번 → 지도교수
이행 함수적 종속성
을 갖는다. 제 3정규형 대상이다.
학과를 기준으로 릴레이션을 나눈다.
제3 정규형
학생
학번 | 학과 |
1000 | 컴퓨터공학 |
학과
학과 | 지도교수 |
컴퓨터공학 | 홍길동 |
성적
학번 | 과목코드 | 성적 |
1000 | MSC1000 | A |