데이터베이스

[DB] 정규화

평범한_이시대청년 2022. 4. 22. 22:44

나에게 어려운 파트ㅠ 그저 '도부이결다조' 로만 외웠던 지난 날들..

어떤 분이 정규화에 대해 깔끔하게 적어두셔서 출처를 밝히고 여기 업로드 해보고자 한다. (감사합니다!)

출처 : https://mangkyu.tistory.com/110

 

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com

  • 제1정규화 : 생략

  • 제2정규화
    제1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 단계
    완전 함수 종속이란 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미

출처 https://mangkyu.tistory.com/110

 

기본키가 (학생번호,강좌이름)인데, 

기본키의 부분집합 '강좌이름'이 '강의실'을 결정하고 있다.

따라서, 아래와 같이 학생번호,강좌이름 / 강좌이름,강의실 테이블 따로 만들어야함

 

출처 https://mangkyu.tistory.com/110

 

      **내가 몰랐던 부분 : 2정규화는 '복합키'일 경우에만 해당된다

 

 

 

나는 항상 3정규화부터 모르겠다.. 트라우마 생길것같아..ㅠ

  • 제3정규화
    제2정규화를 진행한 테이블에 '이행적 종속'을 없애도록 테이블을 분해하는 단계
    '이행적 종속'이란 A -> B,  B -> C가 성립할 때 A -> C가 성립되는 것을 의미

출처 : https://mangkyu.tistory.com/110

위 그림에서

학생번호(A)가 강좌이름(B)을 결정하고 있고,

강좌이름(B)은 수강료(C)를 결정하고 있다.

 

그래서 (A,B)와 (B,C)로 분해해야한다. 

 

 

  • BCNF
    제3정규형을 진행한 테이블에 모든 결정자에 대해 후보키가 되도록 테이블을 분해하는 과정
    복합속성 허용함(기출보기)
    제3정규형에 속하지만 BCNF에 속하지 않는 릴레이션이 있다(O,기출보기)

출처 : https://mangkyu.tistory.com/110

위 표의 기본키는 (학생번호, 특강이름)

1. (학생번호, 특강이름) -> 교수 를 결정함 (솔직히 이거 좀 정확히 이해안감, 설명해주실분..ㅠㅠ)

2. 교수 -> 특강이름 결정함 (결정자가 교수 인데, '후보키'자격이 안됨)

 

bcnf가 모든 결정자를 후보키로 되도록 테이블 분해하는 작업이니까..

 

출처 : https://mangkyu.tistory.com/110

 

위 처럼 정규화 할 수 있음.