데이터베이스 정규화

hyeongirlife·2022년 2월 1일
0

TIL

목록 보기
55/90
post-thumbnail

✍ 정규화란?

궁극적으로 데이터베이스의 테이블 간 중복된 데이터를 허용하지 않게 하기 위함이다.
이는 데이터 중복, 데이터 무결성을 만족시킨다.

✍ 정규화 개념이 생긴 이유

데이터 중복

데이터가 중복되면 일관된 자료처리에 대한 어려움이 있다.
그리고 같은 데이터가 저장되면 메모리 공간 낭비가 심해 비효율적이다.

데이터 무결성

예측한 데이터의 값은 항상 일치해야 한다.

이상현상 (Anomally)

정규화를 해야 하는 이유는 잘못된 테이블 설계로 인한 이상현상 때문이다.

예를들어 해당 테이블이 있다고 가정해보자

{studentID, CourseID, Department, CourseID,Grade}

기본키가 {StudentID, CourseID} 인 경우

Course를 수강하지 않은 학생은 CourseID가 없는 현상이 발생한다. 결국 Course ID를 Null로 할 수 밖에 없는데,

기본키는 Null이 될 수 없으므로 테이블에 추가될 수 없다.

굳이 삽입하기 위해서는 '미수강'과 같은 CourseID를 만들어야 한다.

즉 불필요한 데이터를 추가해야 삽입할 수 있는 상황 => Insertion Anomaly

만약 어떤 학생의 전공 {Department}이 "컴퓨터 -> 음악" 으로 바뀌는 경우
모든 Department를 "음악"으로 바꾸어야 한다. 그러나 일부를 깜빡하고 바꾸지 못하는 경우, 제대로 파악하지 못한다.

일부만 변경하여 데이터가 불일치하는 모순의 문제 => Update Anomaly

만약 어떤 학생이 수강을 철회하는 경우, {StudentID, CourseID, Department,CourseID,Grade}의 정보 중 CourseID를 삭제하면 StudentID, Department와 같은 학생에 대한 정보도 함께 삭제된다.

튜플 삭제로 인해 꼭 필요한 데이터까지 함께 삭제되는 문제 => Deletion Anomaly

profile
머릿속에 있는 내용을 정리하기

0개의 댓글