데이터 모델링에 대해 질문이 있습니다. 0 0 107

by 이지훈 [DB 모델링/설계] [2019.06.12 00:11:39]


redpen_20172.png (142,642Bytes)

안녕하세요. DAP준비를 하는 와중에 궁금한 점이 생겨 질문 올립니다. 필기는 그렇다 치고 실기를 혼자서 준비하려니 좀 힘드네요. 

 

일단 엔코아에서 예제문제와 모범답안을 올려준지라 그걸 보면서 준비를 하고 있는데 모범답안에서 좀 이해가 안 가는 부분이 생겨서요. 문제 전문은 이렇습니다.

 

http://www.dator.co.kr/?document_srl=2603004&page=1&cpage=1

 

우리는 전국 주요 도시에 여러 개의 멀티플렉스 영화관을 운영하고 있으며, 각 지점마다 8~10개 정도의 상영관을 보유하고 있다.


각 지점은 정규직으로 한 명의 매니저와 여러 명의 관리사원을 두고 있으며, 하루 18시간씩 연중무휴로 영화관을 운영할 수 있도록 계약직 사원과 아르바이트 사원을 채용하여 3교대로 근무하도록 하고 있다. 계약직 및 아르바이트 사원을 포함한 모든 사원들에 대해 우리는 사원번호를 부여하여 사원의 식별과 근태나 근무 성과 등의 관리에 활용하고 있다. 우리는 영화관에 근무하는 모든 사원에 대해 이름과 주소, 연락 가능한 핸드폰 번호를 관리하며, 정규직 사원은 직급과 입사일자를, 계약직 및 아르바이트 사원은 시급을 추가로 관리한다.


계약직과 아르바이트 사원들은 매표소와 매점에서 근무하거나, 매 회차 상영에 앞서 검표와 관객의 상영관 입장을 돕는 일을 하며, 매 회차 상영 종료 시 상영관 청소와 상태 확인 등을 수행하고, 고객들의 불편사항을 기록하고 해결하는 일을 한다. 교대 근무는 근무조를 편성하여 한 근무조가 6시간씩 근무하고 다음 근무조와 교대하는 방식으로 운영하고 있으며, 계약직과 아르바이트 사원들은 교대 근무를 통해 근무한 시간만큼 시급을 곱하여 월단위로 급여를 지급하고 있다. 이를 위해 사전에 누가 어떤 근무조에 속하는지를 관리하고 있으며, 개인 사정에 따라 소속 근무조를 변경하거나 다른 근무조 근무자의 공석을 메우기 위해 연장 근무를 하는 등 변형 근무가 발생할 수 있기 때문에 개인별 근무 내역을 관리해야 한다. 또한 소속 근무조를 변경하더라도 임의의 시점에 어는 근무조에 소속되어 있었는지를 알 수 있어야 하며, 모든 사원에 대해 결근, 지각, 휴가 등의 일별 근태관리가 되어야 한다. 교대 근무는 근무자가 근무한 날짜와 근무시작/종료시간을 근무일지에 기록하는데, 다른 근무조 근무자의 대근이나 연장 근무로 인해 한 근무일자에 각기 다른 근무시작/종료시간이 재차 기록될 수 있다.


고객들은 우리 영화관에서 상영하는 영화를 웹이나 모바일앱으로 조회해 볼 수 있는데, 이를 위해 지점과 상영관별로 상영 중인 영화를 관리해야 한다. 우리는 영화별로 영화번호를 부여하여 식별하고 있으며, 영화명, 러닝타임, 제작사, 감독, 출연배우, 관람가능등급, 개봉일, 종영일, 장르, 줄거리 등으로 구성된 영화정보를 관리하여 고객들에게 제공한다. 영화에 따라 감독과 출연배우는 여러 명일 수 있고, 어떤 경우에는 감독과 출연배우가 동일인인 경우도 있다. 영화에 출연하는 주요 배우나 감독별로 국적, 출생연도, 본명, 결혼유무 등 간단한 인적 사항과 필모그래피를 제공하기도 하여 그들이 감독/연출을 했거나 출연한 영화의 목록과 개봉일 정보 등 영화 관련 정보를 고객들에게 제공한다. 필모그래피로 제공되는 영화 목록 중에는 우리 지점에서 상영되지 않은 영화도 다수 있지만 그 영화 정보는 함께 관리하도록 한다. 지점별로 상영하는 영화는 다를 수 있는데, 지점에서는 상영관별로 상영하는 영화와 상영시간을 자율적으로 결정한다. 즉, 지점에서는 영화별로 상영회차와 각 회차별 시작시간, 종료시간을 결정하고, 영화별로 상영관을 할당하여 관리한다. 하나의 상영관은 하나의 영화만 상영하지만 하나의 영화는 한 지점의 여러 상영관에서 상영할 수도 있다. 또한 상영회차 및 회차별 시작시간은 평일/휴일에 상관없이 동일하다.


