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에서 발생하는 각종 다양한 오류들이 많아서 쓰는데 애를 많이 먹었다..
개발은 인내심의 한계를 뛰어넘는 일이라는 것을 또 깨달았다..ㅠ
오류를 해결하면 허탈한 감정이 들지만 그래도 깔끔하게 해결되었을 때의 성취감과 기쁨도 좋다..! 하하..
'Database' 카테고리의 다른 글
오라클 SQL Developer - 데이터베이스 접속 오류 (ORA-01017) (0) | 2024.05.07 |
---|---|
오라클 SQL Developer - io 오류로 데이터베이스 접속 안될 때 (0) | 2024.05.07 |