데이터베이스 정규화: Difference between revisions
From IT위키
(새 문서: ;Database Normalization == 이상(Anomaly) 현상 == * 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상 * 데이터들이 불필요하게 중복되...) |
No edit summary |
||
Line 34: | Line 34: | ||
|} | |} | ||
* 수강자 속성이 원자값이 아니다. | * 수강자 속성이 원자값이 아니다. | ||
* 발생할 수 있는 이상(Anomaly)의 예 | * '''발생할 수 있는 이상(Anomaly)의 예''' | ||
** '''갱신이상''': 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다. | ** '''갱신이상''': 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다. | ||
*** UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동' | *** UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동' | ||
** '''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다. | ** '''삭제 이상''': 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다. | ||
*** DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정' | *** DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정' | ||
* 1NF를 만족시키는 릴레이션 | |||
{| class="wikitable" | |||
! 수강과목 | |||
! 수강자 | |||
! 일련번호 | |||
|- | |||
| 수학 | |||
| 홍길동 | |||
| 1 | |||
|- | |||
| 과학 | |||
| 임꺽정 | |||
| 2 | |||
|- | |||
| 과학 | |||
| 신사임당 | |||
| 3 | |||
|- | |||
| 사회 | |||
| 홍길동 | |||
| 4 | |||
|- | |||
| 사회 | |||
| 임꺽정 | |||
| 5 | |||
|} | |||
* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다. | |||
* 실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다. | |||
== 2NF == | |||
;Second Normal Form | |||
;2NF를 만족하려면 부분적 함수 종속을 제거해야 한다. | |||
* 2NF를 만족하지 않는 릴레이션 | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | |||
* 2NF를 만족시키는 릴레이션 | |||
== 3NF == | |||
;Third Normal Form | |||
;3NF를 만족하려면 이행적 함수 종속을 제거해야 한다. | |||
* 3NF를 만족하지 않는 릴레이션 | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | |||
* 3NF를 만족시키는 릴레이션 | |||
== 4NF == | |||
;Fourth Normal Form | |||
;4NF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다. | |||
* 4NF를 만족하지 않는 릴레이션 | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | |||
* 4NF를 만족시키는 릴레이션 | |||
== BCNF == | |||
;Boyce and Codd Normal Form | |||
;BCNF를 만족하려면 다치 종속성을 제거해야 한다. | |||
* BCNF를 만족하지 않는 릴레이션 | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | |||
* BCNF를 만족시키는 릴레이션 | |||
== 5NF == | |||
;Fifth Normal Form | |||
;5NF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다. | |||
* 5NF를 만족하지 않는 릴레이션 | |||
* '''발생할 수 있는 이상(Anomaly)의 예''' | |||
* 5NF를 만족시키는 릴레이션 |
Revision as of 12:14, 1 May 2019
- Database Normalization
이상(Anomaly) 현상
- 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
- 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생
- 애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생
이상 종류
- 삽입할때 잘못 삽입됨, 갱신할때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고
- 삽입 이상(Insertion Anomaly)
- 데이터 삽입 시 의도와 다른 값들도 삽입됨
- 삭제 이상(Delete Anomaly)
- 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨
- 갱신 이상(Update Anomaly)
- 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생
정규화 과정
1NF
- First Normal Form
- 1NF를 만족하려면 도메인이 원자값이어야 한다.
- 1NF를 만족하지 않는 릴레이션
수강과목 | 수강자 |
---|---|
수학 | 홍길동 |
과학 | 임꺽정, 신사임당 |
사회 | 홍길동, 임꺽정 |
- 수강자 속성이 원자값이 아니다.
- 발생할 수 있는 이상(Anomaly)의 예
- 갱신이상: 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
- UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
- 삭제 이상: 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
- DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정'
- 갱신이상: 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
- 1NF를 만족시키는 릴레이션
수강과목 | 수강자 | 일련번호 |
---|---|---|
수학 | 홍길동 | 1 |
과학 | 임꺽정 | 2 |
과학 | 신사임당 | 3 |
사회 | 홍길동 | 4 |
사회 | 임꺽정 | 5 |
- 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
- 실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.
2NF
- Second Normal Form
- 2NF를 만족하려면 부분적 함수 종속을 제거해야 한다.
- 2NF를 만족하지 않는 릴레이션
- 발생할 수 있는 이상(Anomaly)의 예
- 2NF를 만족시키는 릴레이션
3NF
- Third Normal Form
- 3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.
- 3NF를 만족하지 않는 릴레이션
- 발생할 수 있는 이상(Anomaly)의 예
- 3NF를 만족시키는 릴레이션
4NF
- Fourth Normal Form
- 4NF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.
- 4NF를 만족하지 않는 릴레이션
- 발생할 수 있는 이상(Anomaly)의 예
- 4NF를 만족시키는 릴레이션
BCNF
- Boyce and Codd Normal Form
- BCNF를 만족하려면 다치 종속성을 제거해야 한다.
- BCNF를 만족하지 않는 릴레이션
- 발생할 수 있는 이상(Anomaly)의 예
- BCNF를 만족시키는 릴레이션
5NF
- Fifth Normal Form
- 5NF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.
- 5NF를 만족하지 않는 릴레이션
- 발생할 수 있는 이상(Anomaly)의 예
- 5NF를 만족시키는 릴레이션