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개의 테이블로 나눠 데이터를 저장하게 되면 해결될 것이다.