본문 바로가기
✨ DBMS/etc

[DB] 정규화(Normalization)

by 환풍 2023. 8. 3.
728x90

 

정규화 (Normalization)

논리적 설계 단계에서 발생할 수 있는 종속으로 인한 이상 현상의 문제점을 해결하기 위해
속성들 간의 종속 관계를 분석해 여러 개의 릴레이션으로 분해하는 과정

 

1 정규형

 - 한 릴레이션을 구성하는 모든 도메인이 원자 값 만으로 구성되도록 하는 정규형 

박순신과 김길동은 한 명의 회원이 여러 과목을 수강하고 있다.

그런데 박순신 회원과 김길동 회원에 대해 중복되는 속성값, 회원번호, 성명, 연락처에 해당하는 튜플을 하나로 합쳐냈다.

DB에서는 검색,삽입,삭제 등 여러 작업이 튜플 단위로 이루어지기 때문에

박순신, 김길동 회원처럼 튜플을 하나로 합쳐 표현하면 원활하게 수행되지 못한다.

따라서 테이블 각각의 튜플로 구성되도록 회원정보를 나타내는 회원테이블과

수강과목에 대한 정보를 나타내는 강좌테이블로 분해하면 된다.

회원(회원번호, 성명, 연락처)

강좌(수강과목, 수강료)

회원

 

이와 같이 모든 도메인이 각각 튜플로 구성되도록 즉, 원자 값 만으로 구성되도록 분해하는 과정을 1 정규형이라 한다.

 

2 정규형

 - 1 정규형을 만족하면서 릴레이션을 구성하는 모든 속성이 기본 키에 완전 함수 종속되도록 분해하는 과정

릴레이션에 존재하는 부분 함수 종속을 제거하고 모든 속성이 기본 키에 완전함수 종속이 되도록 한다.

고객 주문 테이블에서 고객번호와 제품번호가 조합합성키가 기본 키가 된다.

종속관계를 살펴보면 주문량 속성값은 고객번호와 제품번호를 모두 알아야 구분할 수 있어,

기본키인 (고객번호, 제품번호)에 완전함수 종속된다.  (고객번호, 제품번호) -> 주문량

반면에, 제품명 속성값은 기본키인(고객번호, 제품번호)의 일부인 제품번호만 알아도 구분할 수 있으므로 부분 함수 종속관계가 있다.   (제품번호 -> 제품명)

따라서, 이와 같이 부분 함수 종속관계가 있는 테이블을 기본 키에 완전함수 종속이 되도록 분해하면 

주문량 (고객번호, 제품번호, 주문량)

제품 (고객번호, 제품명)

 

이와 같이 고객 주문 테이블을 주문량 테이블과 제품 테이블로 분해하면 주문량 테이블에서 주문량은 기본 키인

(고객번호, 제품번호)에 완전함수 종속이 되고 제품테이블에서 제품명은 기본 키인 제품번호에 완전함수 종속이 되어

제 2 정규형을 만족하게 된다.

 

3 정규형

2 정규형을 만족하면서 릴레이션을 구성하는 속성들간에 이행적 함수 종속관계를 분해하여 비이행적 함수 종속이 되도록하는 과정.

학번을 알면 그 학생의 전공을 알 수 있다. 즉, 전공은 학번에 종속되어 있다.

또한 전공을 알면 담당교수를 알 수 있다, 즉 담당교수는 전공에 종속되어 있다

결국 학번을 알면 전공 속성값을 알 수 있고 담당교수 속성값도 알 수 있게 된다.

즉, 학번과 담당교수 속성간에 이행적 함수 종속관계가 있는 것이다.

학번 -> 전공

전공 -> 담당교수

학번 -> 담당교수

 

이와 같이 수강테이블을 학생 테이블과 교수테이블로 분해하면 각 테이블이 기본 키에 완전함수 종속관계로 유지 되면서 이행적 함수종속 관계도 해결되어 3 정규형을 만족한다.

반응형

댓글