-->

[정보처리기사] 데이터베이스 정규화의 목적과 과정

반응형

데이터베이스 정규화 부분은 예제 없이 글로만은 이해하기가 힘들어서 구글링을 많이 했다. 출처는 본문 중간중간에 적혀있다.

 

 

데이터베이스 정규화(Normalization)란?

정규화란 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어가는 과정이다. 바람직한 스키마로 만들어간다는 것은 데이터베이스 설계를 논리적으로 재구성한다는 것으로 이해하면 된다. 이렇게 정규화를 수행하면 불필요한 데이터를 없애거나 삽입/삭제 등의 쿼리 수행 시 발생할 수 있는 각종 이상현상을 방지할 수 있다.

 

- 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정

- 제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형,제5정규형이 있음

- 차수가 높아질수록 만족시켜야 할 제약조건이 많아짐

- 정규화는 데이터베이스 논리적 설계 단계에서 수행

 

 

정규화의 목적

- 데이터 구조의 안정성, 무결성을 유지

- 데이터 중복을 배제해 이상 발생 방지

- 자료 저장 공간의 최소화

- 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄여줌

 

 

이상(Abnormaly)의 개념 및 종류

정규화를 거치리 않으면 데이터베이스 내의 데이터들이 불필요하게 중복되어 릴레이션 조작 시 이상 현상이 발생하게 된다. 이러한 이상의 종류에는 삽입이상, 삭제이상, 갱신이상이 있다.

 

삽입이상 (Insertion Anomaly)

- 데이터 삽입 시 원하지 않은 값들도 함께 삽입됨

- ex. 새로운 교수의 경우 아직 맡은 강의가 없어서 새 교수를 테이블에 추가할 수 없음

 

데이터베이스 정규화 - 삽입이상 (출처: 위키백과, 정규화)

 

삭제이상 (Deletion Anomaly)

- 한 튜플을 삭제할 때 다른 값들도 함께 삭제되는 연쇄 현상

- ex. 한 교수가 강의를 중단하고자할 때, 강의를 지우면 교수 자체가 사라지게 됨

 

데이터베이스 정규화 - 삭제이상 (출처: 위키백과, 정규화)

 

갱신이상 (Update Anomaly)

- 튜플의 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보의 모순이 생기는 현상

 

데이터베이스 정규화 - 갱신이상 (출처: 위키백과, 정규화)

 

 

데이터베이스 정규화 과정

정규화 과정에 대한 설명은 제대로 이해가가지 않아 아래 링크의 설명과 자료를 인용했다.

 

https://3months.tistory.com/193

https://zetastring.tistory.com/99

 

 

1NF (제1정규형)

- 릴레이션에 속한 모든 도메인이 원자값만으로(1개) 되어있는 정규형

- => 하나의 속성이 단일값을 갖도록 하는 정규화 과정

 

아래 테이블의 경우, Adam의 Subject가 두개이기 때문에 1차정규형을 만족하지 못한다. 따라서 1차 정규화를 위해선 아래와 같이 1개의 행을 더 추가하게 된다. 혹은 Subject1, Subject2로 속성을 추가할 수도 있다.

 

1차 정규화 전
1차 정규화 후

 

2NF (제2정규형)

- 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형

- 완전 함수적 종속이란, 특정 속성에 완전히 종속된 속성이 없어져야 한다는 것을 말함

=> 기본키가 복합키일 때, 특정 속성이 복합키 전체가 아닌 일부 속성에 의존적인 경우 따로 분리해 새로운 테이블을 만들어야 함

 

(Student+Subject)가 기본키가 될 수 있는데 Age의 경우 Student에 종속되어 있다. 그 이유는 Student 값을 알면, Age 값을 알 수 있기 때문이다. 따라서 2차 정규화를 위해선 아래와 같이 테이블을 쪼개야 한다.

 

2차 정규화 후

 

3NF (제3정규형)

- 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형

=> 주 식별자가 아닌 속성 중 종속관계가 있는 속성을 제거하는 과정 (기본키 외의 속성이 그 외의 속성을 결정할 수 없어야 함)

 

아래 테이블의 경우 Student_id가 기본키인데 기본키 외의 속성을 봐보면 Street, City, State, Zip이 있다. 이 중 Zip 을 알면 Street, City, State가 결정되기 때문에 종속관계가 있다고 볼 수 있다.

 

3차 정규화 전

 

따라서 아래와 같이 테이블을 쪼갬으로써 3차 정규형을 만족시킬 수 있다. 즉, 기본키를 제외한 속성들 간에 이행적 함수 종속이 없게 되는 것이고 이 뜻은 기본키 외의 다른 속성이 그 외 다른 속성을 결정할 수 없다는 것이다.

 

3차 정규화 후

 

 

BCNF (Boyce-Codd 정규형)

- 릴레이션에서 결정자가 모두 후보키인 정규형

- 강한 제3정규형이라고도 함

 

 

정규화 과정 정리

정규화 과정을 정리해보면, 아래와 같다.

 

- 제1정규형 만족 : 모든 속성값이 원자값

- 제1정규형 -> 제2정규형 만족 : 부분적 함수 종속 제거 (=완전 함수 종속적이어야 함)

- 제2정규형 -> 제3정규형 만족 : 이행적 함수 종속 제거 (A->B, B->C일때, A->C인 것을 제거)

- 제3저규형 -> BCNF 만족 : 결정자이면서 후보키가 아닌 것 제거

- BCNF -> 제4정규형 만족 : 다치 종속

- 제4정규형 -> 제5정규형 : 조인 종속성 이용

댓글

Designed by JB FACTORY