상세 컨텐츠

본문 제목

[데이터베이스] 정규화(Normalization) : 1NF, 2NF, 3NF, BCNF

DATABASE

by jeonghojin 2023. 4. 12. 00:43

본문

정규화(Normalization) 란?

정규화란 데이터베이스의 설계를 재구성하는 기술로써, 불필요한 데이터(Redundancy)를 없앨 수 있으며, 삽입/갱신/삭제 시 발생하는 이상현상을 방지할 수 있다.

정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)을 유지할 수 있다. * DB 저장 용량을 줄일 수 있다.
 
정규화된 결과를 정규형이라고 하며, 정규형은 기본 정규형, 고급 정규형으로 나뉜다.

  • 기본 정규형 : 제 1 정규형, 제 2 정규형, 제 3 정규형, BCNF(보이스/코드 정규형)
  • 고급 정규형 : 제 4 정규형, 제 5 정규형

정규형의 장점

  • 이상 현상 발생 가능성을 줄인다.
  • 불필요한 데이터나 중복된 데이터를 제거한다.
  • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.
  • 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장시, 그 구조의 변경을 최소화할 수 있다.

정규형의 단점 :

  • 릴레이션의 분해로 인해 릴레이션간의 JOIN 연산이 많아진다.
  • JOIN 이 많아질 경우, 연산시간이 증가한다.

* 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서, 데이터를 처리할 때 속도가 빨라질 수도 있고, 느려질 수도 있다.
조인이 많이 발생하여 성능 저하가 나타날 경우, 반 정규화(De-Normalization)를 적용할 수도 있다.

이상현상이란?
- 삽입이상 : 데이터 삽입 시, 의도와는 상관ㅇ벗이 원하지 않는 값들도 함께 삽입되는 현상
- 삭제이상 : 데이터 삭제 시, 의도와는 상관없이 다른 정보까지 연쇄적으로 삭제되는 현상
- 갱신이상 : 데이터 갱신 시, 의도와는 상관없이 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상

 

제 1 정규형(1NF)

릴레이션에 속한 모든 속성의 도메인이 더 이상 분해되지 않는 원자값으로만 구성되어야 한다.

  • 각 컬럼의 속성은 하나의 속성만 가져야 한다.
  • 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
  • 각 컬럼의 순서는 상관없어야 한다.
  • 각 컬럼은 유일한 이름을 가져야 한다.

제 2 정규형(2NF)

제 1 정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.
* 부분 함수 종속을 제거하고, 모든 속성이 기본키에 완전 함수 종속되도록 릴레이션을 분해

위 릴레이션에서 기본키는 학생번호, 강좌이름 으로 복합키이다. 기본키(학생번호, 강좌이름)은 성적을 결정하고 있다.
그리고 강의실 속성은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다.즉, 기본키(학생번호, 강좌이름) 의 부분키인 강좌이름이 결정자이기 때문에 위의 릴레이션의 경우 다음과 같이 기존의 릴레이션에서 강의실을 분해하여 별도의 릴레이션으로 관리한다.


 

제 3 정규형(3NF)

제 2 정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에이행적 함수 종속이 되지 않아야 한다.

* 이행적 종속이란 : A -> B, B -> C가 성립할 떄, A -> C가 성립되는 것을 의미. 

 
위 릴레이션을 보면 학생번호를 알면 강좌이름을 알 수 있고, 강좌이름을 알면 수강료를 알 수 있다. 따라서 학생번호를 알면 수강료를 알 수 있다. 이것을 이행 종속성이 존재한다고 한다.
* 만약, 이행종속성이 존재하는 상태로 501번 학생이 수강하는 강좌가 스포츠 경영학으로 변경되었다면, 501번 학생을 스포츠 경영학을 20000원의 수강료를 내고 듣게 된다.  강좌이름에 맞게 수강료를 다시 변경할 수 있지만, 이러한 번거로움을 해결하기 위해 제 3 정규화를 한다.


BCNF

제 3 정규형을 만족하고, 모든 결정자가 후보키가 되어야 한다.

위 릴레이션의 기본키는 학생이름, 강좌이름이다. 기본키는 교수를 결정하고 있고, 교수특강이름을 결정하고 있다.
그런데 문제는 교수특강이름을 결정하는 결정자이지만, 후보키가 아니라는 점이다. BCNF 정규형이 되려면 위 릴레이션을 분해해야 한다.

 


참고 : 

더보기

 

관련글 더보기