mysql 정규화1(이상현상, 함수적 종속성)
mysql은 쪼개서 관리하고 join을 쓰는게 기본이라고 들었을 것입니다. 들어보지 못했다고 해도 상관없습니다.
그런의미에서 정규화에 대해 알아보겠습니다.
정규화
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.
왜??
왜 정규화를 해야되는지 알아야 합니다. 그러기 위해서 오늘은 이상현상과 함수적 종속성에 대해 알아보겠습니다.
이상현상
정규화(Nomalization)를 거치지 않으면 데이터베이스 내에 데이터들이 중복되어 릴레이션 조작 시 문제가 발생하는데 이를 이상(Anomaly)라 하며 종류로는 삽입 이상, 삭제 이상, 갱신이상이 있습니다.
이해를 돕기 위해 데이터베이스 하나를 가지고 설명하겠습니다. 아래는 학점 table입니다.
이때 student_id와 course_id가 key입니다.
student_id | student_name | department | course_id | grade |
2016001 | 민수 | 수학과 | AA001 | A |
2016001 | 민수 | 수학과 | AA002 | A |
2016002 | 민아 | 컴퓨터공학과 | BB001 | B |
2016003 | 민지 | 컴퓨터공학과 | BB002 | B |
2016004 | 민호 | 기계공학과 | CC001 | C |
삽입이상
새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제를 삽입이상 이라고 한다.
여기에 수업을 듣지 않은 학생을 추가하려고 합니다. 그런데 course__id가 key이므로 null일 수 없습니다. 이를 해결하려면 "00000"같이 새로운 과목코드를 만들어야 합니다. 이를 삽입이상이라고 합니다.
갱신이상
중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제를 갱신이상 이라고 한다.
민수가 수학이 싫어 국문학과로 전과할 경우 두 컬럼을 모두 바꿔야 합니다. 실수로 하나만 바꾸는 경우 민수의 과를 알 수 없게 됩니다. 이를 갱신이상이라고 합니다.
삭제이상
튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제를 삭제이상 이라고 한다.
민호가 학점이 마음에 들지 않아 수강취소를 해서 삭제를 할 경우 학생정보까지 날라가게 됩니다. 이를 삭제이상이라고 합니다.
함수적 종속성
고등학교 때 함수를 생각하면 쉽습니다. x=>y 를 생각하면
x값에 따라 y가 결정되고 y는 x에 종속되어 있습니다.
일단은 이정도만 알아도 문제되지 않습니다.
ex)
student_id | student_name | department | course_id | grade |
2016001 | 민수 | 수학과 | AA001 | A |
2016001 | 민수 | 수학과 | AA002 | A |
2016002 | 민아 | 컴퓨터공학과 | BB001 | B |
2016003 | 민지 | 컴퓨터공학과 | BB002 | B |
2016004 | 민호 | 기계공학과 | CC001 | C |
위 테이블에서는
student_id => student_name, department
student_id, course_id => grade
가 됩니다.
이때 garde의 경우에는 함수의 종속성이 두개 입니다. 이경우에 부분 함수적 종속과 완전 함수적 종속을 구분할 수 있습니다.
부분 함수적 종속 (Partial Functional Dependency)
속성집합 Y 가 속성집합 X 의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미한다.
grade에 해당됩니다.
완전 함수적 종속 (Full Functional Dependency)
속성집합 Y 가 속성집합 X 전체에 대해서만 함수적으로 종속된 경우를 말한다.
student_id에 해당됩니다.
일반적으로 함수적 종속성을 말하면 완전함수종속을 의미합니다.
다음 시간에는 정규화에 대해서 알아보겠습니다.
참고글
https://yaboong.github.io/database/2018/03/09/database-anomaly-and-functional-dependency/
데이터베이스 정규화 - 이상현상 & 함수적 종속성
개요 삽입이상 (Insertion Anomaly), 갱신이상 (Update Anomaly), 삭제이상 (Deletion Anomaly) 설명 함수적 종속성 (Functional Dependency) 에 대해 알아본다.
yaboong.github.io