정규화

정규화가 무엇인가요?

  • 정규화란 데이터베이스 테이블 간에 중복된 테이터를 허용하지 않는 것을 말한다. 이를 통해 무결성을 유지하고 저장 용량을 줄일 수 있다.

  • 정규화는 테이블을 어떻게 분해할지에 따라서 단계가 달라진다.

제1, 2, 3 정규화 되기 전후의 테이블 변화

1) 제1 정규화 : 테이블의 칼럼이 하나의 값을 갖도록 테이블을 분해하는 것.

위에서 아래 형태로 분해하는 것이 제1 정규화다. 왼쪽은 여러 취미를 가지고 있는 행이 있기에 제1 정규화를 만족하지 못하고 있는 상황이다.

2) 제2 정규화: 제1 정규화를 진행한 테이블에 대해서 기본키의 부분 집합이 결정자가 되지 않게 분해하는 것.

3) 제3 정규화 : 제2 정규화를 만족하는 테이블의 이행 종속을 제거하도록 분해한다. 즉, (a→b, b→c 가 성립될 때, a→c가 되는 테이블이 있다면 이를 분해한다)

4) BCNF 정규화 : 값을 정하는 결정자가 후보키가 되도록 분해한다

학생번호와 특강이름을 기본키로 가지고 있다. 이 기본키가 교수를 결정하고 있고, 교수는 특강이름을 결정하고 있다. 교수는 특강이름의 결정자이지만, 후보키는 아닌 상태다.

또한 위 경우엔 새로운 교수가 특정 과목을 담당하는 정보를 바로 추가할 수 없다. 왜냐면 적어도 한 명의 학생이 필요하기 때문이다. 정규화가 필요하다.

정규화 하지 않을 경우의 이상현상

정규화의 추가 목적은 이상 현상을 제거하기 위해서 데이터베이스를 올바르게 설계하가는 것이다.

발생할 수 있는 이상 현상의 종류

  1. 삽입 이상 : 데이터를 삽입하기 위해 불필요한 데이터를 추가해야만 삽입이 가능한 상황

  2. 갱신 이상 : 전체 데이터 중 일부만 변경하여 데이터가 불일치하는 상황

  3. 삭제 이상 : 삭제로 인해 꼭 필요한 데이터까지 삭제되는 상황

위의 BCNF 정규화 과정에 대입해서 설명하겠다.

BCNF 정규화 전에는 위 3개의 이상현상이 모두 발상한다.

  • 삽입 이상 : 학생이 없이는 새로운 특강을 추가할 수 없다. 적어도 한 명의 학생이 필요한 상황이다.

  • 갱신 이상 : 김교수가 담당하는 소셜네트워크의 특강 이름이 변경되면 각 행을 모두 찾아서 변경해야 한다.

  • 삭제 이상 : 502번 학생이 특강을 취소하면 박교수가 창업전략을 담당한다는 정보도 같이 삭제된다.

어떤 상황에서 반정규화(역정규화)를 하는게 좋을지 설명해주세요

정규화 예시 참고 https://mangkyu.tistory.com/110

Last updated