정규화란
DB의 중복 최소화를 위하여 데이터를 구조화 하는 작업이다. 중복된 정보로 인해 갱신 이상과 저장공간을 낭비하게 되는데 이런 문제를 해결하기 위한 과정이다.
갱신이상
- 삽입 이상 : 삽입 시 필요하지 않은 데이터도 같이 삽입을 해주어야 한다
- 삭제 이상 : 삭제 시 필요한 데이터도 같이 삭제가 된다
- 갱신 이상 : 갱신 시 데이터의 불일치가 발생한다
제1 정규화
모든 속성은 반드시 하나의 값만 가져야 한다.
제2 정규화
식별자 일부에 종속되는 어트리뷰트는 제거해야 한다.
제3 정규화
식별자 이외의 속성간에 종속 관계가 존재하면 안된다. 주로 코드와 같은 정보에서 반영이 되는데, 한 엔티티안에 코드번호와 코드이름을 동시에 두는것이 아닌 코드이름에 관련된 엔티티로 분리해서 관리해야한다.
반정규화
정규화를 진행한 후 릴레이션의 분해로 인해 Join을 수행하느라 많은 리소스가 소모된다면 반정규화를 수행하여야 한다
반정규화 대상
- 자주 사용되는 테이블에 엑세스하는 프로세스의 수가 가장 많고 항상 일정한 범위만을 조회하는 경우
- 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우
- 테이블에 지나치게 조인을 많이하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우