2018/05/15 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 5강 정규화 기초

2018/03/21 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 4강 데이터베이스 언어

2018/03/19 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 3강 관계형 모델

2018/03/16 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 2강 데이터베이스 모델링

2018/03/16 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 1강 데이터베이스의 이해

 

나쁜릴레이션은 데이터베이스를 운용하는데 굉장히 비효율적 및 이상현상을 일으키는 릴레이션이다.

(아직까지 악당은 남아있닼ㅋㅋㅋㅋㅋㅋ)

1. 정규형의 개념

1) 정규형

- 이상 현상을 최소화 하도록 특정 조건을 갖춘 릴레이션의 형식

- 정규형의 분류

정규형은 타 정규형을 내포하거나 내포당하고있다.
제1정규형이 가장 적은 조건, 가장 약한 형태의 정규형이라 한다.
실무에서는 BC정규형까지만 사용하고 4,5 정규형은 잘 사용하지 않는다.

2) 정규형의 목적

정의
특정 정규형의 조건을 만족하도록 릴레이션과 속성(컬럼)을 재구성하는 과정

※정규화의 기능
- 데이터베이스 내에 모든 릴레이션을 효과적으로 표현 (중복을 최소화해서 가장 적은용량으로 DB 구성)
- 보다 간단한 관계 연산에 기초하여 검색 알고리즘을 효과적으로 작성할 수 있도록 지원
- 바람직하지 않은 삽임, 수정, 삭제 등의 이상 발생 방지 (갱신 이상 방지)
- 새로운 형태의 데이터가 삽입될 때 릴레이션 재구성의 필요성을 축소

3) 제1정규형

- 가장 약한 조건을 갖춘 정규형
- 릴레이션의 모든 속성이 단일 값으로 구성되어야 하는 조건

정의
릴레이션 스키마에서 정의된 모든 속성의 도메인이 원자값(관계형모델의 가장 기본적인 제약조건)을 갖는 상태
=> 기본적으로 관계형 모델을 통해서 만들어진 모든 릴레이션은 제1정규형을 만족한다라고 할 수 있음.

3-1) 제1정규화가 필요한 릴레이션

입항시간이 값이 두 개, 출항시간이 값이 두 개, 목적이 두 개 인 레코드가 있다.
원자값이 아니기때문에 제1정규화가 필요하다.

제1정규화를 시킨 도크릴레이션

단일값만으로 이루어지게 만들기 위해 두번째 릴레이션과 세번째 릴레이션을 변경하였다.

 

4) 함수적 종속성 판결

정의 5강 참조

Q. 도크번호 → 도크관리자?
도크릴레이션을 보면 도크번호가 D1으로 모두 같다 일때 도크관리자는 김주연이고 D2일때 현익창이다
따라서 도크는 도크관리자를 종속한다.

Q. 목적 → 담당도선사?
목적이 선적으로 같은 두번째와 세번째 레코드가 같을 때 담당도선사가 김혜겸으로 같으므로 종속한다.

Q. 목적 → 도크번호?
첫번째와 두번째 레코드의 목적이 선적으로 같을 때 D1으로 같으므로 종속한다.
나머지는 목적컬럼의 값이 다르므로 볼필요없다.

같을때 같은지만 보면된다. (다~ 다르면 종속한다??)

 

5) 함수적 종속성 다이어그램

릴레이션 내의 속성간의 종속 관계를 직관적이고 이해하기 쉽게 도식화 한 표현 방식
- 직사각형: 속성 또는 속성 집합
- 화살표: 함수적 종속성

목적         →     담당도선사
(결정자)            (종속자)

6) 도크 릴레이션의 함수적 종속성 다이어그램

해석,풀이
- 도크번호가 도크관리자를 종속한다.
- 도크번호와 입항시간이 파란색 사각형으로 묶여있다. 이 말은 도크번호와 입항시간 두 개가 같이 출항시간과 목적 담당도선사를 각각 종속한다.
- 목적이 도크번호를 종속한다.
- 목적이 담당도선사를 종속한다.

 

2. 제2정규형

1) 제2정규형의 정의

릴레이션이 제1정규형을 만족하고 기본키의 부분집합이 특정 속성을 종속하고 있지 않은 상태

정의
주어진 릴레이션의 인스턴스가 기본키가 아닌 속성들이 기본키에 완전히 종속되어 있는 상태

