잘못된 DB 설계로 인한 갱신 이상
name | id | address | phone | department_id | department_name |
---|
김철수 | 2100 | 석촌동 | 123-1234 | 1 | 개발 |
김철수 | 2100 | 석촌동 | 123-1234 | 2 | 기획 |
박수영 | 4311 | 삼전동 | 341-1002 | 3 | 영업 |
정유나 | 3012 | 가락동 | 859-4099 | 2 | 기획 |
정유나 | 3012 | 가락동 | 859-4099 | 3 | 영업 |
- 정보의 중복
- 어떤 정보가 반복적으로 저장되어 저장 공간이 낭비된다
- 속한 부서(department_id)만큼 사원 정보가 낭비됨
- 수정 이상(modification anomaly)
- 반복된 데이터 중에 일부만 수정하면 데이터의 불일치가 발생한다. (모든 데이터를 수정해야 이용 가능)
- 부서 이름이 바뀔 때, 부서 id에 해당하는 모든 부서명을 바꿔줘야 한다. (바꾸지 않을 경우 오류가 생긴다.)
- 삽입 이상(insertion anomaly)
- 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능하다.
- 새로운 부서가 생겼는데 해당 부서에 사원이 한명도 없을 경우, 입력이 불가능하다. (Primary Key가 (name, id)이기 때문)
- 삭제 이상(deletion anomaly)
- 유용한 정보를 함꼐 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능하다. (원하는 정보 외에 다른 정보도 삭제)
- 어떤 부서에 사원이 한명 있을 때, 해당 사원 정보를 삭제할 경우, 부서 정보도 삭제된다.
함수적 종속성
- determinant(결정자)
- 주어진 테이블에서 다른 필드를 고유하게 결정하는 하나 이상의 필드
- A→B "A가 B의 determinant이다."
- A 속성(attribute)이 B 속성의 결정자(determinant)이면 B가 A에 함수적으로 종속한다.
(어떤 테이블 R에서 B 속성이 A 속성에 함수적으로 종속한다.
⇔ 각 A 값에 대해 반드시 한 개의 B 값이 대응된다.)
- 제2정규형 부터 BCNF까지 적용
완전 함수적 종속성(FFD: Full Functional Dependency)
- Def) 테이블 R에서 A→B 이면서 A의 어떠한 진부분 집합에도 함수적으로 종속하지 않으면 B는 A에 완전하게 함수적으로 종속한다고 한다.
이미지 참조) http://contents2.kocw.or.kr/KOCW/document/2016/shinhan/leeukhyun/11.pdf
- 완전 함수적 종속성 ⇒ 키의 최소성 / 키를 구성하는 모든 필드가 있어야 설명이 가능하다.
- 부분 함수적 종속성 ⇒ (복합)키의 일부분으로도 설명할 수 있는 필드가 존재한다.
이행적 함수적 종속성(transitive FD)
- 테이블 R에서 필드 A, B, C가 있을 때, C가 A에 이행적으로 종속한다. (A→C)
⇔ A→B∧B→C
이미지 참조) http://contents2.kocw.or.kr/KOCW/document/2016/shinhan/leeukhyun/11.pdf
- 학번을 알면 학과이름과 학과전화번호를 알 수 있고, 학과이름을 알면 학과전화번호를 알 수 있기 때문에 학과전화번호는 학번에 이행적으로 종속한다.
제1정규형, 제2정규형, 제3정규형, BCNF
제1정규형
-
Def) 테이블 R이 제1정규형을 만족한다 ⇔ 테이블 R의 모든 속성이 원자값만을 갖는다.
-
모든 속성에 반복 그룹(repeating group)이 나타나지 않으면 제1정규형을 만족한다.
- repeating group : 한 개의 기본 키값에 대해 두 개 이상의 값을 가질 수 있는 애트리뷰트 (아래 테이블에서 과목번호는 반복 그룹이므로 제1정규형을 만족하지 못한다.)
-
객체 지향 데이터베이스에서는 제1정규형을 완화해 필드 값으로 집합, 리스트, 배열 등을 가질 수 있다.
학번 | 이름 | 과목번호 |
---|
11302 | 김창선 | {CS302, CS203} |
20511 | 박준서 | {CS312, CS203} |
-
해결 방법
- 반복 그룹 필드를 분리해서 새로 저장
학번 | 이름 | 과목번호 |
---|
11302 | 김창선 | CS302 |
11302 | 김창선 | CS203 |
20511 | 박준서 | CS312 |
20511 | 박준서 | CS203 |
- 반복 그룹 필드를 분리해서 새로운 테이블에 저장
학번 | 과목번호 |
---|
11302 | CS302 |
11302 | CS203 |
20511 | CS312 |
20511 | CS203 |
제2정규형
- Def) 테이블 R이 제2정규형을 만족한다 ⇔ 테이블 R이 제1정규형을 만족하면서, 어떤 후보 키에도 속하지 않는 모든 속성들이 R의 기본 키에 완전하게 함수적으로 종속하는 것
- 기본 키가 두 개 이상의 필드로 구성되었을 경우에만 제1정규형이 제2정규형을 만족하는지 고려할 필요가 있음
제3정규형
- Def) 테이블 R이 제3정규형을 만족한다. ⇔ 테이블 R이 제2정규형을 만족하면서, 키가 아닌 모든 필드가 테이블 R의 기본 키에 이행적으로 종속하지 않는 것
- Def) 테이블 R이 BCNF를 만족한다. ⇔ 테이블 R이 제3정규형을 만족하고, 모든 결정자가 후보 키이어야 한다.