Back-End/DB

DB 설계를 잘못하면 생기는 일

김검정 2023. 9. 13. 13:08

데이터베이스 스키마 설계를 잘못하면 어떤 일이 발생할까?

empt_id empi_name birth_date position salary dept_id dept_name
1 D 1995 null 10000 1001  DEV

위 와 같은 테이블이 있다고 가정을 해보자 임직원의 정보와 해당 임직원의 부서 정보를 모두 같이 가지고 있는 테이블 구조이다.

그렇다면 위와 같이 테이블을 설계했다면 발생하게 되는  일을 생각해보자

 

직원이 한명 입사하여 새로운 임직원의 정보를 등록해보자

empt_id empi_name birth_date position salary dept_id dept_name
1 D 1995 null 10000 1001  DEV
2 Simon 1999 null 3000 1001 DEV

부서 아이디와 부서 명이 중복된 데이터가 생기게 된다. 이렇게 되면 저장 공간의 낭비가 발생하게되고, 실수로 인한 데이터 불일치 가능성이 존재하게된다. (부서명을 실수로 DEB로 입력한다면 같은 부서이지만 부서명이 다르게 된다.)

 

이번에는 부서의 배치를 받지 못한 임직원이 입사를 했다고 생각해보자

empt_id empi_name birth_date position salary dept_id dept_name
1 D 1995 null 10000 1001  DEV
2 Simon 1999 null 3000 1001 DEV
3 Jen 2000 null null null null

Jen 의 부서정보는 모두 null 데이터가 들어가게 된다. 할 수 있다면 null 값은 최대한 적에 사용하는것이 좋다.

 

이번에는 새로운 부서가 창설되었다고 생각해보자

empt_id empi_name birth_date position salary dept_id dept_name
1 D 1995 null 10000 1001  DEV
2 Simon 1999 null 3000 1001 DEV
3 null null null null 1002 QA

QA 부서 저장 용 row를 생성해야 하는데 위 예시와 같이 매끄럽지도 않고 null 데이터도 많이 들어가게 된다. (empt_id 는 primary key 이기 때문에 임시 값이 들어갔다.)

 

이렇게 만들어진 부서에 임직원이 최초로 들어왔다고 생각해보자

empt_id empi_name birth_date position salary dept_id dept_name
1 D 1995 null 10000 1001  DEV
2 Simon 1999 null 3000 1001 DEV
3 null null null null 1002 QA
4 Ujon 2001 null 1500 1002 QA

그렇다면 위에 empt_id = 3 에 해당하는 정보는 더 이상 필요 없게 된다.

 

 

위 테이블을 정상적으로 구분하여 만들어보자

empt_id empt_name birth_date position salary
1 D 1995 null 10000
2 Simon 1999 null 3000
3 Ujon 2001 null 1500
dept_id dept_name
1001 DEV
1002 QA

위와 같이 2개의 테이블로 나눠 데이터를 저장하게 되면 해결될 것이다.