본문 바로가기

IT 개념

맨날 헷갈리고 까먹는 정규화

https://mangkyu.tistory.com/m/110

 

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

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

mangkyu.tistory.com

위 블로그에 내용이 다 있습니다.

1. 정규화 ( Normalization )

테이블 간에 중복된 데이터를 허용하지 않는 것 -> 무결성 유지, DB의 저장공간 확보

1) 제 1정규화

(1) 테이블의 컬럼이 원자값 ( Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것

제 1정규화 전

제 1 정규화 후

2) 제 2 정규화

(1) 제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것

※ 완전함수종속

기본키의 부분 집합이 결정자가 되어선 안된다는 것을 의미한다.

제2 정규화전, 수강강좌 Table의 기본키는 학생번호, 강좌이름 (복합키) 이다.

이 기본키는 강의실을 결정하고 있다. (학생번호, 강좌이름) -> (강의실)

그런데, 강의실은 기본키의 부분집합인 강좌이름 에 의해 결정될 수 있다.

그렇기 때문에, 강의실을 분해하여 별도의 테이블로 관리하여야 한다.

제2정규화 후

3) 제3 정규화

(1) 제2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것

※ 이행적 종속

A -> B, B -> C 가 성립할 때 A -> C 가 성립되는 것을 의미한다.

제3 정규화 전, 학생번호는 강좌이름을 결정하고 있고, 강좌 이름은 수강료를 결정하고 있다. 그렇기 때문에 이를

(학생번호, 강좌이름), (강좌이름, 수강료) 로 나누어야 한다.

예를 들어, 학생번호가 501인 학생이 수강하는 강좌가 스포츠경영학으로 변경되면,

스포츠경영학(15000원)수업을 20000원을 주고 들어야 한다.

강좌 이름에 맞게 수강료를 다시 변경하는 번거로움을 해결하기 위해 제 3정규화를 한다.

학생번호를 통해 강좌이름을 참조하고, 강좌 이름으로 수강료를 참조하도록 테이블을 분해해야 한다.

 

제3 정규화 후

4) BCNF 정규화

(1) 제3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것

BCNF 정규화 전, 특강수강 테이블에서 기본키는 (학생번호, 특강이름) 이다.

그리고 (학생번호,특강이름)은 교수를 결정하고 있다. 또한, 여기서 교수는 특강이름을 결정하고 있다.

교수가 특강이름을 결정하는 결정자이지만, 후보키가 아니기 때문에, 위의 테이블을 분해해야 한다.

※ 후보키

테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합, 후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야 한다.

https://jerryjerryjerry.tistory.com/49

 

[SQL] 키(슈퍼키,대체키,후보키,기본키,외래키)

* 키(Key) - 열쇠는 무언가를 열거나 잠글 때 사용하는 것으로, 같은 것이 하나도 없다. 우리집 열쇠가 옆집의 열쇠랑 다르듯이 말이다. - 이와 같이 키라는 것은 무언가를 식별하는 고유한 식별자(identifier) 기..

jerryjerryjerry.tistory.com

BCNF 정규화 후