School/데이터베이스

정규화

응엉잉 2022. 6. 11. 17:57

정규화의 필요성과 이상 현상의 의미

정규화 수행을 위한 함수 종속의 개념

정규화의 유형, 관계

 

1. 정규화의 개념과 이상 현상

<abstract>

- 이상 현상 : 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 삭제, 수정 연산 수행시 발생할 수 있는 부작용

삽입 이상 새 데이터 삽입 위해 불필요한 데이터도 함께 삽입해야 하는 문제
갱신 이상 중복 투플 중 일부만 변경 -> 데이터가 불일치하게되는 모순
삭제 이상 투플을 삭제하면 필요한 데이터까지 삭제 (데이터 손실)

- 정규화 : 이상현상을 제거해나가면서 데이터베이스를 올바르게 설계해나가는 과정

 

<이상 현상의 종류>

 

1) 삽입 이상

새 데이터 삽입 위해 불필요한 데이터도 함께 삽입해야 하는 문제

ex) 이벤트참여 릴레이션에 신규고객 데이터가 포함되는 경우 이벤트에 참여하지 않는 신규고객을 등록하려면 임시 이벤트번호(실제로 참여하지 않은)를 삽입해야 함, 임시 이벤트번호는 불필요한 데이터

 

2) 갱신 이상

중복 투플 중 일부만 수정하여 데이터가 불일치하게되는 모순이 발생하는 문제

ex) 이벤트참여 릴레이션에 등급 데이터를 중복 저장

-> 아이디가 apple 인 고객 등급이 gold 에서 vip 로 변경되었는데 일부 투플에서만 등급 수정시 apple 고객이 서로 다른 등급을 가지는 모순 발생

 

3) 삭제 이상

릴레이션에서 특정 투플을 삭제하면서 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상

ex) 이벤트참여 릴레이션에서 고객 데이터와 이벤트 데이터가 투플로 통합

-> 아이디가 orange 인 고객이 이벤트 참여를 취소해서 투플을 삭제하게 되면 이벤트 참여와 무관한 고객아이디, 고객이름, 등급데이터까지 손실

 

<정규화>

이상현상이 발생하지 않도록 릴레이션을 분해하는 과정

함수적 종속성을 판단, 정규화를 수행

 

- 함수적 종속성 : 릴레이션을 구성하는 속성간 관련성

X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분집합

X가 Y를 함수적으로 결정한다 = 릴레이션 내의 모든 튜플에서 하나의 X값에 대한 Y값이 항상 하나인 조건을 만족한다

= Y가 X에 함수적으로 종속되어있다

 

EX)

함수 종속 다이어그램

고객이름과 등급은 고객아이디에 함수적으로 종속

= 고객아이디 속성에 대응되는 고객이름 속성과 등급 속성은 하나뿐임

 

종속관계 판단시 유의사항

- 속성 자체의 특성과 의미를 기반으로 함수종속성을 판단해야 함

속성값은 계속 변할 수 있으므로, 현재 릴레이션에 포함된 속성값만을 고려하여 판단하면 안됨

- 일반적으로 기본키와 후보키는 릴레이션의 다른 속성들을 함수적으로 결정함

- 기본키나 후보키가 아니어도 다른 속성값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음

 

 

완전함수종속과 부분함수종속

완전함수종속(FFD) 부분함수종속(PFD)
일반적인 함수 종속의 예시
릴레이션에서 속성집합 Y가 집합 X에 함수적으로 종속되어있지만, 속성집합 X의 전체가 아닌 X의 일부분에 대해서는 종속되지 않음을 의미
릴레이션에서 속성집합 Y가 속성집합 X의 전체가 아닌 X의 일부분에 대해 함수적으로 종속됨을 의미
당첨여부는 {고객아이디, 이벤트번호}에 완전함수종속 고객이름은 고객아이디에 종속, 고객아이디는 {고객아이디, 이벤트번호} 의 일부분
-> 고객이름은 {고객아이디, 이벤트번호}에 부분 함수 종속

결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 경우는 결과가 당연한 함수종속관계 -> 고려대상이 아님

 

 

