이상 (Anomaly)
데이터간 중복이 있어 데이터 변경(삽입,삭제,수정) 시 발생하는 부작용 현상
이상 | 설명 |
---|---|
삽입이상 | 데이터를 삽입할 때 불필요한 데이터를 삽입하지 않으면 삽입할 수 없다. 즉, 불필요한 데이터까지 삽입해야 한다. |
삭제이상 | 데이터를 삭제할 때 유용한 데이터도 함께 삭제된다. |
수정이상 | 중복된 데이터 중에 일부만 수정되어 데이터의 불일치가 발생 |
자주 보던 테이블에서는 이런 이상현상이 없다.
삽입이상, 삭제이상, 갱신이상이 발생 한다면 그 테이블은 개판으로 짠거다.
모델링 다시 해야함. -> 정규화 하자
학번 | 과목번호 | 성적 | 학년 | 성적점수 | 결석한 날 |
---|---|---|---|---|---|
100 | C413 | A | 4 | 4.0 | 4/13 |
100 | C413 | A | 4 | 4.0 | 4/20 |
100 | E412 | A | 4 | 4.0 | 2/10 |
200 | C123 | B | 3 | 3.0 | null |
300 | C312 | A | 1 | 4.0 | null |
300 | C324 | C | 1 | 2.0 | null |
정규화 (Normalization)
1정규화
모든 속성은 반드시 하나의 값을 가져야 한다.
Atomic 해야한다.
위 테이블을 보자.
1번째, 2번째 튜플은 똥이다. Atomic하지 않다.
Atomic하게 만들자. 속성을 없애자!!!
도메인이 원자 값만을 갖도록 다중 값 속성을 제거한다.
학번 | 과목번호 | 성적 | 학년 | 성적점수 |
---|---|---|---|---|
100 | C413 | A | 4 | 4.0 |
100 | E412 | A | 4 | 4.0 |
200 | C123 | B | 3 | 3.0 |
300 | C312 | A | 1 | 4.0 |
300 | C324 | C | 1 | 2.0 |
1정규형 테이블
2정규화
부분 함수적 종속성 제거
완전함수종속이어야 한다.
함수적 종속성(Functional Defendency
)
Function??
함수?
Defendency??
의존?
매개변수 받고 리턴나오는게 함수인데...
리턴값이 매개변수에 의존한다?
매개변수가 pk이고 리턴값들이 속성이라고 생각해도될까...
위 테이블 에서 PK는 2개인데, 학번만으로도 학년을 구할 수가 있다.
부분함수종속 이다. (PK는 학번, 과목번호인데 학번은 학년에만 종속적임)
1정규형이면서 부분함수종속이면 2정규화를 통해 완전함수종속으로 바꿔야 한다.
완전함수종속으로 테이블을 찢어보자.
학번 | 학년 |
---|---|
100 | 4 |
200 | 3 |
300 | 1 |
학번 | 과목번호 | 성적 | 성적점수 |
---|---|---|---|
100 | C413 | A | 4.0 |
100 | E412 | A | 4.0 |
200 | C123 | B | 3.0 |
300 | C312 | A | 4.0 |
300 | C324 | C | 2.0 |
2정규형 테이블
3정규화
이행 함수적 종속성 제거
의존성을 2번 가진다.
PK로 나온 결과가 또다른 속성의 PK가 되버리면 이행함수종속이다.
2정규형이면서 이행함수종속이면 3정규화를 해야 한다.
위의 성적 테이블의 성적점수는 '성적' 속성에 종속이므로
이행함수종속이다.
3정규화를 거친 테이블은 다음과 같다.
학번 | 학년 |
---|---|
100 | 4 |
200 | 3 |
300 | 1 |
학번 | 과목번호 | 성적 |
---|---|---|
100 | C413 | A |
100 | E412 | A |
200 | C123 | B |
300 | C312 | A |
300 | C324 | C |
성적 | 성적점수 |
---|---|
A | 4.0 |
B | 3.0 |
C | 2.0 |
D | 1.0 |
F | 0.0 |
3정규형 테이블
-끝-
'Old Posts > Database' 카테고리의 다른 글
트랜잭션 4가지 특징 (ACID) (1) | 2018.02.22 |
---|