정규화가 진행되면
정규화는 DB 설계에 있어 중요한 요소지만 high-level의 정규화를 만족하는 schema가 성능적인 관점에서 항상 최적은 아니다.
정규화가 1NF, 2NF ... 진행됨에 따라 테이블은 적어도 2개로 쪼개진다. 테이블의 분할은 추후 더 많은 조인 연산을 필요로 한다.
위 테이블은 부분 함수 종속성은 없지만 이행적 함수 종속성은 존재하는 제 2정규화를 만족하는 테이블이다. 만약 ST_NO가 11002인 학생의 DEPT 이름과 DEPT 전화 번호를 select하라는 쿼리를 짜야한다고 하자.
SELECT DEPT, DEPT_PHONE
FROM STUDENT1
WHERE ST_NO = 11002;
다음과 같이 조인 없이 필요 정보를 select 할 수 있다.
그러나, 이행적 함수 종속성을 제거하기 위한 제 3정규화를 만족하기 위해 정규화를 진행했다면 기존의 테이블은 2개로 분할된다. 같은 내용의 쿼리는 다음과 같다.
SELECT ST.DEPT, D.DEPT_PHONE
FROM STUDENT2 as ST, DEPARTMENT as D
WHERE ST_NO = 11002 and ST.DEPT = D.DEPT;
다음과 같이 같은 내용의 쿼리일지라도 조인 연산이 한 번 더 들어간다.
비정규화함으로써 DB 설계자는 중복과 갱신 이상을 일부 허용하더라도 성능의 향상을 달성할 수 있다.