본문 바로가기
Database/Oracle

[국비] SQL 내용정리 Day06

by tpleehan 2021. 12. 13.

Modeling Quiz

영화 예매 사이트는 회원제로 관리되고 있으나 비회원인 경우에도 예매가 가능하다.
회원 가입을 위해서는 이름, 주민번호, 전화번호, 이메일, 회원 아이디, 비밀번호와 같은 기본적인 정보를 입력해야 한다.
여러 지점에 있는 극장에 대해서 영화를 예매할 수 있다. 

예매가 순조롭게 이루어지려면 각 극장 지점명과 위치가 관리되어야 한다. 

극장은 여러 개의 상영관이 있으며 각각의 상영관에서는 여러 종류의 영화가 상영된다.

영화표에는 해당 상영관의 좌석이 정해져서 기록되어 있다. 
영화표를 예매할 때 고객들은 원하는 좌석을 지정할 수 있으며 예매일자와 예매 수량이 기록된다. 

결제방법은 카드결제나 계좌이체 방법이 있다. 
영화표를 예매할 때 회원의 경우에 한해서 포인트 점수가 적립된다. 

예매한 영화표는 취소가 가능하고 취소한 경우에 환불을 해준다. 
취소 방법은 부분 취소와 전체 취소 두 가지 방법이 있다.

/* Drop Triggers */

DROP TRIGGER TRI_BOARD_BNO;
DROP TRIGGER TRI_LECTURE_LEC_NO;
DROP TRIGGER TRI_REPLY_RNO;


/* Drop Tables */

DROP TABLE ADMINS CASCADE CONSTRAINTS;
DROP TABLE REPLY CASCADE CONSTRAINTS;
DROP TABLE BOARD CASCADE CONSTRAINTS;
DROP TABLE LEC_ORDER CASCADE CONSTRAINTS;
DROP TABLE LECTURE CASCADE CONSTRAINTS;
DROP TABLE USERS CASCADE CONSTRAINTS;


/* Drop Sequences */

DROP SEQUENCE SEQ_BOARD_BNO;
DROP SEQUENCE SEQ_LECTURE_LEC_NO;
DROP SEQUENCE SEQ_REPLY_RNO;


/* Create Sequences */

CREATE SEQUENCE SEQ_BOARD_BNO INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE SEQ_LECTURE_LEC_NO INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE SEQ_REPLY_RNO INCREMENT BY 1 START WITH 1;



/* Create Tables */

CREATE TABLE ADMINS
(
	ID varchar2(30) NOT NULL,
	UPDATE_DATE date DEFAULT SYSDATE,
	PRIMARY KEY (ID)
);


CREATE TABLE BOARD
(
	BNO number(10) NOT NULL,
	WRITER varchar2(30) NOT NULL,
	TITLE varchar2(50) NOT NULL,
	CONTENT varchar2(2000),
	PRIMARY KEY (BNO)
);


CREATE TABLE LECTURE
(
	LEC_NO number(10,0) NOT NULL,
	TEACHER varchar2(30),
	LEC_LIST varchar2(30),
	PRIMARY KEY (LEC_NO)
);


CREATE TABLE LEC_ORDER
(
	USER_ID varchar2(30) NOT NULL,
	LEC_NO_NUMBER number(10,0) NOT NULL,
	ORDER_DATE date DEFAULT SYSDATE,
	PRIMARY KEY (USER_ID, LEC_NO_NUMBER)
);


CREATE TABLE REPLY
(
	RNO number(10) NOT NULL,
	WRITER varchar2(30) NOT NULL,
	CONTENT varchar2(2000),
	BNO number(10) NOT NULL,
	PRIMARY KEY (RNO)
);


CREATE TABLE USERS
(
	ID varchar2(30) NOT NULL,
	NAME varchar2(30) NOT NULL,
	REGDATE date DEFAULT SYSDATE,
	PRIMARY KEY (ID)
);


/* Create Foreign Keys */

ALTER TABLE REPLY
	ADD FOREIGN KEY (BNO)
	REFERENCES BOARD (BNO)
;


ALTER TABLE LEC_ORDER
	ADD FOREIGN KEY (LEC_NO_NUMBER)
	REFERENCES LECTURE (LEC_NO)
;


ALTER TABLE ADMINS
	ADD FOREIGN KEY (ID)
	REFERENCES USERS (ID)
;


ALTER TABLE BOARD
	ADD FOREIGN KEY (WRITER)
	REFERENCES USERS (ID)
;


ALTER TABLE LEC_ORDER
	ADD FOREIGN KEY (USER_ID)
	REFERENCES USERS (ID)
;


ALTER TABLE REPLY
	ADD FOREIGN KEY (WRITER)
	REFERENCES USERS (ID)
;


/* Create Triggers */

CREATE OR REPLACE TRIGGER TRI_BOARD_BNO BEFORE INSERT ON BOARD
FOR EACH ROW
BEGIN
	SELECT SEQ_BOARD_BNO.nextval
	INTO :new.BNO
	FROM dual;
END;

/

CREATE OR REPLACE TRIGGER TRI_LECTURE_LEC_NO BEFORE INSERT ON LECTURE
FOR EACH ROW
BEGIN
	SELECT SEQ_LECTURE_LEC_NO.nextval
	INTO :new.LEC_NO
	FROM dual;
END;

/

CREATE OR REPLACE TRIGGER TRI_REPLY_RNO BEFORE INSERT ON REPLY
FOR EACH ROW
BEGIN
	SELECT SEQ_REPLY_RNO.nextval
	INTO :new.RNO
	FROM dual;
END;

/

'Database > Oracle' 카테고리의 다른 글

[국비] SQL 내용정리 Day07  (0) 2021.12.14
[국비] SQL 내용정리 Day05  (0) 2021.12.11
[국비] SQL 내용정리 Day04  (0) 2021.12.09
[국비] SQL 내용정리 Day03  (0) 2021.12.08
[국비] SQL 내용정리 Day02  (0) 2021.12.07

댓글