정규화

개념 함수 종속을 이용해 릴레이션을 연관성 있는 속성들만 구성되도록 분해
-> 이상현상이 발생하지 않는 올바른 릴레이션으로 만들어가는 과정
목표 관련없는 함수 종속성은 별개의 릴레이션으로 표현
주의사항 무손실 분해를 원칙으로 진행
- 릴레이션이 의미상 동등한 릴레이션으로 분해되어야 함
- 분해로 인한 정보손실이 발생하지 않아야 함
- 분해된 릴레이션들을 자연조인하면 분해전의 릴레이션으로 복원 가능해야함

 

정규형(NF)

릴레이션이 정규화된 정도

각 정규형마다 제약조건이 존재 (정규형의 차수가 높아지수록 요구되는 제약조건이 많아지고 엄격)

릴레이션의 특성 고려해서 적합한 정규형 선택

제 1 정규형(NF1)

릴레이션에 대한 모든 속성의 도메인이 원자값으로만 구성

= 다중값을 포함하면 NF1 만족하지 않음

데이터베이스의 릴레이션이 되기 위한 조건

우측이 만족

* NF1은 만족하지만 이상현상 발생하는 예시

등급과 할인율 속성은 기본키인 {고객아이디, 이벤트} 에 완전함수종속이 아님 (고객아이디에 종속)

-> 데이터 중복으로 인한 이상현상

 

** 문제해결방법

부분함수종속이 제거되도록 이벤트참여 릴레이션을 분해 -> 분해된 릴레이션은 제2정규형에 속하게 됨

 

제2정규형(NF2)

제1정규형을 만족하는 릴레이션에서 부분함수종속을 제거하기 위해 분해한 릴레이션

* 제2정규형은 만족하지만 이상현상이 발생하는 릴레이션의 예시

이행적 함수종속이 존재하기 때문에 발생

이행적 함수종속 :

릴레이션을 구성하는 3개의 속성집합 X,Y,Z에 대해 함수종속관계

X->Y, Y->Z가 존재하면 논리적으로 X->Z가 성립

Z는 X에 이행적으로 함수 종속이게 됨

 

** 해결방안 : 이행적 함수 종속이 제거되도록 고객릴레이션 분해 -> 분해된 릴레이션들은 제3정규형에 속하게 됨

 

제3정규형(3NF)

릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형을 만족

 

 

보이스/코드 정규형(BNCF)

필요성

하나의 릴레이션에 여러개의 후보키가 존재하는 경우 제3정규형까지 모두 만족해도 이상현상 발생 가능

의미

= 강한 제 3 정규형

후보키를 여러개 가지고있는 릴레이션에 발생할 수 있는 이상현상 해결을 위해 제 3 정규형보다 엄격한 제약조건 제시

릴레이션의 함수종속관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속함

 

* 제3정규형은 만족하지만 보이스코드 정규형은 만족하지 않는 릴레이션

강좌신청 릴레이션

강좌신청릴레이션의 기본키 : {고객아이디, 인터넷강좌}

담당강사번호는 후보키가 아님에도 인터넷강좌 속성을 결정 -> 후보키가 아닌 키가 결정자 역할을 하는것이 문제가 됨

** 보이스코드 정규형 만족하게끔 바꾸어준 릴레이션

 

제4정규형

릴레이션이 보이스코드 정규형을 만족하면서, 함수종속이 아닌 다치종속을 제거한 경우

 

제5정규형

릴레이션이 제4정규형을 만족하면서, 후보키를 통하지 않는 조인종속을 제거한 경우

 

정규화시 주의사항

모든 릴레이션이 제5정규형에 속해야만 바람직한건 아님

제3정규형이나 보이스코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상현상을 해결하는 경우가 많음

 

 

'School > 데이터베이스' 카테고리의 다른 글

보안과 권한 관리  (0) 2022.06.13
회복과 병행제어  (0) 2022.06.13
데이터베이스 언어 SQL_2  (0) 2022.06.11
SQL-SELECT 문  (0) 2022.04.18
관계 데이터 연산  (0) 2022.04.17