2) 제2정규형의 적용

도크릴레이션의 도크번호와 입항시간에 밑줄이 그어져있으므로 도크릴레이션의 기본키에 해당한다.
도크번호와 입항시간이 출항시간,목적,담당도선사를 각각 종속한다.
여기서 문제는 도크관리자다. 도크관리자를 종속하고있는것은 도크번호이다.
기본키의 일부분인 도크번호가 도크관리자를 종속하고있다. 완전히 종속하고있지않은 부분적으로 종속하고있기 때문에 도크관리자 종속을 제거하면 제2정규형을 만족하게된다.
해결방법 = 기본키에 완전히 종속되도록 릴레이션을 분해해야한다.

3) 임의 분해(맘대로) 시 발생하는 문제점

- 불필요한 조인이 발생 (무리하게 릴레이션을 짤라서 2개의 릴레이션을 만들면 불필요하게 조인해서 검색해야한다. 조인은 DBMS에 많은 부하가 발생한다.)
- 원본 릴레이션 재구성이 불가능할 수 있다. (꼴리는데로 분해했다간 돌이킬 수 없는 강을 건너게된다.)

4) 릴레이션의 무손실 분해

정의
스키마 R에 함수적 종속성 X→Y가 존재하고 X∩Y=∮(X와 Y에 겹치는 컬럼이 없다) 이면, R을 R - Y 와 XY로 분해

도크관리 릴레이션 무손실 분해
- {도크번호} → {도크관리자}
- {도크번호} ∩ {도크관리자} =∮

도크관리 - {도크관리자}, {도크번호, 도크관리자}
도크릴레이션에서 도크관리자를 빼고 도크번호와 도크관리자만 존재하는 릴레이션을 추가적으로 생성한다. 이러면 조인했을 때 아무런 문제가 발생하지 않음.

조인해야하는 추가연산이 발생하지만 레코드가 줄어들으므로 용량이 줄어드는 효율성이 추가연산 단점보다 훨씬 크다.

5) 제2정규화의 함수적 종속성 다이어그램

 

3. 제3정규형

1) 제3정규화의 정의

정의
릴레이션이 제2정규형을 만족하고, 기본키가 아닌 속성들이 어떤 키에도 이행적으로 종속되지 않은 상태

이행적 종속이란?
X → Y 이고 Y → Z 이면 X → Z 이다.
(5강에 나왔었다 암스트롱 공리에서... 어휴 본인 비둘기인듯...)

2) 제3정규화의 적용

제2정규화가 된 도크릴레이션에서 도크번호와 입항시간은 목적을 종속하고 (X→Y) 목적이 담당도선사를 종속한다(Y→Z)
위 부분은 이행적 종속성에 해당한다.

{도크번호, 입항시간} → {목적}
                                {목적} → {담당도선사}
→ {담당도선사}

담당도선사를 빼버리자! 그러면 제3정규화가 적용된다!!

목적이 기본키이고 담당도선사를 종속하는 릴레이션을 새로 구축한다. 그리고 도크릴레이션에는 담당도선사만 제거한다.

4. BC정규형

1) BC정규형의 정의

정의
릴레이션이 제3정규형을 만족하고 릴레이션에서 성립하는 X→Y 형태의 모든 함수적 종속성에 대하여 X가 슈퍼키인 상태

슈퍼키: 기본키가 될 수 있는 컬럼

입출항관리 릴레이션(제3정규화가 적용된 도크릴레이션)의 함수적 종속성
- {도크번호, 입항시간} → {목적}
- {도크번호, 입항시간} → {출항시간}
- {목적} → {도크번호}

현상태에서 입출항관리 릴레이션에 BC정규화를 적용시키려면 목적→도크번호 를 따로 떼어내야한다.

2) BC정규화의 적용

항상 종속자를 떼어내는 것이고 결정자를 남겨둔다.
목적이 도크번호를 종속한다는것은 목적이 결정자가 되고 도크번호가 종속자가된다.
그러므로 도크번호를 떼어내야한다.
목적이 기본키이고 도크번호를 종속하는 릴레이션을 추가로 생성하고 기존 입출항관리 릴레이션에서 도크번호를 떼어낸다.
입출항관리 릴레이션의 기본키를 목적과 입항시간으로 두고 출항시간을 종속하도록한다.