본문 바로가기

Contact English

【데이터베이스】 3-1강. 정규화

 

3-1강. 정규화

 

추천글 : 【데이터베이스】 3강. 관계형 데이터베이스


1. 이상 [본문]

2. 함수적 종속 [본문]

3. 정규화 [본문]

4. 역정규화 [본문]


 

1. 이상(Anomaly) [목차]

⑴ 개요

① 정의 : 릴레이션 내 데이터의 중복과 종속으로 인해 발생되는 오류

② 근본적인 원인 : 여러 가지 사실을 하나의 릴레이션으로 표현하기 때문

③ 정규화 : 처음에는 anomaly를 해결할 때 테이블을 쪼개지 않으려 했으나 결국은 테이블을 쪼개는 방식을 채택

종류 1. 삭제 이상(Deletion Anomaly)

① 정의 : 원하지 않는 자료까지 함께 삭제되는 이상

② 예 : [주문] 릴레이션에서 특정 주문 정보를 삭제하다가 해당 상품의 정보도 삭제되는 경우

종류 2. 삽입 이상(Insertion Anomaly)

① 정의 : 원하지 않는 자료가 삽입되거나 원하는 자료가 삽입되지 않는 이상

② 예 : [주문] 릴레이션에서 아직 주문이 없는 신상품의 정보를 삽입하고자 하는 경우

종류 3. 갱신 이상(Update Anomaly)

① 정의 : 정보를 갱신할 때 정보가 모호해지거나 일관성이 없어지는 이상

② 예 : [주문] 릴레이션에서 특정 상품의 정보를 변경할 때 일부 주문 내역에서의 상품 정보만 갱신한 경우

 

 

2. 함수적 종속(Functional Dependency) [목차]

⑴ 정의 : A의 값에 따라 B가 결정

① 수식화

 

 

A를 결정자, B를 종속자라 지칭

⑵ 완전 함수 종속

① R(A1, ···, An, B, ··· , Z)이 주어졌을 때, B = f(Ai1, ··· , Aik), {i1, ··· , ik} = {1, ··· , n}

② 즉, A1, ···, An에서 하나도 빠짐없이 전부를 이용해야만 B를 표현할 수 있는 경우를 지칭함

③ (참고) 밑줄로 표현한 것은 기본키를 의미함

⑶ 부분 함수 종속

① 정의 : R(A1, ··· , An, B, ··· , Z)이 주어졌을 때, B = f(Ai1, ··· , Aik), {i1, ··· , ik} ≠ {1, ··· , n}

② 즉, A1, ···, An 중 전부가 아닌 일부만 가지고 B를 표현할 수 있는 경우를 지칭함

⑷ 이행적 함수 종속

① 정의 : R(A1, ··· , An, B1, ···, Bm, C, ··· , Z)이 주어졌을 때, B = f(A)이고 C = f*(B)인 경우

② 이 경우 당연히 C = f*(f(A))가 성립

⑸ 다치 종속(MVD, Multivalued Dependency)

① A  B : A의 속성값은 B의 속성값의 집합을 결정

② R(A1, ··· , An, B, C, ··· , Z)이 주어졌을 때 C ∈ F(B)이거나 임의의 AkF(B)

⑹ 조인 종속(Join Dependency)

① 원래의 릴레이션을 분해한 뒤 자연 조인한 결과가 원래의 릴레이션과 같은 결과가 나오는 종속성

 

 

3. 정규화(Normalization) [목차]

⑴ 정의 : 종속으로 인한 이상을 해결하기 위해 여러 개의 릴레이션으로 분해하는 과정

⑵ UNF(unnomalized form)

⑶ 제 1정규형(1NF)

① 한 릴레이션을 구성하는 모든 도메인이 원자값만으로 구성되도록 한 정규형

예 1.

○ R(A, B, C)이 주어지고, B의 도메인이 {○, {△, □}}일 때

해결방법 : R(A, B, C) ⇒ R*(A, B, C). 즉, 기본키를 A에서 (A, B)로 변경

