정규화

김시환·2023년 4월 27일
0

데이터베이스

목록 보기
1/1

정규화

정규화 : 이상 현상을 제거하기 위한 테이블을 분리하는 행위

이상 현상

  1. 삽입 이상 : 불필요한 데이터를 추가해야지만 추가할 수 있는 상황
  2. 갱신 이상 : 일부만 변경되어 데이터의 불일치가 발생하는 상황
  3. 삭제 이상 : 튜플 삭제로 인해 꼭 필요한 데이터까지 삭제되는 상황

이런 이상 현상을 제거하기 위해 정규화를 사용한다. 테이블을 분리하는 것으로 해결할 수 있다.

제1정규화

  • 모든 속성의 값을 원자값(Atomic)으로 만든다!

제2정규화

  • 기본키가 복합키로 이루어진 경우, 키를 제외한 나머지 속성들은 완전 함수 종속을 유지해야한다!
  • 예를 들어 기본 키가 A,B로 이루어져있다고 해보자. 만약 C라는 속성이 A만 사용해서 구별할 수 있는 상황이라면, C를 알아내는데 B는 필요가 없다. 그럼에도 B와 C가 같이 있어 불필요한 중복이 발생한다. => 기존 테이블에서 A,C를 따로 빼와 새로운 테이블로 만드는 것이 불필요한 중복을 제거하는 방법이다!

제3정규화

  • 이행적 함수 종속 제거!
  • 만약 A,B,C,D의 속성을 가진 테이블이 있고, A가 기본키라고 가정해보자. 그런데 B만 알아도 C와 D가 결정된다고 해보자. 이럴 경우 테이블을 A,B 테이블과 B,C,D 테이블로 분리!
  • 이렇게 분리하면, C나 D를 업데이트할 때, 이상 현상을 막을 수가 있다!

BCNF

  • 모든 결정자가 후보키에 속하도록 하자!
  • 후보키에 속하지 않은 속성이 어떤 속성을 결정할 수 있다면, 이상 현상 발생 가능!

대체적으로 3정규화와 BCNF까지 정규화한다고 한다. 정규화하면 이상 현상을 막을 수는 있지만, 결국 테이블을 분리하는 것이기 때문에 나중에 사용할 때 join같은 추가적인 연산이 발생해 실행 시간이 늘어날 수 있다.

profile
1년차 개발자입니다.

0개의 댓글

관련 채용 정보