독학사/데이터베이스

기본 정규형

개발자 입니다 2022. 10. 12. 12:55

평가영역

  • 제1정규형
  • 제2정규형
  • 제3정규형
  • BCNF(Boyce-Codd 정규형)
  • 정규화의 예
  • 기본 정규형의 정리

 

정규형 순서 (도-부-이-결-다-조)

  • 제1정규형 = 도메인이 원자값
  • 제2정규형 = 부분 함수종속 제거
  • 제3정규형 = 이행적 함수종속 제거
  • BCNF = 결정자가 후보키가 함수종속 제거
  • 제4정규형 = 함수종속이 아닌 다치종속 제거
  • 제5정규형 = 후보키를 통하지 않은 함수적 종속 제거

모든 정규형은 이전 정규형을 만족한다.

(예: 제2정규형은 제1정규형을 만족하면서 부분 함수종속도 제거됨)


제1정규형

하나의 컬럼 안에 값이 여러개 있는경우를 제거


제2정규형

부분적 함수적 종속을 제거
예) (강좌번호, 수강자)가 기본키일때

"학점" 컬럼은 기본키에 완전 함수적 종속이지만(강좌번호와 수강자 모두 있어야 키가 성립)

"주관학과", "강의실 번호"는 (강좌번호)에만 종속되므로(강좌번호 하나로만으로도 키가 성립) 부분적함수 종속이다.


제3정규형

세개의 속성 사이에 존재하는 이행적 함수종속을 제거

예) (강좌번호)가 기본키이고 "주관학과"와 "강의실 번호"속성이 있을때

  • (강좌번호)->"주관학과"
  • (강좌번호)->"강의실 번호"
  • "주관학과"->"강의실 번호"

상태가 되는데, 이럴경우 강좌가 폐지되면 강의실 정보가 사라지게 되거나 특정학과의 강의실을 생성하려면 강좌를 생성해야한다.

 

"주관학과"컬럼만으로 "강의실 번호"를 종속하므로 

  • (강좌번호) "주관학과"
  • (강좌번호) "강의실 번호"

두개의 테이블로 분리하게 되면 이행적 함수종속이 제거된다.


BCNF

기본키가 합성키(속성 2개이상)이고 합성키가 둘 이상일때 발생하는 문제점

= 합성키가 두개이상 있고 합성키들 끼리 공통된 컬럼을 포함할때

예) (학번, 과목, 교수명) 테이블은

  • (학번, 과목) -> 교수명
  • 교수명 -> 과목

상태인데 과목별 수강신청자가 없으면(학번 데이터가 없으면) 교수와 과목 데이터가 생성될 수 없는 문제가 발생한다. 따라서

  • (학번, 과목)
  • (학번, 교수명)
  • (교수명, 과목)

세개의 테이블로 분리하게 되면 BCNF를 만족한다.

 


정규화의 예

https://code-lab1.tistory.com/48

 

[DB] 정규화(Normalization)란? 정규화 예시, 1NF, 2NF, 3NF, BCNF

정규화(Normalization)란? 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계

code-lab1.tistory.com


기본 정규화의 정리

 

개념

  • 현실세계를 DB에 정확하게 표현하려는 관계 스킴을 정의하는 작업
  • 데이터의 중복성을 최소화 하는 과정
  • DB의 논리 설계과정에서 수행
  • 릴레이션당 하나의 종속성을 가지도록 분해하는 과정(독립적인 관계는 별개의 릴레이션으로 표현해야한다.)
  • 데이터 중복에 따른 이상을 제거하는것이 목적이다.

 

목적

  • 연산의 이상을 제거하기 위함이다.
  • 논리적 처리 및 품질에 큰 영향을 끼친다.(물리적 구조나 처리에 영향 X)
  • 새 데이터를 삽입할때 릴레이션을 재구성할 필요성을 줄인다.
  • 개체간의 관계를 쉽게 파악할 수 있도록한다.
  • 정규화 단계가 높아질수록 만족시켜야할 제약조건이 늘어난다.
  • 정규화 레벨은 의미상의 문제이다.
  • 정규화는 데이터를 바람직한 모습으로 유도하는 과정(가역적이다)