[ 05/31 TIL ] 데이터베이스 이상 현상(Anomaly)

JoonQpa·2022년 5월 31일
1

TIL

목록 보기
10/27
post-thumbnail

데이터 베이스 이상현상에 대해 알게 되었다. 알아두면 프로젝트 ERD 구성시 큰 도움이 될 것 같으니 파헤쳐 보자!

  • 🔍Database Anomaly

  • 🔍Normalization

📌DB Anomaly

❓좋은 관계형 데이터베이스란?

정보의 이상 현상(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

이러한 이상 현상을 정규화(Normalization)를 통해 방지할 수 있다.

데이터베이스 정규화란 데이터의 중복을 줄이고 무결성을 향상 시키는 등 여러 목적을 달성하기 위해 관계형 데이터베이스를 정규화된 형태로 재디자인하는 것을 말한다.

정규화는 1정규화 ~ 6정규화 까지 있지만, 실무에서는 대체로 1~3 정규화까지의 과정을 거친다고 한다.

⭐제 1정규화(First Normal Form, 1NF)

테이블이 제 1정규형을 만족했다는 것은 세 가지 조건을 만족했다는 것을 의미한다.

  1. 모든 속성 필드에 속한 모든 값들이 atomic value(더이상 분해할 수 없는 값)만으로 되어 있다.

  2. 모던 attribute(속성)에 반복되는 그룹(repeating group)이 나타나지 않는다.

  3. 기본 키를 사용하여 데이터를 고유하게 식별할 수 있어야 한다.

🤦‍♂️ 조건 위반 예시

전화번호를 여러개 가지고 있기 때문에 atomic하지않아, 1번 조건을 위반.

전화번호 그룹이 반복된다. 2번 조건 위반.

Customer ID가 더이상 고유하게 식별할 수 있는 키가 아니란 것을 확인할 수 있다. 3번 조건 위반.

🙆‍♂️ 해결 방안

이렇게 테이블을 나누어 디자인하면 3번조건을 만족시킬 수 있다.

⭐제 2정규화(First Normal Form, 2NF)

제 2정규화를 만족하기 위해서는 모든 컬럼이 완전 함수적 종속을 만족해야한다.

❓완전 함수적 종속이란?

X의 값에 따라 Y값이 결정될때 X -> Y로 표현하는데, 이를 Y는 X에 대해 함수적 종속이라고 한다.

❓부분 함수적 종속이란?

Y 값을 결정하는데 X1, X2 두가지 변수가 작용된다고 할때, X1와 X2 모두 영향을 끼친다면 완전 함수적 종속, 두 변수중 하나만 영향을 끼친다면 부분 함수적 종속 이라고 한다.

🤦‍♂️ 조건 위반 예시

위와 같은 경우, ManufacturerModelModel Full Name을 알 수가 있다. 따라서 완전 함수적 종속의 관계이다. 하지만, Manufacturer Country는 오직 Manufacturer만 영향을 주고, Model은 아무상관없이 때문에 부분 함수적 종속관계이다.

이를 해결하기 위해서는 테이블을 나누어 주어야한다.

🙆‍♂️ 해결 방안

⭐제 3정규화(First Normal Form, 3NF)

3 정규형을 만족하기 위해선 두가지 조건을 만족해야한다.

  1. Relation이 제 2정규화 되었다.
  2. Attribute(속성)들은 primary key(기본키)에만 의존해야 한다.

🤦‍♂️ 조건 위반 예시

2번째 조건이 위반된 사례이다.

위의 경우 TournamentYear가 후보키가 되지만, 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/

profile
Intuition factory: from noob to pro

2개의 댓글

comment-user-thumbnail
2022년 5월 31일

이열 ,,,,, 부지런하세요정말 본받아야겠네요 ..

1개의 답글