
💡 DB_SCRIPT란?
: 데이터베이스(DB) 스크립트
: 데이터베이스의 구조와 데이터를 정의하거나 조작하는 SQL문장을 포함한 파일

💡 논리모델이란?
: 데이터베이서 설계에서 중요한 단계
: 데이터베이스 시스템 구현 시 테이터를 구조화하여 표현하는 과정💡 논리모델 용어
1. PK(Primary Key) : 기본키
=> 데이터베이스 테이블에서 각 행(row)을 고유하게 식별하는 속성 또는 속성들의 집합
=> 각 테이블 마다 하나의 FK 존재, 고유(unique)한 속성, NULL값 X
2. FK(Foreign Key) : 외래키
=> 한 테이블의 컬럼이 다른 테이블의 기본 키를 참조하는데 사용
=> 두 테이블 간의 관계를 정의, 데이터의 참조 무결정을 유지, NULL값 O

💡 물리모델이란?
: 데이터 베이스 시스템에 실제로 구현되는 테이블 구조
: 논리모델을 기반으로 각 테이블의 컬럼, 데이터 타입, 제약조건 등을 구체적으로 설정한 것

💡 관계(relationship)이란?
: 데이터베이스에서 두 테이블(relation)간의 연관성
: 위 그림의 두 테이블이 연결되어 있는 부분을 관계(relationship)이라고 한다.
: 두 테이블은 1:N / N:1 구조를 이룰 수 있다.

