2-2. 정규화 ( 제 3 정규형, 반정규화와 성능 )
저번시간에 배워봤던 정규화에 대해서 알아봤고 이제는 제 3정규형에 대해 알아보자.
제 3정규형 : 엔터티의 일반속성 간에는 서로 종속적이지 않는다.
앞서 말씀 드린대로 정규형은 이제 조금씩 조금씩 다듬는 것이다.
여기서 제 3 정규형에 대한 말은 "이행적 종속" 과 연관이 있다.
예를 들면 요런 테이블이 있다고 가정해보자. 이럴 경우에 봤을 때 몇가지 문제가 생긴다.
* 데이터 갱신 이상 문제
예를 들면, 고객이 이름을 바꿔 고객명을 바꿀 때 모든 주문 상세 테이블의 고객명을 따로따로 업뎃을 해주어야한다.
예를 들면, 에이미가 베이미로 바꾼다고 하면 -> 두 번의 작업을 해주어야하는 것이다.
요렇게 되면 주문과는 전혀 연관 없는 트랜잭션이므로 이를 확인해주어야한다. 이럴 경우 두번의 쓸데없는 작업이 생기므로 "정규화"는 정말 중요하다~
여기까지 봤을 때,, 나는 제2정규형과 제 3정규형이 조금 혼동이 오기 시작했다. 둘다 종속적인 관계를 띄어내는 그런 작업이라고 보여졌다.
그래서 요기저기를 찾아봤는데..! 나와 같은 질문을 한 사람이 있었다.
OKKY | 안녕하세요, 데이터베이스 2정규식과 3정규식의 차이점에 대한 궁금한게 있습니다.
제 2 정규식의 정의는 모든 속성은 PK에 속해야 하고 제 3 정규식의 정의는 이행적 함수를 모두 제거해야 한다. 라고 하던데 결국 같은 말 아닌가요? 제 3 정규식에서 이행적 함수를 제거한다는건
okky.kr
데이터 중복
* 데이터 갱이상 문제
* 데이터 갱신* 데이터 갱신 이상 문제 이상 문제
제 2정규형과 제 3정규형이 약간 헷갈렸지만..! 가장 중요한건 우선 PK 컬럼
우선 제 3정규형은 먼저 제 2정규형이 모두 수행되고 나서 설정된다. A(FK), B, C, D, E 라는 컬럼을 가진 테이블이 있다고 가정을 해보자.
먼저, 제 2정규형을 진행한다고 가정을 해볼때, B 컬럼이 -> C 컬럼에 종속적인 영향을 미치는 것을 파악했다. 또한, 이럴 경우, C 의 컬럼은 A 의 컬럼에 영향을 받지 않는다.
이럴 경우 진행되는 것이 제 2정규형이다 .
이렇게 진행되고 나면 이제 테이블이 A,B, D, E 테이블 하나 그리고 B,C 테이블 하나로 나누어질 것이다. 이제 진행하는 것이 제 3정규형인데, 이럴 경우에 해당 테이블을 확인해볼 수 있도록 한다.
이럴 경우에는 이미 B, D, E 컬럼의 경우는 A 컬럼에 종속적인 관계임이 확인이 된 것이다. 하지만 이행적 종속관계라는 것은 그 안에 또 내부적으로 종속되는지에 대한 것이다 .
따라서 B,D, E 컬럼의 경우 A 와도 종속적이지만 내부에 B 의 컬럼이 D 의 컬럼 에서 결정자 역할을 하므로 이의 경우는 제 3정규형의 과정이라고 볼수 있따.