데이터 베이스 이상현상에 대해 알게 되었다. 알아두면 프로젝트 ERD 구성시 큰 도움이 될 것 같으니 파헤쳐 보자!
❓좋은 관계형 데이터베이스란?
정보의 이상 현상(Anomaly)이 생기지 않도록 설계된 데이터베이스.
이상 현상은 갱신 이상(Modification Anomaly)
, 삽입 이상(Insertion Anomaly)
, 삭제 이상(Deletion Anomaly)
으로 구성된다.
갱신 이상(Modification Anomaly)
: 반복된 데이터 중에 일부를 갱신 할 시 데이터의 불일치가 발생하는 상태삽입 이상(Insertion Anomaly)
: 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능한 상태삭제 이상(Deletion Anomaly)
: 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능한 상태위 테이블은 한 회사의 근무자(employee) 테이블이다. 근무자가 속한 부서(Department), 참여하고 있는 학생 그룹(Student_Group)을 나타낸다.
Modification Anomaly: 만약에 A. Bruchs
의 부서가 CIS
에서 Marketing
으로 바뀌었다고 가정해보자. 테이블의 4, 5번째 행의 CIS
를 둘 다 바꾸지 않고 하나만 바꾼다면 A.Bruchs의 부서는 어느 부서에 속해있는지 알 수 없게 된다.
Insertion Anomaly: 새로운 부서 Engineering
이 신설되었고 아직 근무자는 없다고 가정해보자. 하지만 이 부서에 관련한 정보는 불필요한 정보를 함께 입력하지 않는 한 위 테이블에 입력할 수 없다.
Deletion Anomaly: 만약에 Accounting
부서에 속한 사람이 J.Longfellow
단 한 명이라고 가정하자. J.Longfellow
의 정보(첫번째 행)를 삭제하면 Accounting
부서에 대한 정보도 사라지게 된다.
이러한 이상 현상을 정규화(Normalization)를 통해 방지할 수 있다.
데이터베이스 정규화란 데이터의 중복을 줄이고 무결성을 향상 시키는 등 여러 목적을 달성하기 위해 관계형 데이터베이스를 정규화된 형태로 재디자인하는 것을 말한다.
정규화는 1정규화 ~ 6정규화 까지 있지만, 실무에서는 대체로 1~3 정규화까지의 과정을 거친다고 한다.
테이블이 제 1정규형을 만족했다는 것은 세 가지 조건을 만족했다는 것을 의미한다.
모든 속성 필드에 속한 모든 값들이 atomic value(더이상 분해할 수 없는 값)만으로 되어 있다.
모던 attribute(속성)에 반복되는 그룹(repeating group)이 나타나지 않는다.
기본 키를 사용하여 데이터를 고유하게 식별할 수 있어야 한다.
전화번호를 여러개 가지고 있기 때문에 atomic하지않아, 1번 조건을 위반.
전화번호 그룹이 반복된다. 2번 조건 위반.
Customer ID가 더이상 고유하게 식별할 수 있는 키가 아니란 것을 확인할 수 있다. 3번 조건 위반.
이렇게 테이블을 나누어 디자인하면 3번조건을 만족시킬 수 있다.
제 2정규화를 만족하기 위해서는 모든 컬럼이 완전 함수적 종속을 만족해야한다.
❓완전 함수적 종속이란?
X의 값에 따라 Y값이 결정될때 X -> Y로 표현하는데, 이를 Y는 X에 대해 함수적 종속이라고 한다.
❓부분 함수적 종속이란?
Y 값을 결정하는데 X1, X2 두가지 변수가 작용된다고 할때, X1와 X2 모두 영향을 끼친다면 완전 함수적 종속, 두 변수중 하나만 영향을 끼친다면 부분 함수적 종속 이라고 한다.
위와 같은 경우, Manufacturer
와 Model
로 Model Full Name
을 알 수가 있다. 따라서 완전 함수적 종속의 관계이다. 하지만, Manufacturer Country
는 오직 Manufacturer
만 영향을 주고, Model
은 아무상관없이 때문에 부분 함수적 종속관계이다.
이를 해결하기 위해서는 테이블을 나누어 주어야한다.
3 정규형을 만족하기 위해선 두가지 조건을 만족해야한다.
2번째 조건이 위반된 사례이다.
위의 경우 Tournament
와 Year
가 후보키가 되지만, Winner Date of Birth
는 속성값인 Winner
를 거쳐 기본키에 의존한다.
따라서 2번째 조건에 위반된다.
두 테이블로 나누어 주어 3 정규화를 만족시킬 수 있다.
One to one, one to many, many to many 관계에 대해 공부하다가 좋은 블로그 글을 발견해서 정독해봤다. 글을 읽고나니 프로젝트 시작 전 ERD 설계가 얼마나 중요한지 이번 공부를 통해 알 수 있었다.
롤 API wrapper 모듈만들기, 전적 통계 분석 사이트 만들기
세운 목표를 항상 잊지말고 공부하자!
Reference :
https://wkdtjsgur100.github.io/database-normalization/
https://wkdtjsgur100.github.io/database-terms/
https://wkdtjsgur100.github.io/anomaly/
이열 ,,,,, 부지런하세요정말 본받아야겠네요 ..