본문 바로가기

DataBase(SQL)/DAY 28 _ 23.09.26

DB 이론2 _ 정규화

1. DB anomaly

** 갱신 이상(Modification Anomaly): 반복된 데이터 중에 일부를 갱신 할 시 데이터의 불일치가 발생하는 상태
** 삽입 이상(Insertion Anomaly): 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능한 상태
** 삭제 이상(Deletion Anomaly): 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능한 상태

위 테이블은 한 회사의 근무자(employee) 테이블이다. 근무자가 속한 부서(Department), 참여하고 있는 학생 그룹(Student_Group)을 나타낸다.


** Modification Anomaly:

만약에 A. Bruchs의 부서가 CIS에서 Marketing으로 바뀌었다고 가정해보자.

테이블의 4, 5번째 행의 CIS를 둘 다 바꾸지 않고 하나만 바꾼다면 A.Bruchs의 부서는 어느 부서에 속해있는지 알 수 없게 된다.

** Insertion Anomaly:

새로운 부서 Engineering이 신설되었고 아직 근무자는 없다고 가정해보자.

하지만 이 부서에 관련한 정보는 불필요한 정보를 함께 입력하지 않는 한 위 테이블에 입력할 수 없다.

** Deletion Anomaly:

만약에 Accounting 부서에 속한 사람이 J.Longfellow 단 한 명이라고 가정하자.

J.Longfellow의 정보(첫번째 행)를 삭제하면 Accounting 부서에 대한 정보도 사라지게 된다.

 

** 삭제 이상:
튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제됨 → 연쇄삭제 문제
ex) 장미란 학생을 삭제하면 데이터 베이스 강좌 정보가 같이 삭제됨
 
** 수정 이상:
튜플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치 문제가 발생 → 불일치 문제
ex) 박지성 학생의 주소를 마지막 튜플에서만 수정하면 박지성 학생의 정보가 담긴 첫번째 튜플과 불일치하게 됨
 
** 삽입 이상:
튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 을 입력해야 하는 현상 → NULL 값 문제
ex) 박세리 학생을 새로 삽입할 때 아직 수강하고 있는 강좌가 없다면 NULL 값으로 채워야함
 
 

2. 함수 종속성 : 'A->B'로 표기하며, A를 B의 결정자라고 한다.

** 학생수강성적 릴레이션에서 종속관계에 있는 예

학생번호 -> 학생이름

학생번호 -> 학과

학과 -> 학과사무실

강좌이름 -> 강의실

 

** 종속하지 않는 예

학생이름 -> 강좌이름 (동명이인이 있을 수도 있으니까는...)

학과 -> 학생번호

학생번호 -> 성적

 

** 종속하는 것처럼 보이지만 주의 깊게 보면 그렇지 않은 예

학생이름 -> 학과 (동명이인을 생각해보면 같은 이름의 사람이 학과가 다를 수도 있다.)

 

2-1. 함수 종속성 다이어그램

릴레이션의 속성: 직사각형

속성 간의 함수 종속성: 화살표

복합속성: 직사각형으로 묶은 것

 

2-2.함수 종속성과 기본키 :

릴레이션 R(K, A1, A2, A3, ..., An)에서 K가 기본키면, K  R이 성립.

즉 기본키는 릴레이션의 모든 속성에 대해 결정자(determinant)이다.

 

 

2-3. 릴레이션 분해

릴레이션의 분해 결과


3. 정규화★ ★ ★

정규화 요약

--> 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정

이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분 가능하다.

릴레이션은 정규형 개념으로 구분하며, 정규형이 높을수록 이상현상은 줄어든다.

 

 

3-1. 제1정규형

릴레이션 R의 모든 속성 값이 원자값(단일값)을 가지는 것

-> RDM 릴레이션 데이터 모델이려면 반드시 제1정규형 즉 모든 속성값이 원자값을 가져야 한다.(만족해야 한다)

--> 제 1 정규형으로 변환

고객 취미들(이름, 취미들) 릴레이션을 고객 취미(이름, 취미) 릴레이션으로 바꾸어 저장하면 제 1정규형을 만족한다.

 

 

 

3-2. 제2정규형

릴레이션 R이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속할 때

 

** 완전 함수 종속(full functional edpendency):

A와 B가 릴레이션 R의 속성이고 A->B 종속성이 성립할 때,

B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우 완전 함수 종속이라고 한다.

제2정규형

학생번호+강좌이름 -> 성적이지만, 강좌이름 -> 성적은 아님!

A의 부분속성이 다른속성을 결정지을 경우 부분함수 종속임 --> 분해해야함

분해결과

--> 제 2정규형으로 변환

수강강좌 릴레이션에서 이상현상을 일으키는 (강좌이름, 강의실)을 분해함

 

 

 

3-3. 제3정규형

릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에 비이행적 non-transitive으로 종속할 때

( -> 이행적 종속이란 A  B, B  C가 성립할 때 A  C가 성립되는 함수 종속성이다.)

--> 이행적 종속을 분해를 해 줘야 한다.

제3정규형

학생번호 -> 강좌이름 , 강좌이름 -> 수강료인 상태임

연쇄적으로 어쩌다보니! 학생번호 -> 수강료가 돼버림

이행적 종속의 분해결과

--> 제 3정규형으로 변환

계절학기 릴레이션에서 이상현상을 일으키는 (강좌이름, 수강료)를 분해한다.

 

 

 

3-4. BCNF

릴레이션 R에서 함수 종속성 X->Y가 성립할 때 모든 결정자 X가 후보키일 때

-> 결정자이면서, 후보키가 아닌 것을 제거해야 함

BCNF ※ 조건 : 교수는 1개의 특강만을 담당하며, 한생은 같은 이름의 특강을 1개만 신청할 수 있다

조건에 의해서, 학생번호+특강이름->교수, 교수 -> 특강이름이 된 상태

--> BCNF 정규형으로 변환

특강수강 릴레이션에서 이상현상을 일으키는 (교수, 특강이름)을 분해한다.

 

 

 

3-5. Summary

대부분의 릴레이션은 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 떄문에 보통 BCNF까지 정규화를 진행한다!

 

 

** 요약의 요약 : 도부이결다조

 

 

++ 역정규화
관계형 데이터베이스에서 중복을 허용하고 정규화를 위반하는 과정

** 장점
개발 편의 향상
검색 시 성능 향상


** 단점
이상현상 발생 가능
중복 데이터로 인한 공간 낭비


--> 무조건적인 정규화가 좋은 것은 아니다!

--> 프로젝트에 따라 정규화 과정을 거친 후, 운영상 혹은 비용상의 문제로 역정규화를 거치는 것이 좋은 경우도 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'DataBase(SQL) > DAY 28 _ 23.09.26' 카테고리의 다른 글

DB 이론  (0) 2023.09.26