요약
정규화란 Entity(테이블)를 분해하는 과정이다 !
정규화의 개념
- 하나에 테이블에 많은 속성을 넣게 되면, 해당 테이블를 조회할 때 마다 많은 양의 데이터가 조회될 것이므로 최소한의 데이터만을 하나의 테이블에 넣는식으로 테이블을 분해하는 과정을 정규화라고합니다.
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 과정이라고 볼 수 있습니다.
- 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보하는 과정입니다.
- 데이터 이상현상을 줄이기 위한 데이터 베이스 설계 기법입니다.
- 제1 정규화부터 제5 정규화까지 존재하지만 실질적으로는 제3 정규화까지만 수행됩니다.
정규화의 단계
[ 제1 정규화(1NF) ]
제1 정규화란 테이블의 컴럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 과정입니다.
예를 들어 아래와 같은 테이블이 존재할 때 홍길동은 샴푸, 린스 두 상품을 가지고 있기에 제 1정규형을 만족하지 못하고 있습니다.
그렇기 때문에 이를 제 1정규화하여 분해할 수 있습니다. 제1 정규화를 진행한 테이블은 아래와 같습니다 !
[ 제2 정규화(2NF) ]
제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 과정입니다.
중요한 부분은 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어서는 안된다는 것을 의미합니다.
예을 들어 아래와 같이 테이블이 존재할 때 기본키는 학생번호와 강의명으로 복합키입니다.
그리고 학생번호와 강의명 기본키는 성적을 결정하고 있습니다. (학생번화, 강의명) -> (성적)
하지만 여기서 강의실이라는 컬럼은 기본키의 부분집합인 강의명에 의해 결정될 수 있습니다. (강의명) -> (강의실)
즉, 기본키(학생번호, 강의명)의 부분키인 강의명이 결정자이기에 위의 테이블의 경우 아래와 같이 수강이력 테이블에서 강의실을 분리하여 별도의 테이블로 관리하여 제2 정규형을 만족시킬 수 있습니다 !
정리하자면 성적은 학생번호, 강의명에 의해 결정되지만 강의실의 경우 학생번호 컬럼이 필수가 아니기 때문에 강의실 컬럼을 새로운 테이블로 만들어줘야 된다는 의미 !
[ 제3 정규화(3NF) ]
제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 과정입니다.
여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립될 경우 A -> C가 성립되는 것을 의미합니다.
예를 들어 아래와 같이 구매 테이블이 존재할 경우 고객번호에 의해 상품명이 결정되고 상품명에 의해 가격이 결정 되는데 고객번호에 의해서도 구매 가격이 결정될 수 있는 구조를 가지고 있습니다.
A(고객번호)-> C(가격)을 만족하기 때문에 구매 테이블과 상품 테이블로 아래와 같이 분리하여 제3 정규화를 만족시킬 수 있습니다 !
* BCNF 정규화부터 제 5정규화까지는 간단하게 정리만 하고 넘어가겠습니다 !
[ BCNF 정규화 ]
모든 결정자가 후보키가 되도록 테이블을 분해하는 과정입니다.(결정자가 후보키가 아닌 다른 컬럼에 종속되면 안됩니다.)
[ 제4 정규화 ]
여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거하는 과정입니다.
[ 제5 정규화 ]
조인에 의해 종속성이 발생되는 경우 분해하는 과정입니다.
'IT이론 > 데이터베이스' 카테고리의 다른 글
[CS] 트랜잭션이란 ? (Spring/Spring Boot) (1) | 2024.03.25 |
---|---|
[CS] 데이터 모델링이란 ? (0) | 2024.03.01 |
개발의 모든 것 !
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!