(데이터베이스) 2정규화

2. 제 2정규화


"복합키(Composit Primary Key)에 전체적으로 의존하지 않는 속성들을 제거한다."

우선 제 2정규화의 대상이 되는 테이블은 키가 여러 칼럼으로 구성된 경우이다.

제 2정규화를 이해하기 위해서 우선 '키에 의존적(지배적)이다' 라는 말의 의미를 먼저 살펴보자. '키의 값을 알면 칼럼 값을 알 수 있다.'


위 테이블의 기본키는 사원번호이다. 키가 아닌 일반칼럼은 모두 기본키에 의해 지배되어야 한다. 키에의해 지배되어야 한단느 것은 위의 사원 테이블에서 사원번호를 알면 그 사원에 대한 이름, 주소, 성별, 입사일을 알 수 있음을 의미한다.

만약 사원 테이블에 상품명이라는 칼럼이 들어와 있다고 하자. 상품명이 사원번호에 의조적인가? 그렇지 않다. 이런 칼럼들은 전혀 의미가 없으며 걸러져 제자를 찾아가야만한다.

기본적으로 테이블의 키가 아닌 모든 칼럼들은 기본키에 의존적이어야만 한다.


만약 테이블의 기본키가 여러 컬럼으로 구성된 경우 즉, 복합키인 경우도 역시 모든 칼럼들은 복합키 전체에 의존적이어야 한다.

만약 복합키 전체에 의존하지 않는 컬럼이 존재하는 경우 기본 테이블에서 제거시켜 새로운 테이블을 생성해 주어야 한다.


평가코드는 학번, 과정코드 전체에 의존적이지만 과정명은, 기간은 복합키의 일부분인 과정코드에 의해서 지배됨을 알 수 있다.


이렇게 테이블이 설계되었을 경우의 문제점은 과정명, 기간에 중복되는 데이터가 계속 쌓이게 된다. 또한 이렇게 설계되었을 경우에 데이터의 무결성을 유지하는데 어려움이 따른다. 만약 'JAVA' 과정명이 C++로 수정되었을 경우에 그에 해당하는 모든 데이터를 수정해야 한다.

제 2정규화 이론을 적용시켜 복합키의 일부분 즉, 과정코드에 의존적인 속성인 과정명, 기간을 기본 테이블에서 제거시켜 새로운 테이블을 구성하면 다음과 같은 두 개의 테이블이 생성됨을 알 수 있다.


댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기