데이터베이스 정규화
From CS Wiki
- 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를 만족시키는 릴레이션