-- 테이블 삭제 (실수시에 다시 밀고 다시 생성)
DROP TABLE IF EXISTS tbl_payment_order CASCADE;
DROP TABLE IF EXISTS tbl_payment CASCADE;
DROP TABLE IF EXISTS tbl_order_menu CASCADE;
DROP TABLE IF EXISTS tbl_order CASCADE;
DROP TABLE IF EXISTS tbl_menu CASCADE;
DROP TABLE IF EXISTS tbl_category CASCADE;
-- 테이블 생성
-- category 테이블 생성
CREATE TABLE IF NOT EXISTS tbl_category
(
category_code INT AUTO_INCREMENT COMMENT '카테고리코드',
category_name VARCHAR(30) NOT NULL COMMENT '카테고리명',
ref_category_code INT COMMENT '상위카테고리코드',
CONSTRAINT pk_category_code PRIMARY KEY (category_code),
CONSTRAINT fk_ref_category_code FOREIGN KEY (ref_category_code) REFERENCES tbl_category (category_code)
) ENGINE=INNODB COMMENT '카테고리';
CREATE TABLE IF NOT EXISTS tbl_menu
(
menu_code INT AUTO_INCREMENT COMMENT '메뉴코드',
menu_name VARCHAR(30) NOT NULL COMMENT '메뉴명',
menu_price INT NOT NULL COMMENT '메뉴가격',
category_code INT NOT NULL COMMENT '카테고리코드',
orderable_status CHAR(1) NOT NULL COMMENT '주문가능상태',
CONSTRAINT pk_menu_code PRIMARY KEY (menu_code),
CONSTRAINT fk_category_code FOREIGN KEY (category_code) REFERENCES tbl_category (category_code)
) ENGINE=INNODB COMMENT '메뉴';
CREATE TABLE IF NOT EXISTS tbl_order
(
order_code INT AUTO_INCREMENT COMMENT '주문코드',
order_date VARCHAR(8) NOT NULL COMMENT '주문일자',
order_time VARCHAR(8) NOT NULL COMMENT '주문시간',
total_order_price INT NOT NULL COMMENT '총주문금액',
CONSTRAINT pk_order_code PRIMARY KEY (order_code)
) ENGINE=INNODB COMMENT '주문';
CREATE TABLE IF NOT EXISTS tbl_order_menu
(
order_code INT NOT NULL COMMENT '주문코드',
menu_code INT NOT NULL COMMENT '메뉴코드',
order_amount INT NOT NULL COMMENT '주문수량',
CONSTRAINT pk_comp_order_menu_code PRIMARY KEY (order_code, menu_code),
CONSTRAINT fk_order_menu_order_code FOREIGN KEY (order_code) REFERENCES tbl_order (order_code),
CONSTRAINT fk_order_menu_menu_code FOREIGN KEY (menu_code) REFERENCES tbl_menu (menu_code)
) ENGINE=INNODB COMMENT '주문별메뉴';
CREATE TABLE IF NOT EXISTS tbl_payment
(
payment_code INT AUTO_INCREMENT COMMENT '결제코드',
payment_date VARCHAR(8) NOT NULL COMMENT '결제일',
payment_time VARCHAR(8) NOT NULL COMMENT '결제시간',
payment_price INT NOT NULL COMMENT '결제금액',
payment_type VARCHAR(6) NOT NULL COMMENT '결제구분',
CONSTRAINT pk_payment_code PRIMARY KEY (payment_code)
) ENGINE=INNODB COMMENT '결제';
CREATE TABLE IF NOT EXISTS tbl_payment_order
(
order_code INT NOT NULL COMMENT '주문코드',
payment_code INT NOT NULL COMMENT '결제코드',
CONSTRAINT pk_comp_payment_order_code PRIMARY KEY (payment_code, order_code),
CONSTRAINT fk_payment_order_order_code FOREIGN KEY (order_code) REFERENCES tbl_order (order_code),
CONSTRAINT fk_payment_order_payment_code FOREIGN KEY (order_code) REFERENCES tbl_payment (payment_code)
) ENGINE=INNODB COMMENT '결제별주문';
-- 데이터 삽입
INSERT INTO tbl_category VALUES (null, '식사', null);
INSERT INTO tbl_category VALUES (null, '음료', null);
INSERT INTO tbl_category VALUES (null, '디저트', null);
INSERT INTO tbl_category VALUES (null, '한식', 1);
INSERT INTO tbl_category VALUES (null, '중식', 1);
INSERT INTO tbl_category VALUES (null, '일식', 1);
INSERT INTO tbl_category VALUES (null, '퓨전', 1);
INSERT INTO tbl_category VALUES (null, '커피', 2);
INSERT INTO tbl_category VALUES (null, '쥬스', 2);
INSERT INTO tbl_category VALUES (null, '기타', 2);
INSERT INTO tbl_category VALUES (null, '동양', 3);
INSERT INTO tbl_category VALUES (null, '서양', 3);
INSERT INTO tbl_menu VALUES (null, '열무김치라떼', 4500, 8, 'Y');
INSERT INTO tbl_menu VALUES (null, '우럭스무디', 5000, 10, 'Y');
INSERT INTO tbl_menu VALUES (null, '생갈치쉐이크', 6000, 10, 'Y');
INSERT INTO tbl_menu VALUES (null, '갈릭미역파르페', 7000, 10, 'Y');
INSERT INTO tbl_menu VALUES (null, '앙버터김치찜', 13000, 4, 'N');
INSERT INTO tbl_menu VALUES (null, '생마늘샐러드', 12000, 4, 'Y');
INSERT INTO tbl_menu VALUES (null, '민트미역국', 15000, 4, 'Y');
INSERT INTO tbl_menu VALUES (null, '한우딸기국밥', 20000, 4, 'Y');
INSERT INTO tbl_menu VALUES (null, '홍어마카롱', 9000, 12, 'Y');
INSERT INTO tbl_menu VALUES (null, '코다리마늘빵', 7000, 12, 'N');
INSERT INTO tbl_menu VALUES (null, '정어리빙수', 10000, 10, 'Y');
INSERT INTO tbl_menu VALUES (null, '날치알스크류바', 2000, 10, 'Y');
INSERT INTO tbl_menu VALUES (null, '직화구이젤라또', 8000, 12, 'Y');
INSERT INTO tbl_menu VALUES (null, '과메기커틀릿', 13000, 6, 'Y');
INSERT INTO tbl_menu VALUES (null, '죽방멸치튀김우동', 11000, 6, 'N');
INSERT INTO tbl_menu VALUES (null, '흑마늘아메리카노', 9000, 8, 'Y');
INSERT INTO tbl_menu VALUES (null, '아이스가리비관자육수', 6000, 10, 'Y');
INSERT INTO tbl_menu VALUES (null, '붕어빵초밥', 35000, 6, 'Y');
INSERT INTO tbl_menu VALUES (null, '까나리코코넛쥬스', 9000, 9, 'Y');
INSERT INTO tbl_menu VALUES (null, '마라깐쇼한라봉', 22000, 5, 'N');
INSERT INTO tbl_menu VALUES (null, '돌미나리백설기', 5000, 11, 'Y');
COMMIT;
💡 SQL에는 convention이 존재하여 적용시켜야 한다

=> 1. 전체구조: SQL과 하나의 문장: 절(Clause)로 구성된다

=> 2. 띄어쓰기를 맞추는 convention을 잘 지켜야 한다. (Query의 가독성이 좋아짐)

=> 3. *(Astrisk)는 ALL(모든)파일을 의미하고, *을 사용할 수 있지만, 열의 이름을 직접 적어주는 것이 좋다.
=> 4. 앞에 ,을 붙이는 것은 주석처리 시 발생하는 오류를 예방해주기 위한 convention

=> 5. 실행되는 순서가 중요하며, 돌아가는 구조를 잘 알아여 한다.

=> 6. 실행 결과값으로 나오는 값은 "Result Set"이라고 한다.