728x90

갱신 이상 update anomaly

- 데이터 중복으로 발생하는 문제

- 삽입 이상 : 불필요한 데이터를 삽입하지 않으면 데이터 삽입이 안되는 이상

- 수정 이상 : 중복데이터 중 일부만 수정되어 데이터 불일치 발생

- 삭제 이상 : 유용한 데이터도 같이 삭제되는 문제

 

교수 릴레이션 - 기본키 : 학번, 교과목 번호

 

- 학번에 학년 정보가 중복되어 있음

- 삽입 이상 : 600번 학생. 2학년 삽입 시 교과목 번호가 없으면 삽입 x

- 수정 이상 : C312 수강한 400번 학생 학년을 4 -> 3학년으로 변경시 나머지 데이터 학년과 불일치

- 삭제 이상 : 200번 학생 삭제시 3학년 정보도 사라짐

->속성간 종속성 고려가 불충분해서 발생

=> 릴레이션 분해해서 하나의 종속관계를 하나의 릴레이션으로 표현해야함 => 릴레이션 정규화

 

 

함수적 종속 functional dependency : fd

- 정규화 핵심 개념으로 릴레이션의 갱신 이상을 발견하는 방법.

- 속성 간 관계에 대한 제약조건에 해당

- 속성 y는 속성 x에 함수적으로 종속 : x -> y

 

사원 릴레이션의 함수적 종속 관계 표현

1. 사원번호 -> 사원 이름, 주소, 전화번호 : 사원번호를 알면 이름, 주소, 전화번호알수있음

2. 부서번호 -> 부서이름 : 부서번호를 알면 부서이름 알수있음

3. 부서이름 -> 부서번호 :부서이름을 알면 부서번호알수있음

4. {사원번호, 부서번호} -> 직책 : 사원번호, 부서번호를 알아야 직책을 알수있음

5. x : 사원이름이나 부서번호, 주소등을 알아도 나머지 속성을 알수없음. 함수적으로 결정 x

 

함수적 종속 다이어그램 function dependency diagram fdd

- 함수적 종속 관계를 그림으로 표현

 

사원 릴레이션 함수적 종속 다이어그램

 

 

 

완전 함수적 종속 full functional dependency

- 복합속성 x -> y가 성립시

- 복합속성 {a,b}가 c의 결정자로 a나 b만으로 c를 결정 불가

완전 함수적 종속

부분 함수적 종속

- 복합 속성 x->y 성립시

- 복합 속성 {a, b} 중 b만으로 c를 결정

부분 함수적 종속

 

 

사원 릴레이션 함수적 종속 정리

함수적 종속 1. {사원번호, 부서번호} -> (직책, 사원이름, 주소, 전화번호, 부서이름) 성립

부분 함수적 종속 1.  {부서번호} -> (사원이름, 주소, 전화번호)

부분 함수적 종속 2  {사원번호} -> (부서이름)

완전 함수적 종속 1. {사원번호, 부서번호} -> (직책)

 

 

 

이행적 함수적 종속 transitive functional dependency

- 한 릴레이션 속성 a, b, c가 있을때 다음 필요충분조건 만족하는경우. 속성 c가 속성 a에 이행적 함수적종속

속성 c는 a에 이행적 함수적 종속

 

 

학생 릴레이션 예시

- 학생(학번, 교과목번호, 성적, 학과 이름, 학과 전화번호)

함수족 종속 

- 완전 함수적 종속 : {학번, 교과목 번호} -> 성적

- 부분 함수적 종속 : 학번 ->(학과이름, 학과전화번호)

- 완전 함수적 종속 : 학과이름->학과전화번호

학생 릴레이션 함수적 종속 다이어그램

학번 -> 학과명, 학과명-> 학과 전화번호

=> 학과 전화번호는 학번에 이행적 함수적 종속관계

 

 

정규화 normalization

- 데이터 중복을 제거하여 갱신 이상 제거. 논리적 데이터 모델 단순화 

* 많은 조인이 발생하여 질의 응답시간이 느려질수있음

 

정규형 normal form

- 데이터 중속 감소와 응답시간 단축하기위한 제약 조건을 만족하는 형태 

- 제약조건에 따라 제1 정규형 ~ 제 5정규형.

- 정규화 정도가 낮을수록 하나의 릴레이션에 많은 정보 포함

 

 

정규형 단계

1. 제 1정규형 1NF : 모든 속성 도메인이 원자값 -> 중복 속성 분리

