본문 바로가기

CS ﹒ Algorithm/Database

데이터베이스 (8) 설계 4 - Anomaly(이상 현상)

 

일단 Anomaly에 대해 설명하기 전에 KEY의 중요성에 대해 다시 한 번 이야기를 해야할 것이다.

왜냐면 결국 모든 Anomaly는 테이블, 키 설계의 잘못으로 인해 발생하는 것이기 때문이다.

 

 

 

A라는 직원이 학년과 학생 테이블을 따로 만들기가 귀찮아서 학생 테이블에 학년은 하드코딩하듯이 일일히 수기로 작업했다.

이 때 어떤 문제가 생길까?

 

1. 만약 학년의 표기 명칭이 변경되었다면?

학년 테이블을 나눴을 경우 고작 단 세 글자의 수정으로 모든게 해결된다.

 

2. 오타가 발생한다면?

만약 테이블을 분리하지 않는다면 무결성을 내 손의 정확도에 맡겨야 한다.

내가 99.99%의 정확도를 가진 엄청난 능력자라고 가정해보자.

그리고 비록 확률이라는 것은 이런 개념은 아니지만 0.01%의 실패가 무조건 발생한다고 가정했을 때,

만약 내가 3000만 건의 데이터를 작성하면 잘못된 데이터가 무려 3000건 입력되는 것이다.

잘못된 데이터가 3000건이나 존재하는 데이터를 사용할 수 있는가?

 

테이블을 적절히 나누고 키를 설계하는 것이 얼마나 중요한 지 알았다면 이제 Anomaly에 대해 알아보자.

 

 

 

 

Anomaly란 ?

 

1. Database에서 Anomaly란 데이터의 이상 현상을 의미한다.

2. 대부분 중복된 데이터로 인해 Anomaly가 발생한다.

3. UPDATE, DELETE, INSERT에서 각각 발생 가능하다.

4. 이를 각각 갱신 이상, 삭제 이상, 삽입 이상이라고 칭한다.

 

 

 

 

예시와 Anomaly의 종류

 

 

한 회사의 데이터베이스 테이블이다. 쉽게 이해할 수 있도록 문제가 되는 부분을 모두 노란색으로 칠했다.

해당 테이블은 따로 관리되어야할 데이터를 모두 한 곳에서 가지고 있기 때문에 데이터를 일부 수정할 경우 전체가 망가질 우려가 있다.

또한 무결성이 전혀 보장되지 않아 같은 데이터가 중복되고 있으며, 심지어 다른 값을 가지고 있기 때문에 전혀 신뢰할 수 없는 상황이다.

 

미리 말하자면, 핵심은 데이터베이스는 중복된 값을 가지지 않는다.

SELECT로 불러온 것은 임시 테이블이지 실제 데이터가 아니다. 실제 테이블에 모든 값은 딱 한 번만 기록된다.

같은 값이 여러번 등장한다면 무조건 잘못된 테이블이다.

 

 

1. 갱신 이상 (UPDATE)

만약 해당 테이블을 수정 시 김수민의 데이터를 수정할 때 조건으로 직급, 부서명을 넣었다면 다른 김수민은 변경되지 않을 수 있다.

같은 고유번호를 가진 데이터는 항상 같은 데이터를 가지고 있어야 한다.

 

2. 삭제 이상 (DELETE)

특정 사원이 퇴사하여 해당 사원의 사원번호, 사원명만 남기고 나머지 정보는 폐기하려고 한다.

그러나 구별 방법이 없기 때문에 부서 번호를 기준으로 삭제하면 해당 부서의 모든 직원이 삭제된다.

 

3. 삽입 이상 (INSERT)

새로운 직원을 등록하고 싶으나 해당 직원이 부서번호와 사원번호를 정식으로 발급 받기 전까지 테이블에 등록할 방법이 없다.

 

 

 

-> 개선 방법

각 테이블은 종속된 데이터 한개씩만 관리하고, 중복되는 값이 절대 존재할 수 없도록 만들었다.

고용 테이블에 표기를 실수로 빼먹었는데, 당연히 각 코드는 모두 FK/PK일 것이다.

 

이처럼 Primary Key를 적절하게 사용하면 절대로 중복이 일어날 수 없기 때문에 무결성을 보장 받을 수 있다.