넓고 얕은 데이터베이스 지식
정규화(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 정규형을 만족함과 동시에
- 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있다.
참고 :
728x90