검색결과 리스트
글
데이터베이스 정규화
정규화 순서도
* 4, 5 정규형은 생략
제 1 정규형(First Normal Form)
▶ 반복그룹(repeating group)이란?
- 복합 애트리뷰트(composite attribute)
- 다치 애트리뷰트(multivalue attribute)
- 중첩 릴레이션(nested relation)
▶ Example 분석
<고객테이블 - 2>에 대한 갱신이상 분석
◑ 수정이상(Modification Anomaly)
- 고객명이 취미의 수만큼 중복되어 저장 -> 취미의 수가 많을 경우 수정이상이 발생할
가능성 높다
◑ 삭제이상(Deletion Anomaly)
- 등산을 취미로 갖는 고객이 홍길동 1명인 경우, 홍길동 고객정보를 삭제하면 등산의
취미정보도 삭제되고, 등산정보를 삭제하는 경우 홍길동 고객정보도 같이 삭제된다.
◑ 삽입이상(Insertion Anomaly)
- 고객번호가 주키이므로 테니스라는 취미정보를 추가하는 경우, 테니스를 취미로 갖는
고객이 아직 없으므로 삽입이 불가능하다(주키는 null값을 못가지므로).
<고객테이블 - 2>에 대한 갱신이상 발생 원인
고객번호와 고객명은 (고객번호) -> (고객명) 으로 함수적 종속관계를 갖으나
고객번호와 취미는 함수적 종속관계가 아니다.
★ 보충 - L자형 테이블 ★
테이블의 데이터를 null값을 가지고 있는 데이터를 위쪽으로 정리했을 때 위쪽의 컬럼들이 null값을 가지는 관계로 빈 공간이 되어 전체적 모양이 L자 형태로 나타나는 테이블
위에서 보는 바와 같이, 반복그룹을 column을 추가하여 제거하는 <고객테이블 - B>경우, L자형 테이블이 나타난다. <고객테이블 - A>의 경우는 앞서 설명한 바와 같이 불필요한 데이터의 중복이 나타나고 있다.
L자형 테이블은 일반적으로 가장 많이 나타나는 테이블구조로서, 모든 정보를 한꺼번에 한 테이블에 넣도록 설계하는 경우에 자주 나타난다. 규모가 작은 웹사이트에서 회원정보를 적절히 분리하지 않고 한 테이블에 모조리 다 넣는 경우가 그 대표적 예이다.
A, B 두 테이블 모두 비효율적인 테이블구조이며 앞서 본 바와 같이 두 개의 테이블로 분해하는 것이 바람직하다.
제 2 정규형(Second Normal Form)
▶ Example 분석
step 1. <학생>테이블의 모든 Att가 원자값으로 제 1 정규형을 만족하고 있다
step 2.
◑ (학번, 과목번호) -> (학점)
◑ (학번, 과목번호) -> 학과명, (학번, 과목번호) -> 학과전화번호
◑ (학번) -> (학과명), (학번) -> (학과전화번호)
<학생>테이블의 키를 구성하지 않는 (학과명)과 (학과전화번호), (학점) 애트리뷰트 중에서
(학과명)과 (학과전화번호)는 (학번, 과목번호)에 함수적 종속이면서 완전 함수적 종속은
아니다. (학번, 과목번호)의 부분집합인 (학번)에 다시 함수적으로 종속되고 있기 때문이다.
step 3. <학생>테이블에 대한 갱신이상 분석
◑ 수정이상(Modification Anomaly)
- 한 학과에 속한 학생의 수만큼 학과전화번호의 중복 발생 -> 수정이상 발생 가능성
◑ 삭제이상(Deletion Anomaly)
- 학생이 한 명인 학과의 경우, 학생정보 삭제 시 학과정보도 완전 삭제됨
◑ 삽입이상(Insertion Anomaly)
- 학번이 기본키 구성요소이므로 학생이 한 명도 없는 학과정보 삽입 불가능
step 4. <학생>테이블에 대한 갱신이상 발생 원인
- 기본키에 대한 부분 함수적 종속성이 <학생>테이블에 존재함
step 5. <학생>테이블에 대한 갱신이상 해결책
▶부분 함수적 종속성을 제거하기 위하여 두 릴레이션으로 분리(제 2 정규형)
▶ 제 2 정규형(Second Normal Form)에 대한 결론
- 부분 함수 종속성 제거하기 위하여 두 릴레이션으로 분리
제 3 정규형(Third Normal Form)
▶ Example 분석
step 1. 기본조건 분석
<학생>테이블이 제 2 정규형을 만족하고 있다 <- 키가 아닌 (학과명), (학과전화번호)
애트리뷰트가 키인 (학번)에 완전하게 함수적으로 종속하고 있다.
step 2. 이행적 함수적 종속성 여부
◑ (학번) -> (학과명), (학번) -> (학과전화번호)
◑ (학과명) -> (학과전화번호) <- (학과전화번호)가 (학번)에 이행적으로 함수적
종속을 하고 있다.
step 3. <학생>테이블에 대한 갱신이상 분석
◑ 수정이상(Modification Anomaly)
- 학과에 속한 학생 수만큼 학과명과 학과전화번호의 정보가 중복하여 나타남
-> 수정이상 발생 가능성
◑ 삭제이상(Deletion Anomaly)
- 학생이 한 명인 학과의 경우, 학생정보 삭제 시 학과정보도 완전 삭제됨
◑ 삽입이상(Insertion Anomaly)
- 학번이 기본키 구성요소이므로 학생이 한 명도 없는 학과정보 삽입 불가능
step 4. <학생>테이블에 대한 갱신이상 발생 원인
- 기본키에 대한 이행적 함수적 종속성이 <학생>테이블에 존재함
step 5. <학생>테이블에 대한 갱신이상 해결책
▶이행적 함수적 종속성을 제거하기 위하여 두 릴레이션으로 분리(제 3 정규형)
▶ 제 3 정규형(Third Normal Form)에 대한 결론
- 이행적 함수적 종속성 제거하기 위하여 두 릴레이션으로 분리
- 보이스(R.F. Boyce)와 코드(E.F. Codd)가 개발한 정규형.
- 제3정규형(3NF)을 확장한 것으로 이 정규형에 가까워질수록 데이터의 중복성이 배제되어
▶ Example 분석
step 1. 기본조건 분석
- <수강>테이블에 나타난 함수적 종속성
(학번, 과목) → (강사)
(강사) → (과목)
- 제 3 정규형을 만족하고 있다 <- (강사)는 (학번)이나 (과목)에 함수적으로 종속하지
않으며, 따라서 (강사)는 기본키인 (학번, 과목)에 완전하게 함수적으로 종속하고 있다.
- <수강>테이블의 후보키는 (학번, 과목), (학번, 강사)
step 2. 모든 결정자의 후보키 여부
- (학번, 과목)은 결정자이면서 후보키이다.(<- 기본키이므로 당연히 후보키)
- (강사)는 결정자이면서 후보키가 아니다.
- 따라서, <수강>테이블은 제 3 정규형이면서, BCNF는 아니다.
step 3. <수강>테이블에 대한 갱신이상 분석
◑ 수정이상(Modification Anomaly)
- 예를 들어, ‘노련한’ 강사의 ‘데이터베이스’강좌를 수강하는 학생이 많은 경우,
수강학생 수만큼 강사명의 정보가 중복하여 나타남 -> 수정이상 발생 가능성
◑ 삭제이상(Deletion Anomaly)
- 학생이 한 명인 강좌의 경우, 학생정보 삭제 시 강사정보도 완전 삭제됨
◑ 삽입이상(Insertion Anomaly)
- 학번이 기본키 구성요소이므로 미개설강좌에 대한 강사정보 삽입 불가능
step 4. <학생>테이블에 대한 갱신이상 발생 원인
- 후보키가 아닌 애트리뷰트가 다른 애트리뷰트의 결정자이기 때문
- 후보키가 여러 개인 경우 발생하는 현상으로, 만약 하나의 후보키만을 가진 릴레이션이
제3정규형을 만족하면 동시에 BCNF도 만족함
step 5. <학생>테이블에 대한 갱신이상 해결책
▶ 키가 아니면서 결정자 역할을 하는 애트리뷰트와 그 결정자에 함수적으로 종속하는 애트
리뷰트로 하나의 테이블을 구성. 이 테이블에서 결정자는 기본키가 됨
▶ 기존 릴레이션에 결정자를 남겨서 기본키의 구성요소가 되도록 함. 또한 이 결정자는
새로운 릴레이션에 대한 외래키 역할도 함
- 모든 결정자가 후보키가 되도록 한다
'데이터베이스' 카테고리의 다른 글
무결성과 보안 (0) | 2014.10.24 |
---|---|
병행제어 (0) | 2014.10.24 |
데이터베이스론 이석호 솔루션 (0) | 2014.10.24 |
데이터베이스 시스템 구성 (0) | 2014.10.24 |
데이터베이스 관리 시스템 (0) | 2014.10.24 |