넓고 얕은 데이터베이스 지식

정규화(Normalization) 5분 요약 정리

팡펑퐁 2023. 2. 19. 17:56
728x90

📌 정규화(Normalization)

  • 데이터베이스를 설계할 때 중복을 최소화하기 위해 데이터를 구조화하는 프로세스를 말한다.
  • 기본 정규화 : 제 1 정규형, 제 12정규형, 제 3 정규형, BCNF 정규형
  • 고급 정규화 : 제 4 정규형, 제 5 정규형

 

정규화의 목표

  • 테이블 간에 중복된 데이터를 허용하지 않는다.
  • 이로써 무결성(integrity)를 유지하고, 데이터베이스의 저장 용량을 줄일 수 있다.

 

기본 정규화

제 1 정규형

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

예시

이름 취미
우리흥 PC 게임
한반두 수영, 테니스
메신 축구, 야구
홀란드 영화 감상
  • 위 테이블에서 한반두와 메신은 두 개 이상의 취미를 가지고 있다.
  • 제 1 정규형으로 테이블을 분해해보자.
이름 취미
우리흥 PC 게임
한반두 수영
한반두 테니스
메신 축구
메신 야구
홀란드 영화 감상

 

 

제 2 정규형

  • 제 1 정규형을 만족함과 동시에
  • 완전 함수 종속을 만족하도록 테이블을 분해하는 것을 말한다.
    • 완전 함수 종속은 기본키의 부분 집합이 결정자가 돼서는 안된다는 것을 의미한다.

예시

학생번호 강좌명 강의실 성적
1 데이터베이스 공학관 101 A+
1 네트워크 기초 공학관 102 A
2 네트워크 기초 공학관 102 B
3 C 언어 공학관 103 B+
2 선형대수학 공학관 204 A
4 선형대수학 공학관 204 A+
  • 위 테이블은 기본키가 (학생번호, 강좌명)으로 복합키이다.
  • 기본키는 성적을 결정하고 있다.
    • (학생번호, 강좌명) --> (성적)
  • But, 강의실 컬럼이 기본키(학생번호, 강좌명)의 부분집합인 강좌명에 의해 결정되고 있다.
    • (강좌명) --> (강의실)
  • 완전 함수 종속을 만족하기 위해 제 2 정규형으로 통해 분해해보자.
    • 별도의 테이블로 관리하는 방법을 사용할 수 있다.
학생번호 강좌명 성적
1 데이터베이스 A+
1 네트워크 기초 A
2 네트워크 기초 B
3 C 언어 B+
2 선형대수학 A
4 선형대수학 A+
  • (학생번호, 강좌명) --> (성적)
강좌명 강의실
데이터베이스 공학관 101
네트워크 기초 공학관 102
네트워크 기초 공학관 102
C 언어 공학관 103
선형대수학 공학관 204
선형대수학 공학관 204
  • (강좌명) --> (강의실)
  • 학생번호, 강좌명으로 성적을 참조하고, 강좌명으로 강의실을 참조할 수 있도록 분해했다.

 

 

제 3 정규형

  • 제 2 정규형을 만족함과 동시에
  • 이행적 종속을 없애도록 테이블을 분해하는 것이다.
    • 이행적 종속은 A -> B, B -> C를 만족할 때 A -> C가 성립되는 것을 의미한다.

예시

학생번호 강좌명 수강료
1 데이터베이스 15000
2 데이터베이스 15000
3 네트워크 20000
4 자료구조 25000
  • 위 테이블에서 학생번호는 강좌명을 결정하고 있다.
    • (학생번호) --> (강좌명)
  • 강좌명은 수강료를 결정하고 있다.
    • (강좌명) --> (수강료)
  • 이행적 종속에 의해 학생번호가 수강료를 결정할 수 있게 된다.
    • (학생번호) --> (수강료)
  • 이행적 종속을 제거하는 이유
    • 1번 학생이 수강하는 강좌가 네트워크로 변경되었다고 가정하자.
    • 이행적 종속이 존재한다면 네트워크 강의를 20000원에 듣게 된다.
    • 물론, 강좌명에 맞게 수강료를 변경할 수 있지만 복잡함과 번거로움을 줄이기 위해 이행적 종속을 제거한다.
학생번호 강좌명
1 데이터베이스
2 데이터베이스
3 네트워크
4 자료구조
  • (학생번호) --> (강좌명)
학생번호 수강료
1 15000
2 15000
3 20000
4 25000
  • (강좌명) --> (수강료)
  • 학생번호로 강좌명을 참조하고, 강좌명으로 수강료를 참조하도록 테이블을 분해했다.

 

 

BCNF(Boyce-Codd Normail Form) 정규형

  • 제 3 정규형을 만족함과 동시에
  • 모든 결정자가 후보키가 되도록 테이블을 분해하는 것을 말한다.

예시

학생번호 강좌명 교수명
1 데이터베이스 콘테
2 데이터베이스 콘테
3 네트워크 박항서
4 운영체제 김덕배
1 JAVA 안첼로티
5 JAVA 안첼로티
  • 위 테이블에서 기본키는 (학생번호, 강좌명)이다.
  • 기본키는 교수명을 결정하고 있다.
    • (학생번호, 강좌명) --> (교수명)
  • 그런데 여기서 교수명은 강좌명을 결정하고 있다.
    • (교수명) --> (강좌명)
  • 교수명은 결정자이지만, 후보키가 아니다.
  • BCNF 정규형으로 테이블을 분할해보자.
학생번호 교수명
1 콘테
2 콘테
3 박항서
4 김덕배
1 안첼로티
5 안첼로티
  • (학생번호), (교수)
강좌명 교수명
데이터베이스 콘테
데이터베이스 콘테
네트워크 박항서
운영체제 김덕배
JAVA 안첼로티
JAVA 안첼로티
  • (교수명) --> (강좌명)

 

 

고급 정규화

  • 실제 데이터베이스를 설계할 때는 기본정규화 선에서 해결하는 경우가 많다.
  • 간단하게 무엇이 있는지만 알아보자.

제 4 정규형

  • BCNF를 만족함과 동시에
  • 다치 종속(MVD, Muilti Valued Dependency)을 제거해야 만족할 수 있다.

 

 

제 5 정규형

  • 제 4 정규형을 만족함과 동시에
  • 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있다.

 

 

참고 :

https://mangkyu.tistory.com/110

728x90