DB schema 설계 오류

지식저장공간·2023년 6월 2일
0

DB

목록 보기
13/19

schema 설계 오류

중복 데이터 문제

하나의 테이블에 EMPLOYEE 정보와 DEPARTMENT 정보를 같이 둔 경우

여러명의 직원들 중 부서가 같은 경우 같은 dept_id, dept_name, dept_leader_id를 가지며 중복된 데이터가 계속 생성된다.

null이 많은 문제

1

신입사원이 들어오고, 부서배치를 아직 받지 않은 경우

신입사원에 대한 부서정보가 모두 null이다.

2

임직원이 한명도 없는 부서 정보를 입력하는 경우

PK를 제외한 임직원에 대한 정보가 모두 null이다.

이유

하나의 테이블이 여러 관심사를 가지고 있다. 별개의 관심사가 한테이블에 존재한다.
하나의 테이블은 하나의 관심사만 가지게 한다!!

해결

별개의 관심사는 서로 다른 테이블로 분리한다. 부서정보가 없는 경우 부서에 대한 정보만 null로 된다.

새로운 부서가 생겼을 경우 DEPARTMENT 테이블에 부서 정보만 추가하면되고, EMPLOYEE 테이블은 신경 쓸 필요가 없다.

* 테이블의 관심사가 서로 분리되었기 때문에 임직원에 대한 데이터와 부서의 데이터를 분리하여 독립적으로 데이터를 insert할 수 있다.

삭제 시 발생하는 문제

관심사가 분리 안되어 있을 경우

필요한 데이터 삭제

QA부서는 존재하여야 하지만 YUMIN의 정보를 삭제해야 하는 경우

YUJIN의 데이터를 삭제하는 경우 QA 부서 정보 자체도 같이 사라진다.

또는 임직원 정보에 모두 null로 변경한다.
★데이터 베이스내 데이터는 null값이 적을수록 좋다.

업데이트 시 문제

update 중 문제가 발생하여 jinho의 부서명만 변경된 경우. 부서 이름의 불일치가 발생한다.

서로 다른 테이블에 관심사를 놓게 되면 부서 테이블의 부서명의 데이터만 변경하면 된다.

Spurious Tuples

가짜 튜플이 생길 가능성이 존재한다.

예시

부서 ID 와 프로젝트 ID 및 프로젝트 정보를 하나의 테이블에서 관리하고, 부서명 과 프로젝트 위치를 하나의 테이블에서 관리한다.

두 테이블을 natural join하여 튜플을 생성해보자

proj_location에 같은 Jeju를 가진 튜플과 모두 join 되어 튜플을 생성한다.

부서ID가 1002로 같지만, 부서명은 서로 다르다.

해결

서로 다른 관심사를 가지는 테이블을 설계해야한다.

부서 테이블, 프로젝트 테이블, 어떤부서가 어떤 프로젝트를 하였는가 테이블

출처 : 쉬운코드 유튜브

profile
발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

0개의 댓글