○ (참고) 밑줄로 표현한 것은 기본키를 의미함

예 2.

○ <주문 목록> → <제품> + <제품 주문>

○ <주문 목록>

제품번호 제품명 재고수량 주문번호 고객번호 주소 주문수량

1001 모니터 2000 A345 100 서울 150

1001 모니터 2000 D347 200 부산 300

1007 마우스 9000 A210 300 광주 600

1007 마우스 9000 A345 100 서울 400

1007 마우스 9000 B230 200 부산 700

1201 키보드 2100 D347 200 부산 300

○ <제품>

제품번호 제품명 재고수량

1001 모니터 2000

1007 마우스 9000

1201 키보드 2100

<제품 주문>

주문번호 제품번호 고객번호 주소 주문수량

A345 1001 100 서울 150

D347 1001 200 부산 300

A210 1007 300 광주 600

A345 1007 100 서울 400

B230 1007 200 부산 700

D347 1201 200 부산 300

⑷ 제 2정규형(2NF)

① 한 릴레이션 내 모든 부분 함수 종속성을 제거한 정규형

예 1.

R(A, B, C, D)가 주어지고, C = f(A, B), D = f(B)일 때

○ 해결방법 : R(A, B, C, D) R1(A, B, C), R2(B, D)

○ (참고) 밑줄로 표현한 것은 기본키를 의미함

예 2.

<제품 주문> → <주문 목록> + <주문>

○ <제품 주문>

주문번호 제품번호 고객번호 주소 주문수량

A345 1001 100 서울 150

D347 1001 200 부산 300

A210 1007 300 광주 600

A345 1007 100 서울 400

B230 1007 200 부산 700

D347 1201 200 부산 300

○ <주문 목록>

주문번호 제품번호 주문수량

A345 1001 150

D347 1001 300

A210 1007 600

A345 1007 400

B230 1007 700

D347 1201 300

○ <주문>

주문번호 고객번호 주소

A345 100 서울

D347 200 부산

A210 300 광주

B230 200 부산

⑸ 제 3정규형(3NF)

① 한 릴레이션 내 모든 이행적 함수 종속성을 제거한 정규형

1.

○ R(A, B, C)가 주어지고, B = f(A), C = f(B)일 때

○ 해결방법 : R(A, B, C) ⇒ R1(A, B), R2(B, C)

○ (참고) 밑줄로 표현한 것은 기본키를 의미함

예 2.

○ <주문> → <주문>* + <고객>

○ <주문>

주문번호 고객번호 주소

A345 100 서울

D347 200 부산

A210 300 광주

B230 200 부산

○ <주문>*

주문번호 고객번호

A345 100

D347 200

A210 300

B230 200

○ <고객>

고객번호 주소

100 서울

200 부산

300 광주

EKNF (elementary key normal form)

⑺ 보이스-코드 정규형(BCNF, Boyce-Codd Normal Function)

① 정의

○ 한 릴레이션 내 모든 결정자가 후보키가 되도록 한 정규형

R(A, B, C)가 주어지고, B = f(C)이고 A f(C)인 경우

③ 해결 예 : R(A, B, C) ⇒ R1(A, C), R2(C, B)

④ 참고 : C = f(A, B), B = f(C)이면 C = f(A)이다.

증명 : C = f(A, f(C)) → C1 = f(A, f(C1)), C2 = f(A, f(C2))이면 C1 = C2 → C는 A에 함수 종속적

⑥ 예

○ <수강 교수> → <수강> + <교수>

○ <수강 교수>

학번 과목명 담당교수

981746 데이터베이스 홍길동

981747 네트워크 유관순

981748 인공지능 윤봉길

981749 데이터베이스 홍길동

981747 데이터베이스 이순신

981749 네트워크 유관순

