티스토리 뷰
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
'mysql' 카테고리의 다른 글
코딩테스트 연습 > SELECT > 상위 n개 레코드 (0) | 2020.07.23 |
---|---|
mysql 정규화2 (0) | 2020.07.23 |
mysql 조건 검색 WHERE(AND, OR , NOT ,LIKE) (0) | 2020.06.23 |
mysql 비밀번호변경, 시간설정, 한글설정(aws ec2 ubuntu) (0) | 2020.06.21 |
mysql join (0) | 2020.05.24 |