고객은 각 지점의 매표소에서 직접 티켓을 구매하거나 인터넷을 통해 구매한 티켓을 발권받아 영화를 관람할 수 있다. 티켓 판매에 대해 지점번호, 영화번호, 상영일자, 상영관, 상영회차, 총금액, 결제수단, 티켓구매채널, 구매일시 등을 관리하고, 인터넷 구매는 발권일시를, 창구 구매는 판매사원번호 등을 추가로 관리하며, 이러한 티켓 판매에 대한 정보는 판매번호를 부여하여 식별•관리한다. 한 번 발권된 티켓은 재발권하지 않으며, 발권 시 청소년, 성인으로 구분한 관람인원수와 고객이 선택한 좌석들을 기록하고 관리하여 다른 티켓 판매 시 좌석이 겹치지 않도록 해야 한다. 발권 시 좌석 선택을 위해 상영관별 좌석내역과 상영 회차별 판매 가능한 좌석의 현황 등을 관리해야 한다.


매점(snack bar)에서 판매하는 상품은 팝콘(L사이즈), 콜라(M사이즈) 등과 같은 단품과 이들을 다양하게 묶은 콤보 상품이며, 이들에 대해 상품번호, 상품명, 사이즈, 단가 등을 관리한다. 매점에서 상품이 판매되면 판매한 상품번호, 판매일자와 시간, 수량, 총금액, 결제수단 등을 기록한다.

 

 

그리고 그 모범답안이 이렇습니다.

 

http://www.dator.co.kr/files/attach/images/356604/720/641/002/redpen_20172.png

 

사실 이번 문제 뿐만이 아니라 많은 예제들을 보면서 느껴왔던 부분인데요. 데이터모델링이라는 것을 자료의 중복을 제거해서 정합성을 깰 만한 여지 자체를 안 두게 설계를 하는 것이 그 목표잖습니까? 데이터 정규화라는 것도 그 일환이구요.

 

그런데 여기서 보면.....상영관배정이라는 엔터티에 영화번호가 이미 FK로 들어가 있지 않습니까? 그런데도 상영관별상영회차라는 엔터티는 상영관배정이라는 엔터티의 자식 엔터티라서 이미 그 튜플 하나하나에 영화번호를 가지고 있는 셈인데 옆의 영화 엔터티에서 따로 또 FK로 참조를 하고 있습니다.

 

이거 이러면 데이터의 정합성이 깨질 여지가 생긴 거 아닌가요? 기본적으로 상영관배정이라는 엔터티를 참조하는 시점에서 이미 영화 엔터티를 참조할 필요가 없어보이는데요. 굳이 해당 문제 뿐만이 아니라 모델링 예제 답안을 보면 이런 경우를 종종 봅니다. 사실 이 문제에서만 해도 이 부분만 있는 것도 아닙니다.

 

개인별근무내역이라는 엔터티만 봐도 사원 엔터티를 참조하고 있는데, 근무조배속 엔터티(역시 사원 엔터티를 참조하는)를 참조하면서 사원번호라는 것이 두 경로를 타고 오는 듯 보입니다.(이 표현이 적절한지는 모르겠습니다.) 즉, 하나의 데이터(칼럼값?)이 복수의 경로로 참조되는 경우를 많이 봤는데 이거 이래도 되는 건지 잘 모르겠습니다.

 

 

 

제가 뭘 좀 착각하고 있는 것인지, 아니면 착각한 건 아니고 실제로 정합성이 깨질 여지가 있는 설계인 것도 맞긴 하지만 은행 잔금같은 민감한 데이터도 아니고 하니 그 정도 여지는 설계하는 와중에 생길 수도 있으니 넘어가는 것이고당연히 dap 시험에서도 감점요인이 아닌 것인지가 궁금합니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입