○ 수정 이상 : 여러 학생이 수강 중인 어떤 과목의 담당교수가 변경되었을 때 그 과목을 수강하는 모든 학생들의 튜플에서 담당교수를 수정하지 않으면 데이터베이스의 일관성이 유지되지 않는다. 예를 들어 "홍길동"이 가르치는 과목 "데이터베이스"를 두 명의 학생이 수강하고 있는데, 담당교수가 "강감찬"으로 바뀌면 첫 번째 튜플과 네 번째 튜플에서 강사 이름을 모두 변경해야 한다.

○ 삽입 이상 : 어떤 과목을 신설하여 아직 수강하는 학생이 없으면 어떤 강사가 그 과목을 가르친다는 정보를 입력할 수 없다. 왜냐하면 학번은 기본키를 구성하는 속성이므로 개체 무결성 제약조건에 따라 기본키를 구성하는 속성에 NULL 값을 입력할 수 없기 때문이다. 예를 들어 담당교수 "김구"가 과목 "알고리즘"을 개설하여 아직 수강생을 받기 전이라면 릴레이션에 삽입할 수 없다.

○ 삭제 이상 : 어떤 과목을 이수하는 학생이 한 명 밖에 없는데 이 학생의 튜플을 삭제하면 그 과목을 가르치는 강사에 관한 정보도 함께 삭제된다. 예를 들어 과목 "인공지능"의 유일한 수강생인 세 번째 튜플을 삭제하면 담당교수 "윤봉길"이 과목 "인공지능"을 가르친다는 사실도 함께 삭제된다.

<수강>

학번 담당교수

981746 홍길동

981747 유관순

981748 윤봉길

981749 홍길동

981747 이순신

981749 유관순

○ <교수>

담당교수 과목명

홍길동 데이터베이스

이순신 데이터베이스

윤봉길 인공지능

유관순 네트워크

⑻ 제 4정규형(4NF)

① 한 릴레이션에서 다치종속을 제거한 정규형

② 예 : R(A, B, C)가 주어지고, A ? B, A ? C일 때

③ 해결 예 : R(A, B, C) ⇒ R1(A, B), R2(A, C)

④ 예

○ <과목> → <강사> + <교재>

○ <과목>

과목명 강사 교재

POP글씨 최수지 POP-1

POP글씨 최수지 POP-2

POP글씨 김정미 POP-1

POP글씨 김정미 POP-2

서예 박길동 서예-1

서예 박길동 서예-2

○ <강사>

과목명 강사

POP글씨 최수지

POP글씨 김정미

서예 박길동

○ <교재>

과목명 교재

POP글씨 POP-1

POP글씨 POP-2

서예 서예-1

서예 서예-2

ENTF (essential tuple normal form)

⑽ 제 5정규형(5NF)

① 한 릴레이션에서 조인 종속이 후보키를 통해서만 성립이 되도록 한 정규형

② 예

DKNF(domain-key normal form)

⑿ 제 6정규형(6NF)

 

 

4. 역정규화 [목차]

⑴ 역정규화

① 정규화된 릴레이션을 물리적 데이터 모델링 과정에서 다시 통합하거나 분할하여 구조를 재조정하는 것

② 정규화된 릴레이션은 실제로 작료를 검색하는 과정에서 성능 저하 발생

종류 1. 릴레이션 역정규화

릴레이션 병합 : 두 릴레이션을 하나로 합하는 방법

릴레이션 분할 : 자주 사용되는 속성이나 튜플과 자주 사용되지 않는 속성이나 튜플을 분해하는 방법

수직 분할 : 속성에 대한 릴레이션 분할

수평 분할 : 튜플에 대한 릴레이션 분할

종류 2. 속성 역정규화

속성 추가 : 두 릴레이션 A, B에서 A가 B를 자주 참고할 때, B의 속성을 A에 추가하는 방법

파생속성 추가 : 릴레이션에 파생속성을 추가하여 성능을 향상시키는 방법

파생속성(Delivered Attribute) : 작업의 효율을 위해 기존 속성으로부터 파생되는 속성

 

입력: 2017.10.02 08:06

수정: 2017.11.05 08:14