[DB] 정규화
나에게 어려운 파트ㅠ 그저 '도부이결다조' 로만 외웠던 지난 날들..
어떤 분이 정규화에 대해 깔끔하게 적어두셔서 출처를 밝히고 여기 업로드 해보고자 한다. (감사합니다!)
출처 : https://mangkyu.tistory.com/110
[Database] 정규화(Normalization) 쉽게 이해하기
지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz
mangkyu.tistory.com
- 제1정규화 : 생략
- 제2정규화
제1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 단계
완전 함수 종속이란 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미
기본키가 (학생번호,강좌이름)인데,
기본키의 부분집합 '강좌이름'이 '강의실'을 결정하고 있다.
따라서, 아래와 같이 학생번호,강좌이름 / 강좌이름,강의실 테이블 따로 만들어야함
**내가 몰랐던 부분 : 2정규화는 '복합키'일 경우에만 해당된다
나는 항상 3정규화부터 모르겠다.. 트라우마 생길것같아..ㅠ
- 제3정규화
제2정규화를 진행한 테이블에 '이행적 종속'을 없애도록 테이블을 분해하는 단계
'이행적 종속'이란 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미
위 그림에서
학생번호(A)가 강좌이름(B)을 결정하고 있고,
강좌이름(B)은 수강료(C)를 결정하고 있다.
그래서 (A,B)와 (B,C)로 분해해야한다.
- BCNF
제3정규형을 진행한 테이블에 모든 결정자에 대해 후보키가 되도록 테이블을 분해하는 과정
복합속성 허용함(기출보기)
제3정규형에 속하지만 BCNF에 속하지 않는 릴레이션이 있다(O,기출보기)
위 표의 기본키는 (학생번호, 특강이름)
1. (학생번호, 특강이름) -> 교수 를 결정함 (솔직히 이거 좀 정확히 이해안감, 설명해주실분..ㅠㅠ)
2. 교수 -> 특강이름 결정함 (결정자가 교수 인데, '후보키'자격이 안됨)
bcnf가 모든 결정자를 후보키로 되도록 테이블 분해하는 작업이니까..
위 처럼 정규화 할 수 있음.