44. 이상 / 함수적 종속
44.1 이상(Anomaly)
테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고, 이 중복(Redundancy)으로 인해 테이블 조작 시 문제가 발생하는 현상을 의미
- 이상의 종류에는 테이블 조작 중에 발생하는 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly), 갱신 이상(Update Anomaly)이 존재
- 수강 테이블
학번 |
과목번호 |
성적 |
학년 |
100 |
C413 |
A |
4 |
100 |
E412 |
A |
4 |
200 |
C123 |
B |
3 |
300 |
C312 |
A |
1 |
300 |
C324 |
C |
1 |
400 |
C123 |
A |
4 |
400 |
C312 |
A |
4 |
400 |
C324 |
A |
4 |
400 |
C413 |
B |
4 |
400 |
E412 |
C |
4 |
500 |
C312 |
B |
2 |
44.1.1 삽입 이상(Insertion Anomaly)
테이블에 데이터를 삽입할 때 의도와는 상관 없이 원하지 않는 값들로 인해 삽입할 수 없게 되는 현상
- 예) 수강 테이블에서 학번이 "600"인 학생의 학년이 "2"라는 사실만을 삽입하고자 하는 경우 삽입 이상 발생
- 테이블의 기본키가 학번과 과목번호이기에 삽입할 때 반드시 과목번호 필요
44.1.2 삭제 이상(Deletion Anomaly)
테이블에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는, 즉 연쇄 삭제가 발생하는 현상
- 예) 수강 테이블에서 학번이 "200"인 학생이 과목번호 "C123"의 등록을 취소하고자 하는 경우 삭제 이상 발생
- 해당 학생의 튜플을 삭제하면 학년 정보까지 같이 삭제됨
- 과목만을 취소하고자 했지만 유지되어야 할 학년 정보까지 삭제되기 때문에 정보 손실 발생
44.1.3 갱신 이상(Update Anomaly)
테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성(Inconsistency)이 생기는 현상
- 예) 수강 테이블에서 학번이 "400"인 학생의 학년을 "4"에서 "3"으로 변경하고자 하는 경우 갱신 이상 발생 가능
- 학번이 "400"인 모든 튜플의 학년 값을 갱신해야 하는데 실수로 일부 튜플만 갱신하면, 학번 "400"인 학생의 학년은 "3"과 "4", 즉 2가지 값을 가지게 되어 정보의 불일치성이 발생
44.2 함수적 종속(Functional Dependency)
- 어떤 테이블 R에서 X와 Y를 각각 R의 속성 집합의 부분 집합
- 속성 X의 값 각각에 대해 시간에 관계없이 항상 속성 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수적 종속 또는 X가 Y를 함수적으로 결정한다고 하고, X→Y로 표기
- 함수적 종속은 데이터의 의미를 표현하는 것으로, 현실 세계를 표현하는 제약 조건이 되는 동시에 데이터베이스에서 항상 유지되어야 할 조건
44.2.1 예시 1
학번 |
이름 |
학년 |
학과 |
400 |
이순신 |
4 |
컴퓨터공학과 |
422 |
유관순 |
4 |
물리학과 |
301 |
강감찬 |
3 |
수학과 |
320 |
홍길동 |
3 |
체육과 |
- 학생 테이블에서 이름, 학년, 학과는 각각 학번 속성에 함수적 종속
44.2.2 예시 2
- X→Y의 관계를 갖는 속성 X와 Y에서 X를 결정자(Determinant)라 하고, Y를 종속자(Dependent)라고 함
- '학번→이름'에서는 학번이 결정자이고, 이름이 종속자
- 수강 테이블
학번 |
과목번호 |
성적 |
학년 |
100 |
C413 |
A |
4 |
100 |
E412 |
A |
4 |
200 |
C123 |
B |
3 |
300 |
C312 |
A |
1 |
300 |
C324 |
C |
1 |
400 |
C123 |
A |
4 |
400 |
C312 |
A |
4 |
400 |
C324 |
A |
4 |
400 |
C413 |
B |
4 |
400 |
E412 |
C |
4 |
500 |
C312 |
B |
2 |
- 수강 테이블에서 함수적 종속을 기호로 표시하면 아래 예시와 같음
- 수강 테이블의 속성 중 "성적"은 (학번, 과목번호)에 완전 함수적 종속(Full Functional Dependency)라고 함
- 수강 테이블의 속성 중 "학년"은 (학번, 과목번호)에 완전 함수적 종속이 아니므로 부분 함수적 종속(Partial Functional Dependency)라고 함
- 완전 함수적 종속(Full Functional Dependency) : 어떤 속성이 기본키에 대해 완전히 종속적일 때를 말함
- 부분 함수적 종속(Partial Functional Dependency) : 어떤 속성이 기본키의 일부에 의해 결정되는 것을 말함
45. 정규화(Normalization)
45.1 정규화(Normalization)
테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정
- 정규화의 목적은 가능한 한 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것
- 정규형의 종류
종류 |
약자 및 영문명 |
정규화의 정도 |
제 1정규형 |
1NF; First Normal Form |
낮음 |
제 2정규형 |
2NF; Second Normal Form |
|
제 3정규형 |
3NF; Third Normal Form |
|
BCNF |
Boyce-Codd Normal Form |
|
제 4정규형 |
4NF; Fourth Normal Form |
|
제 5정규형 |
5NF; Fifth Normal Form |
높음 |
45.1.1 - 무손실 분해(Nonless Decomposition)
테이블 R의 프로젝션인 R1, R2가 NATURAL JOIN을 통해 원래의 테이블 R로 정보 손실 없이 복귀되는 경우 R은 R1과 R2로 무손실 분해되었다고 함
학번 |
지도교수 |
학과 |
101 |
김동오 |
컴퓨터 |
102 |
홍동숙 |
전자 |
103 |
김동오 |
컴퓨터 |
학번 |
지도교수 |
101 |
김동오 |
102 |
홍동숙 |
103 |
김동오 |
- R1과 R2의 NATURAL JOIN
- 이와 같이 원래대로 복원될 수 있는 분해를 무손실 분해라고 함
학번 |
지도교수 |
학과 |
101 |
김동오 |
컴퓨터 |
102 |
홍동숙 |
전자 |
103 |
김동오 |
컴퓨터 |
- 프로젝션 : 특정 테이블에서 일부 속성들만 추출하여 만든 테이블
45.2 정규화 과정
45.2.1 제 1정규형
테이블 R에 속한 모든 속성의 도메인이 원자 값만으로 되어 있는 정규형
- 즉, 테이블의 모든 속성 값이 원자 값으로만 되어 있는 정규형
45.2.1.1 기존 테이블
제품번호 |
제품명 |
재고수량 |
주문번호 |
고객번호 |
주소 |
주문수량 |
1001 |
모니터 |
2000 |
A345 D347 |
100 200 |
서울 부산 |
150 300 |
1007 |
마우스 |
9000 |
A210 A345 B230 |
300 100 200 |
광주 서울 부산 |
600 400 700 |
1201 |
키보드 |
2100 |
D347 |
200 |
부산 |
300 |
- 위의 주문목록 테이블에서는 하나의 제품에 대해 여러 개의 주문 관련 정보(주문번호, 고객번호, 주소, 주문수량)가 발생하고 있기 때문에 주문목록 테이블은 제 1정규형이 아님
- 위의 테이블에서 반복되는 주문 정보를 분리하여 제 1정규형으로 만듦
45.2.1.2 분리
제품번호 |
제품명 |
재고수량 |
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 |
- 주문목록 테이블에서 반복되는 주문 관련 정보인 주문번호, 고객번호, 주소, 주문수량을 분리하면 위와 같이 제 1정규형인 제품 테이블과 제품주문 테이블이 생성됨
- 1차 정규화 과정으로 생성된 제품주문 테이블의 기본키는 (주문번호, 제품번호)이고, 다음과 같은 함수적 종속이 존재
45.2.2 제 2정규형
테이블 R이 제 1정규형이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형
45.2.2.1 기존 테이블
주문번호 |
제품번호 |
고객번호 |
주소 |
주문수량 |
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정규형이 아님
45.2.2.2 분리
주문번호 |
제품번호 |
주문수량 |
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 |
부산 |
- 제품주문 테이블에서 주문번호에 함수적 종속이 되는 속성인 고객번호와 주소를 분리(즉 부분 함수적 종속을 제거)해 내면 위와 같이 제 2정규형인 주문목록 테이블과 주문 테이블로 무손실 분해
- 제 2정규화 과정을 거쳐 생성된 주문 테이블의 기본키는 "주문번호"
- 주문 테이블에는 아직 아래와 같은 함수적 종속이 존재
45.2.3 제 3정규형
테이블 R이 제 2정규형이고 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속(Transitive Functional Dependency)을 만족하지 않는 정규형
- 이행적 함수적 종속 : A→B이고 B→C일 때 A→C를 만족하는 관계
45.2.3.1 기존 테이블
주문번호 |
고객번호 |
주소 |
A345 |
100 |
서울 |
D347 |
200 |
부산 |
A210 |
300 |
광주 |
B230 |
200 |
부산 |
- 위의 주문 테이블에서 고객번호가 주문번호에 함수적 종속이고, 주소가 고객번호에 함수적 종속이므로 주소는 기본키인 주문번호에 대해 이행적 함수적 종속을 만족
- 따라서 위 테이블은 제 3정규형이 아님
45.2.3.2 분리
주문번호 |
고객번호 |
A345 |
100 |
D347 |
200 |
A210 |
300 |
B230 |
200 |
고객번호 |
주소 |
100 |
서울 |
200 |
부산 |
300 |
광주 |
- 주문 테이블에서 이행적 함수적 종속을 제거하여 무손실 분해함으로써 위와 같이 제 3정규형인 주문 테이블과 고객 테이블이 생성
45.2.4 BCNF
테이블 R에서 모든 결정자가 후보키(Candidate Key)인 정규형
- 일반적으로 제 3정규형에 후보키가 여러 개 존재하고, 이러한 후보키들이 서로 중첩되어 나타나는 경우 적용 가능
45.2.4.1 기존 테이블
학번 |
과목명 |
담당교수 |
211746 |
데이터베이스 |
홍길동 |
211747 |
네트워크 |
유관순 |
211748 |
인공지능 |
윤봉길 |
211749 |
데이터베이스 |
홍길동 |
211747 |
데이터베이스 |
이순신 |
211749 |
네트워크 |
유관순 |
- 위의 수강_교수 테이블에서 결정자 중 후보키가 아닌 속성이 존재
- 함수적 종속 담당교수→과목명이 존재하는데, 담당교수가 수강_교수 테이블에서 후보키가 아니기 때문에 수강_교수 테이블은 BCNF가 아님
45.2.4.2 분리
학번 |
담당교수 |
211746 |
홍길동 |
211747 |
유관순 |
211748 |
윤봉길 |
211749 |
홍길동 |
211747 |
이순신 |
211749 |
유관순 |
담당교수 |
과목명 |
홍길동 |
데이터베이스 |
이순신 |
데이터베이스 |
윤봉길 |
인공지능 |
유관순 |
네트워크 |
- 수강_교수 테이블에서 BCNF를 만족하지 못하게 하는 속성(즉 담임교수→과목명)을 분리해내면 위와 같이 BCNF인 수강 테이블과 교수 테이블로 무손실 분해
45.2.5 제 4정규형
테이블 R에 다중 값 종속(MVD; Multi Valued Dependencty) A→→B가 존재할 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형
- 다중 값 종속(다치 종속) : A, B, C 세 개의 속성을 가진 테이블 R에서 어떤 복합 속성(A, C)에 대응하는 B 값의 집합이 A 값에만 종속되고 C 값에는 무관하면, B는 A에 다중 값 종속이라 하고, A→→B로 표기
45.2.6 제 5정규형
테이블 R의 모든 조인 종속(JD; Join Dependency)이 R의 후보키를 통해서만 성립되는 정규형
- 조인 종속 : 어떤 테이블 R의 속성에 대한 부분 X, Y, ···, Z가 존재할 때, 테이블 R이 자신을 Projection X, Y, ···, Z를 모두 조인한 결과와 동일한 테이블 R은 조인 종속 JD(X, Y, ···, Z)를 만족한다고 함
45.3 정규화 과정 정리
과정 |
내용 |
비정규 릴레이션 |
|
1NF |
도메인이 원자값 |
2NF |
부분 함수적 종속 제거 |
3NF |
이행적 함수적 종속 제거 |
BCNF |
- 모든 결정자가 후보키 - 결정자이면서 후보키가 아닌 것 제거 |
4NF |
다중 값 종속 제거 |
5NF |
조인 종속성 이용 |