본문 바로가기

Database

SQL 데이터베이스 프로젝트 - 분식집 주문 관리 프로그램

 

 

0. 개발환경

- Oracle SQL Developer

- Windows 10

 

1. 프로그램 설명

* 얌얌분식의 키오스크 앱 데이터베이스 프로그램이다.
* 테이블은 총 6개로 구성되어있으며 menu, menutype, orders, ordersmenu, customer, delivery 테이블이 있다.
* 각 테이블 당 기본키는 하나씩 지정되어 있다.
* 테이블당 지정된 기본키는 number타입의 id로, 외래키로 사용 시 보다 유기적으로 사용할 수 있도록 하기 위해 지정하였다.

 

2. 물리 모델링 (관계적 모델) 

 

 

(학원에서 작업했는데, 전날 만들면서 지정해둔 데이터 유형이 다음날 오니까 갑자기 다 unknown으로 되어있었는데(당황), 또 데이터유형이 아예 선택항목에서 다 사라졌었다(황당);; 프로그램 자체 버그라서 내가 해결할 수가 없어서 결국 개인 노트북으로 다시 수정했다..)

 

 

3. 테이블

*Menu 테이블

- menu테이블은 menuid, typename, menuname, menuprice, typeid로 구성되어 있다.
- (1) menu테이블에서는 각 음식의 이름과 가격, 음식 종류를 알 수 있는 데이터가 들어가있으며,
       menuid가 기본키이며 typeid는 menutype테이블에서 외래키로 받아온다.
- (2) 각 열의 데이터 유형은
      menuid = number  /  typename = varchar(20)  /  menuname = varchar2(20)

      menuprice = number  / typeid = number 이다.

 

*Menutype 테이블

- menutype테이블은 typeid, typename으로 구성되어 있다.
- (1) menutype테이블에서는 음식 종류를 구분하기 위해 만든 테이블로, 
       음식 종류와 그에 따른 타입 아이디를 번호로 지정하였고,
       typetid를 기본키로 두었다.
- (2) 각 열의 데이터 유형은 typeid = number  /  typename = varchar(20) 이다.

 

*Orders 테이블


- orders테이블은 ordersid, takein, orderdate, custid로 구성되어 있다.
- (1) orders테이블에서는 주문번호, 매장식사여부, 주문날짜, 주문한 고객번호를 알 수 있는 데이터가 들어가있다.
- (2) 매장식사여부를 나타내는 takein 데이터 키는 매장식사 시 'Y', 포장주문 시 'N'로 구분한다.
- 3) ordersid가 기본키이며 custid는 customer테이블에서 외래키로 받아온다.
- (4) 각 열의 데이터 유형은 
      ordersid = number  /  takein = varchar(20)  / menuid = number / 
      orderdate = date / custid = number 이다.

 

*Ordersmenu 테이블


-- 8. ordersmenu테이블은 ordersmenuid, ordersid, menuid로 구성되어있다.
-- 8-(1) ordersmenu테이블에서는 주문메뉴 번호, 주문번호, 메뉴 번호를 알 수 있는 데이터가 들어가있으며,
--       ordersmenuid가 기본키, ordersid와 menuid는 각각 외래키로 받아온다.
-- 8-(2) 주문번호(ordersid)에 따라 여러개의 메뉴(menuid)를 받을 수 있도록 하기 위해 구분한 테이블로,
--       orders테이블에서 받는 주문의 상세 주문 메뉴를 알 수 있는 테이블로 볼 수 있다.
-- 8-(3) ordersmenuid는 메뉴의 개수에 따라 하나씩 들어오는 키이지만, 데이터를 관리하기 위해 지정된 기본키로
--       데이터를 조회하거나 관리할 때 주로 사용되지는 않는다.
-- 8-(4) 각 열의 데이터 유형은
--       ordersmenuid = number / ordersid = number / menuid = number 이다.

 

*Customer 테이블


- customer테이블은 custid, custname, custaddr, custphone으로 구성되어 있다.
- (1) customer테이블에서는 고객번호, 고객이름, 고객 주소, 고객 전화번호로 구성되어 있으며,
       고객 데이터를 보관하는 테이블로 custid가 기본키로 지정되어있다.
- (2) 해당 데이터베이스에서는 주문마다 custid가 들어가있기 때문에 고객번호가 있어야 주문이 가능한 구조로,
       모든 고객은 주문 내역을 최소 1개 이상 가지고 있다.
- (3) 각 열의 데이터 유형은
       custid = number / custname = varchar2(20) / 
       custaddr = varchar2(100) / custphone = varchar2 (20) 이다.

 

*Delivery 테이블


- delivery테이블은 deliveryid, status, ordersid, deliveryprice로 구성되어있다.
- (1) delivery테이블에서는 배달번호, 배달 상태, 주문 번호, 배달비를 알 수 있는 데이터가 들어가있으며,
       deliveryid는 기본키, ordersid는 외래키로 받아온다.
- (2) 배달상태 데이터 status는 '진행중'과 '완료'로 값이 구분되어 들어간다.
- (3) 배달은 orders테이블의 takein='N'인 값을 기준으로 일부가 delivery테이블의 deliveryid로 들어갔다.
- (4) deliveryprice는 주문번호마다 다르며, 금액은 임의로 작성되어 배달 금액에 대한 기준을 따로 두지 않았다.

 

 

 

4. 테이블 간 관계

 

(1)  orders테이블 - customer테이블

 - orders테이블의 custid열은 customer테이블의 custid열을 외래키로 참조하는 일대다(1:N)관계

    >> 한 명의 고객(custid)이 여러 주문(ordersid)을 할 수 있는 관계로
       즉, custid 1개 당 ordersid가 여러 개일 수 있다는 뜻

 

(2) orders테이블 - ordersmenu테이블

- orders테이블의 ordersid열은 ordersmenu테이블의 ordersid열을 외래키로 참조하는 일대다(1:N)관계
   >> 1개의 주문(ordersid)에 여러 개의 주문메뉴(menuid)가 포함될 수 있다는 관계로
        즉, ordersid 1개 당 menuid가 여러 개일 수 있다는 뜻

 

(3) menu테이블 - ordersmenu테이블

 - menu테이블의 menuid열은 ordersmenu테이블의 menuid열을 외래키로 참조하는 일대일(1:1)관계
    >> 주문메뉴(menuid) 1개가 하나의 메뉴가 대응된다는 뜻

 

 (4) delivery테이블 - orders테이블

- delivery테이블의 ordersid는 orders테이블의 ordersid열을 외래키로 참조하는 일대일(1:1)관계
   >> 1개의 주문(ordersid)에는 하나의 배달정보가 포함될 수 있다는 뜻

 

 

5. 테이블 생성 및 데이터 삽입

 

 

 

6. sql문 - select문으로 질의 작성

 

 

 

 

+

<프로젝트에 대한 간단한 후기>

처음에 물리 모델링을 만들 때 최대한 신경써서 생각하고 만들었더니 생각보다 테이블 생성이나 데이터 엔티티를 나누는데에 큰 오류가 생기지는 않았던 것 같다. 처음부터 개념에 대해서 확실히 생각해서 만드니까 조금 덜 헷갈렸다.

다만, sql developer에서 발생하는 각종 다양한 오류들이 많아서 쓰는데 애를 많이 먹었다..

개발은 인내심의 한계를 뛰어넘는 일이라는 것을 또 깨달았다..ㅠ

오류를 해결하면 허탈한 감정이 들지만 그래도 깔끔하게 해결되었을 때의 성취감과 기쁨도 좋다..! 하하..