본문 바로가기
디비연동 MySQL &그누보드 & Node.js

데이터베이스 모델링

by db_dpipe 2020. 10. 1.
728x90
반응형

데이터베이스 모델링(데이터 모델링)이란 현실 세계의 작업이나 사물을 DBMS의 데이터베이스 개체로 옮기는 과정입니다. 쉽게 풀어 이야기하면 쇼핑몰의 물건, 직원, 고객 등을 데이터베이스의 각각의 테이블이라는 개체로 변환하는 과정이라고 보면 됩니다. 현실세계의 물건, 직원, 고객 뿐 아니라 물건을 사는 행위도 데이터베이스의 테이블로 변환할 수 있습니다.


데이터베이스 모델링의 정답은 없지만 좋은 모델링과 나쁜 모델링은 있습니다. 데이터베이스 모델링은 구현하고자 하는 업무에 대한 정확한 지식과 경험이 요구는  어려운 작업입니다. 

 


보통 데이터베이스 모델링은 3단계를 거쳐 완성합니다.

개념적 모델링, 논리적 모델링, 물리적 모델링으로 나누어집니다. 

개념적 모델링은 주로 업무 분석 단계에 포함되며, 논리적 모델링은 업무 분석의 후반부와 시스템 설계 전반부에 걸쳐 진행됩니다. 물리적 모델링은 시스템 설계 후반부에 주로 진행됩니다. 

 


데이터베이스 모델링 실습하기

책의 샘플 예시입니다. 새로운 쇼핑몰을오픈했다고 가정하고, 매장을 찾는 고객의 명단과 구매한 내역이 다음과 같다고 가정합니다. 이 업무를 가정으로 데이터베이스 모델링을 진행하도록 해봅니다. 다음의 내용은 엑셀에 기록한 내용이라고 가정합니다. 

 


물건을 구매한 적이 없는 고객을 위쪽으로 정리합니다. 이렇게 정리된 테이블을 보면 L자 모양으로 보입니다. 이러한 것을 L자형 테이블이라고 합니다. L자형 테이블은 공간이 낭비됩니다.(비어 있는 공간)

 


 L자형 테이블을 빈칸이 있는 곳과 없는 곳으로 분리를 해봅니다. 이런식으로 분리하면 고객 방문 기록이 고객 테이블과 구매 테이블로 분리됩니다. 이렇게 분리하여 낭비되는 공간이 없는 테이블로 수정되었습니다. 즉, 공간이 절약되었습니다.  

그런데 표를 가만히 보면 고객 테이블에서 정보가 중복되고 있는 것을 볼 수 있습니다. 즉, 여러번의 물건을 산 고객의 동일한 정보가 중복되고 있는 것입니다. 

 


고객 테이블의 중복을 없애니 고객이 10명이 되었습니다. 이제 각각의 고객을 구분해봅니다. 고객의 이름을 구분할 수 있는 구분자로 설정합니다. 이러한 구분자를 기본 키라고 합니다. 기본 키는 중복되지 않고 비어있지 않아야 합니다.  실제로는 고객의 이름을 구분자로 사용하지 않습니다. 이름은 중복이 되니까요. 그래서 보통 ID를 기본 키로 사용합니다. 지금은 연습이니 이름으로 그냥 해봅니다.

 


구매 테이블을 보면 누가 구매한것인지 알 수 없으므로 구매 테이블의 앞에 회원의 기본 키로 설정된 이름을 넣어줍니다. 아래와 같이 구매 테이블이 완성되었습니다. 이때 구매 테이블의 고객 이름은 중복되었다고 없애면 안됩니다. 구매 테이블의 각각의 행은 별도로 구매한 내역이기 때문입니다. 

 


고객 테이블과 구매 테이블은 밀접한 관련이 있는 테이블입니다. 구매 테이블만으로는 고객에게 배송할 수 없습니다. 고객의 주소와 연락처가 있는 고객 테이블과 구매 테이블의 업무 연관성을 맺어줘야 합니다. 이를 관계라고 부릅니다. 

 

두 테이블 중에서 부모 테이블과 자식 테이블을 결정해봅니다. 주가 되는 쪽을 부모로, 상세가 되는 쪽을 자식으로 설정합니다. 

고객 테이블이 부모 테이블이 되고, 구매 테이블이 자식 테이블로 하면 됩니다. 

 

다른 예로 학생 한 명이 여러개의 과목을 신청한다고 해보면 부모는 학생 테이블이 되고, 과목 테이블은 자식 테이블로 하면 됩니다. 이러한 관계를 테이블의 1대다(1:N) 관계라고 말합니다. 이러한 1대다 관계는 관계형 데이터베이스에서 가장 보편적인 테이블 사이의 관계입니다. 

 

부모 테이블인 고객 테이블과 자식 테이블인 구매 테이블의 관계를 맺어주는 역할은 기본키와 외래키를 설정함으로 이루어집니다. 고객 테이블에서 기본 키를 고객 이름으로 설정했으므로, 자식 테이블의 외래 키는 부모 테이블의 기본 키와 일치되는 구매 테이블의 고객 이름으로 설정하면 됩니다.

외래 키는 부모 테이블을 통해 정보를 얻을수 있게 됩니다. 

 

지금까지 살펴본 사례와 반대로 물건이 부모 테이블이 되는 경우도 있습니다. 예를 들어 물품 종류에 대한 테이블과 물품을 판매한 직원 기록 테이블의 경우가 이에 해당합니다. 물품 종류 하나당 여러 명의 직원이 판매하는 경우를 생각하면 됩니다. 

 


이제 완성된 고객 테이블과 구매 테이블의 테이블 구조를 정의해봅니다. 열 이름, 데이터 형식, Null 여부 등을 결정하는 것입니다.

 

이상 책을 통해 모델링의 개념을 간단하게 살펴보았습니다.

꼭.. 프로그래밍이 아니더라도.. 행정 업무에도 요긴하게 쓰이는.. 중요한 개념이라는 생각이 듭니다. ^^

그럼.. 오늘은 여기까지~~

728x90
반응형