본문 바로가기
Database/SQL

[SQL] SQL 정규화 총정리

by 과외선생J 2020. 11. 24.
반응형

안녕하세요 과외선생 J 입니다. 

 

이번시간에는 다소 어려운 정규화에 대한 개념을 정리해보도록 하겠습니다. 

 

정규화를 다르기 위해서는 이상현상, 그리고 함수종속성에 대한 개념을 알아야 합니다. 

 

* 본 포스팅은 중부기술교육원 수업과 한빛미디어의 "오라클로 배우는 데이터베이스 개론과 실습 2판" 책을 기본바탕으로 공부한 뒤 작성되었음을 알립니다. 

 

https://coupa.ng/bMLpSU

 

오라클로 배우는 데이터베이스 개론과 실습

COUPANG

www.coupang.com

 

1. 이상현상 

이상현상으로는 삭제이상, 삽입이상, 수정이상 3가지가 있습니다. 

 

삭제이상 : 연쇄삭제로 인해 문제가 발생

-> 삭제하고자하는 투플만이 아닌 같이 저장된 다른 정보까지 연쇄적으로 발생되는 현상

 

삽입이상 : NULL값 문제 발생

-> 투플 삽입 시 특정 속성에 해당하는 값이 없어서 NULL값을 입력해야하는 현상

 

수정이상 : 불일치 문제 발생 

-> 투플을 수정할 때 중복으로 저장된 데이터 일부만 수정되어서 데이터가 일치하지 않는 현상

 


2. 함수 종속성 (Functional Depentdency, FD) 

속성과 속성 사이에 의존성이 존재하며 (종속) 하나의 속성이 다른 속성 하나에 대응이 될 때 함수적으로 종속되어 있다고 말합니다. 

즉, 하나를 알면 다른하나가 자연스럽게 결정이 되거나 알 수 잇게 될 때 함수종속성이 있다고 합니다. 

이것을 수학적으로 X → Y라고 표현하며 X는 결정자, Y는 종속 속성 이라고 합니다. 

 

함수 종속성에 대한 규칙이 3가지가 있고 규칙으로부터 나온 부가규칙 3가지가 있습니다.

 

A, B, C 가 릴레이션 R에 속해있는 집합이라고 할 때 다음과 같은 3가지 규칙이 성립합니다.

1) 부분집합 규칙(subset) : A⊆B 이면 B → A   

2) 증가 규칙(augmentation) : A → B 이면 AC → BC   

3) 이행 규칙(transitivity) : A → B 그리고 B → C 이면 A → C

 

부가 규칙

1) 결합규칙 (Union) : A → B 그리고 A → C 이면 A → BC

2) 분해규칙 (decomposition) : A → BC 이면 A →B 그리고 A → C

3) 유사이행 규칙 (pseudotransitivity) : A → B 그리고 DB → C 이면 DA → C

(* →는 종속관계를 나타낸다)

 

테이블에서 함수종속성을 찾는 첫번째 방법은 기본키를 찾는 것입니다. 

기본키값은 유일한 값이므로 모든 속성에 대한 결정자가 될 수 있습니다. 

 


3. 정규형

이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 나눌 수 있으며 정규형이라는 개념으로 구분을 합니다. 

정규형이 높을 수록 이상현상은 줄어든다. 

 

1) 제1정규형 (1 NF)

릴레이션 R의 모든 속성값이 원자값을  가지면 제1정규형이라고 한다. 

원자값을 가진다 = 속성에 데이터값이 하나가 있어야 한다. 

-> 릴레이션 속성에 데이터값이 2개 이상 있을 경우 이상현상을 일으킬 수 있으며 제1정규형을 위반한것이 된다. 

 

이상현상 해결 방법 : 데이터 값이 1개씩만 들어갈 수 있게 릴레이션을 분해하면 된다. 

 

2) 제2정규형(2NF)

일단 테이블이 제1정규형을 만족해야 제2정규형이 될 수 있다. 

그리고 기본키 외 속성이 기본키에 완전 함수 종속이면 제2정규형이라고 한다. 

-> 기본키가 복합키인데 그 일부분이 다른 속성의 결정자인지 판단한다.

-> 예를 들어 기본키의 A라는 속성이 A → B 이면 제2정규형 위반이라고 한다. 

* 완전 함수 종속 : 릴레이션 R에 속하는 A와 B가 있을 때 A → B 이면서 B가 A의 속성 전체에 함수 종속하고 부분집함 속성에 함수 종속하지 않을 경우 완전 함수 종속이라고한다. 

 

해결 방법 : 이상현상을 일으키는 기본키의 속성에 종속성을 가지는 릴레이션으로 분해한다. 

즉 기본키의 속성 중 A → B를 다른 릴레이션으로 분해하면 된다. 

 

3) 제3정규형(3NF)

이행적 종속 여부 판단

제1정규형, 제2정규형을 만족 해야 제3정규형이 될 수 있다.

A → B 그리고 B → C 이면 A → C 가 성립되는 함수 종속성을 따르지 않을 때 비이행적 종속이라고 말한다. 

이행적 종속을 할 경우 제3정규형 위반이라고 말할 수 있다. 

 

해결 방법 : 고리를 끊어준다는 개념으로 릴레이션을 분해하면 된다. 

A → B 그리고 B → C 이므로 A → B 릴레이션과 B → C 릴레이션으로 분해한다.

 

4) BCNF

함수 종속성에서 모든 결정자가 후보키인 경우를 말한다. 

 

해결 방법 : 결정자인 후보키에 관련한 릴레이션을 분해한다. 

 


4. 무손실 분해

정규화를 다시 한번 정의하자면 릴레이션을 분해하여 이상현상을 제거하는 과정을 말한다. 

이 때 분해하면서 데이터의 손실이 발생하지 않게 분해를 해야 하는데 그러기 위해서는 분해되는 릴레이션 간에 공통속성을 한개 이상 두면 된다. 

공통속성은 릴레이션을 조인할 때 사용이 된다. 그러므로 분해되는 릴레이션의 키가 공통속성이 되어야 무손실 분해를 만족하게 된다. 

 


 

나름 개념 정리라고 해보았지만 많이 어려운 개념입니다. 

 

정규화는 실습을 통해서 확실히 익히시는게 가장 좋은 방법인 것 같습니다. 

 

다들 공부하신다고 고생하셨습니다. ^^ 

반응형

댓글