2. 제 2정규형 2NF : 모든 속성이 기본키에 완전 함수적 종속 -> 기본키에 부분 함수적 종속 속성 분리

3. 제 3정규형 3NF : 이행적 함수적 종속 없어야함 -> 이행적 함수적 종속 속성 분리

4. 보이스/코드 정규형 BCNF

* 보통 제3정규형이나 보이스/코드 정규형까지 정규화 수행

 

3NF, BCNF가 최적인 이유

- 1NF, 2NF : 불필요한 데이터 중복, 공간 낭비

- 4NF, 5NF : 너무많은 릴레이션. 복잡한 종속성

 

 

정규화 단계

0. 비정규 릴레이션

1. 1NF <- 원자 값이 아닌 도메인 분해

2. 2NF <- 부분 함수적 종속 제거

3. 3NF <- 이행적 함수적 종속 제거

4. BCNF <- 결정자가 후보키가 아닌 함수적 종속 제거

5. 4NF <- 다치 종속성 제거

6. 5NF <- 조인 종속성 제거

 

 

- 비정규 릴레이션 예시 : 동아리가 다중치 속성

학생1 릴레이션 - 비정규 릴레이션

 

(1) 제1 정규형

- 릴레이션 속성은 원자값만 가져야함. 학생 2 새 릴레이션 생성(기본키 : {학번, 동아리})

학생2 릴레이션 - 제 1정규형, 1NF

 

- 그러나 학번, 이름, 학과가 중복된 데이터 발생 -> 2개의 새 릴레이션(제 1 정규형 만듬)

- 학생 3 릴레이션(1NF) : 학번 -> (이름, 학과)

- 학생 4 릴레이션(1NF) : {학번, 동아리}

학생 3 릴레이션 - 제1정규형, 1NF
학생 4 릴레이션 - 제1 정규형, 1NF

 

(2) 제 2정규형

- 제1 정규형은 기본키에 부분적 함수적 종속으로 갱신 이상 발생

-> 릴레이션을 분해하여 부분적 함수적 종속 제거하여 제 2정규형 만듬

 

수강지도 릴레이션 분해

- 수강지도(학번, 교과목번호, 지도교수, 학과, 성적)

- 기본키 : {학번, 교과목번호}

- 함수적 종속

 학번 -> (지도교수, 학과)

 {학번, 교과목번호} -> 성적

 지도교수 -> 학과

수강지도 릴레이션 1NF

 

수강 릴레이션 2NF, 지도 릴레이션 2NF

- 학번 -> (지도교수, 학과)로 부분적 함수적 종속 발생

=> 수강 릴레이션과 지도 릴레이션으로 분해

지도(학번, 지도교수, 학과)

수강(학번, 교과목 번호, 성적)

지도 릴레이션 2NF

 

수강 릴레이션 2NF

 

 

(2) 제 3 정규형

- 제 2정규형은 이행적 함수적 종속관계가 존재시 갱신 이상 발생

-> 이행적함수적 종속 제거하여 제3정규형 만듬

 

 

지도 릴레이션 2NF

- 지도(학번, 지도교수, 학과)

- 기본키 : 학번

학번 ->(지도교수, 학과)

지도교수 -> 학과

=> 학과는 학번에 이행적 종속관계

지도 릴레이션 2NF

 

 

지도 릴레이션 분해 3NF

- 지도릴레이션을 학생지도와 교수소속 3NF 릴레이션으로 분해

학생지도(학번, 지도교수)

교수소속(지도교수, 학과)

학생지도 3NF
교수소속 3NF

 

보이스 코드 정규형 BCNF

- 제3 정규형은 후보키가 아닌 결정자가 존재시 갱신 이상 발생

-> 모든 결정자가 후보키가되는 BCNF 만듬

 

수강과목 3NF 릴레이션

- 수강과목 : (학번, 교과목, 교수)

- 기본키 : {학번, 교과목}

- 후보키 : {학번, 교과목}, {학번, 교수}

{학번, 교과목} -> 교수

교수 -> 교과목

-> 교수 속성이 후보키가 아닌데도 결정자 역활 수행

수강과목 3NF 릴레이션

 

수강과목 3NF 릴레이션 분해

- 교수과목(교수, 교과목) BCNF 릴레이션

- 수강교수(학번, 교수(FK)) BCNF 릴레이션

교수과목 BCNF

 

수강교수 BCNF

 

역정규화 denormalization

- 성능 개선을위해 데이터 중복과 갱신 이상이 생기더라도 낮은 정규형으로 되돌아감

 

300x250

+ Recent posts