정규화(Normalization)
- 논리적 설계 단계에서 발생할 수 있는 종속으로 인한 이상(Anomaly) 현상의 문제점을 해결하기 위해, 속성들 간의 종속 관계를 분석하여 여러 개의 릴레이션으로 분해하는 과정.
- 종류 : 제1정규형, 제2정규형, 제3정규형, BCNF, 제4정규형, 제5정규형
정규형의 종류
1) 제1정규형(1NF : First Normal Form)
- 한 릴레이션을 구성하는 모든 도메인이 원자값(Atomic Value)만으로 구성되도록 하는 정규형을 말한다.
ex)
- 데이터베이스에서는 검색, 삽입, 삭제 등 여러 가지 작업이 튜플 단위로 이루어지기 때문에 '박순신' 회원과 '김길동' 회원과 같이 튜플을 하나로 합쳐서 표현하면 원할하게 수행되지 못한다.
회원 테이블 회원번호 성명 연락처 수강과목 수강료 10010 박순신 123-4567 POP글씨 40,000 지점토공예 40,000 20020 이감찬 234-1122 펜글씨 30,000 20030 김길동 321-4321 지점토공예 40,000 기타 50,000
- 따라서 위 [회원] 테이블이 각각의 튜플로 구성되도록 회원 정보를 나타내는 [회원] 테이블과 수강과목에 대한 정보를 나타내는 [강좌] 테이블로 분해하면 다음과 같다.
- 이와 같이 모든 도메인이 각각의 튜플로 구성되도록, 즉 원자값만으로 구성되도록 분해하는 과정을 제1정규형(1NF)이라고 한다.
회원 테이블 강좌 테이블 회원번호 성명 연락처 수강과목 수강료 10010 박순신 123-4567 POP글씨 40,000 20020 이감찬 234-1122 지점토공예 40,000 20030 김길동 321-4321 펜글씨 30,000 기타 50,000
2) 제2정규형(2NF : Second Normal Form)
- 제1정규형을 만족하면서 릴레이션을 구성하는 모든 속성이 기본키에 완전 함수 종속이 되도록 분해하는 과정을 말한다.
- 제2정규형에서는 릴레이션에 존재하는 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속이 되도록 한다.
ex)
[제2정규형 적용 전]
- 고객주문 테이블에서 고객번호, 제품번호가 조합된 합성키가 기본키가 된다.
고객주문(고객번호, 제품번호, 제품명, 주문량)
완전 함수 종속 : (고객번호, 제품번호) -> 주문량
부분 함수 종속 : 제품번호 -> 제품명
- 따라서 이와 같이 부분 함수 종속 관계가 있는 테이블을 기본키에 완전 함수 종속이 되도록 분해한다.
[제2정규형 적용 후]
주문량(고객번호, 제품번호, 주문량) => 완전 함수 종속 : (고객번호, 제품번호) -> 주문량
제품(제품번호, 제품명) => 완전 함수 종속 : 제품번호 -> 제품명
- 이렇게 속성 주문량, 제품명은 각 테이블의 기본키에 완전 함수 종속이 되어 제2정규형(2NF)을 만족하게 된다.
3) 제3정규형(3NF : Third Normal Form)
- 제2정규형을 만족하면서 릴레이션을 구성하는 속성들 간에 이행적 함수 종속 관계를 분해하여 비이행적 함수 종속이 되도록 하는 과정을 말한다.
ex)
[제3정규형 적용 전]
수강(학번, 전공, 담당교수)
이행적 함수 종속 : 학번 -> 전공, 전공 -> 담당교수, 학번 -> 담당교수
- 따라서 이행적 함수 종속 관계가 있는 수강 테이블을 분해하면 다음과 같이 분해할 수 있다.
[제3정규형 적용 후]
학생(학번, 전공)
교수(전공, 담당교수)
- 이와 같이 수강 테이블을 학생 테이블, 교수 테이블로 분해하면 각 테이블이 기본키에 완전 함수 종속 관계로 유지되면서 이행적 함수 종속 관계도 해결되어 제3정규형(3NF)을 만족하게 된다.
4) 보이스-코드 정규형(BCNF : Boyce-Codd Normal Form)
- 제3정규형을 만족하면서, 릴레이션에서 모든 결정자가 후보키가 되도록 하는 과정을 말한다.
결정자 : 속성 A, B 중에서 속성 A가 속성 B의 값을 결정한다면, 즉 A->B의 종속 관계에 있을 때 A를 결정자라 한다. B는 종속자가 된다.
후보키 : 릴레이션에서 각 튜플을 유일하게 식별할 수 있는 속성이나 속성의 집합을 말한다.
ex)
[BCNF 적용 전]
회원등록(회원번호, 수강과목, 강사)
- 등록 테이블에서 한 명의 회원이 여러 과목을 수강할 수 있으므로 회원번호 하나의 속성으로는 후보키가 될 수 없다.
- 후보키 (회원번호, 수강과목)과 (회원번호, 강사) 중 기본키를 (회원번호, 수강과목)으로 지정하면 다음과 같은 종속 관계가 성립된다.
(회원번호, 수강과목) -> 강사
- 또한 등록 테이블에서는 한 과목을 여러 명의 강사가 강의할 수 있음을 알 수 있다.
- 이때 강사 속성은 후보키가 아님에도 수강과목을 결정하는 결정자 역할을 하고 있는 것이다.
강사 -> 수강과목
- 회원등록 테이블의 강사 속성을 외래키로 지정하여 강사 테이블을 참조한다.
회원등록(회원번호, 강사)
강사(강사, 수강과목)
- 이와 같이 등록 테이블을 회원등록 테이블과 강사 테이블로 분해하면 모든 결정자가 후보키가 되어 BCNF를 만족하게 된다.
5) 제4정규형(4NF : Fourth Normal Form)
- 릴레이션에서 다치 종속(MVD : Multivalued Dependency) 관계가 성립되는 경우 분해하는 정규형을 말한다.
- 함수 종속은 A->B인 경우 A의 속성값은 B의 속성값 하나를 결정하게 된다.
- 다치 종속(MVD)은 함수 종속과는 달리 하나의 속성값이 대응되는 속성의 집합을 결정하는 종속 관계를 말하며, 릴레이션의 속성이 3개 이상일 때 존재한다.
- 다치 종속의 표기법 : A ->> B : A의 속성값은 B의 속성값의 집합을 결정하게 된다.
ex)
[제4정규형 적용 전]
강좌(과목명, 강사, 교재)
다치 종속 : 과목명 ->> 강사, 과목명 ->> 교재
- 이와 같이 하나의 속성값과 여러 개의 속성값이 종속된 관계를 다치 종속(MVD)이라고 한다.
[제4정규형 적용 후]
강사(과목명, 강사)
교재(과목명, 교재)
6) 제5정규형(5NF : Fifth Normal Form)
- 릴레이션에 존재하는 조인 종속(Join Dependency)이 후보키를 통해서만 성립이 되도록 하는 정규형을 말한다.
- 조인 종속(Join Dependency)은 원래의 릴레이션을 분해한 뒤 자연 조인한 결과가 원래의 릴레이션과 같은 결과가 나오는 종속성을 말한다.
정규화 진행 과정
외울 때 1NF(도) - 2NF(부) - 3NF(이) - BCNF(결) - 4NF(다) - 5NF(조) 로 외우는 것을 추천.
순서 정규형 설명 1 제1정규형(1NF) - 모든 도메인은 원자값이 되도록 분해. 2 제2정규형(2NF) - 부분 함수 종속 -> 완전 함수 종속. 3 제3정규형(3NF) - 이행적 함수 종속 -> 비이행적 함수 종속. 4 BCNF - 후보키가 아닌 결정자 관계 제거. 5 제4정규형(4NF) - 다치 종속 관계 제거. 6 제5정규형(5NF) - 후보키를 통하지 않은 조인 종속 관계 제거.
'정보처리산업기사 실기 > 데이터베이스' 카테고리의 다른 글
내장 SQL과 커서(Cursor) (0) | 2020.11.07 |
---|---|
역정규화 (0) | 2020.11.07 |
이상(Anomaly)과 함수적 종속 (0) | 2020.11.06 |
뷰(VIEW)와 시스템 카탈로그 (0) | 2020.11.06 |
SQL 제어어(DCL : Data Control Language) (0) | 2020.11.06 |