DB/postgres

postgresql - dvdrental 실습(6)

@예민한 방구석여포 힘히힘 2021. 3. 11. 15:10
반응형

패스트캠퍼스~ 패스트 캠퍼스으~

 

1. 영화 예매 시스템을 구축하고자 한다. 아래의 요구조건을 부합하는 물리 테이블을 생성하고 임의의 테스트 데이터를 입력하시오.

 

❕ 고객 테이블 생성

 

❕ 예매 테이블 생성

 

두가지 조건에 맞게 생성해주기...!

 

 

 

[고객테이블 생성]

 

CREATE TABLE TB_MOVIE_CUST(
cust_ID CHAR(10) PRIMARY KEY
,CUST_NM VARCHAR(50) NOT NULL
,SEX VARCHAR(6)
,BIRTH_DATE DATE NOT NULL
,ADDRESS VARCHAR(200) NOT NULL
,PHONE_NUMBER VARCHAR(13) NOT NULL
,CUST_GRADE CHAR(1) NOT NULL CHECK (CUST_GRADE IN ('S','A','B','C','D'))
,JOIN_DT DATE NOT NULL CHECK (JOIN_DT <=EXPIRE_DT)
,EXPIRE_DT DATE NOT NULL DEFAULT TO_DATE('9999-12-31','YYYY-MM-DD')
);

ALTER TABLE tb_movie_cust RENAME COLUMN customer_id to cust_id;

 

--궁금한게 있다... EXPIRE_DT는 NOT NULL DEFAULT 이면서 디폴트 값을 주면 의미가 있는 건가...?? NOT NULL 조건을 없애야 DEFAULT 값을 사용할 수 있는 것이 아닌가 헷갈렷다..

 

 

 

INSERT INTO TB_MOVIE_CUST(CUST_ID,CUST_NM,SEX,BIRTH_DATE,ADDRESS,PHONE_NUMBER,CUST_GRADE,JOIN_DT,EXPIRE_DT)
VALUES 
('0000000001','이경오','남자', TO_DATE('1984-06-12','yyyy-mm-dd'), '경기도 안양시 동안구 비산동 1-1', '010-1234-1234', 'S', TO_DATE('2017-01-01','yyyy-mm-dd')),
('0000000002','홍길동','남자', TO_DATE('1971-07-04','yyyy-mm-dd'), '경기도 안양시 동안구 비산동 1-2', '010-4321-4321', 'A', TO_DATE('2018-06-01','yyyy-mm-dd')),
('0000000003','홍길동','남자', TO_DATE('1971-07-04','yyyy-mm-dd'), '경기도 안양시 동안구 비산동 1-2', '010-4321-4321', 'A', TO_DATE('2018-06-01','yyyy-mm-dd'))
;
❗실행오류!!!

--


INSERT INTO TB_MOVIE_CUST(CUST_ID,CUST_NM,SEX,BIRTH_DATE,ADDRESS,PHONE_NUMBER,CUST_GRADE,JOIN_DT)
VALUES 
('0000000001','이경오','남자', TO_DATE('1984-06-12','yyyy-mm-dd'), '경기도 안양시 동안구 비산동 1-1', '010-1234-1234', 'S', TO_DATE('2017-01-01','yyyy-mm-dd')),
('0000000002','홍길동','남자', TO_DATE('1971-07-04','yyyy-mm-dd'), '경기도 안양시 동안구 비산동 1-2', '010-4321-4321', 'A', TO_DATE('2018-06-01','yyyy-mm-dd')),
('0000000003','홍길동','남자', TO_DATE('1971-07-04','yyyy-mm-dd'), '경기도 안양시 동안구 비산동 1-2', '010-4321-4321', 'A', TO_DATE('2018-06-01','yyyy-mm-dd'))
;

--EXPIRE_DT를 처음부터 insert에 적지 않으면 !! default 값 생성 되는 것!!

 

 

 

 

 

 

[예매 테이블 생성]

CREATE TABLE TB_MOVIE_RESV(

       RESV_NO CHAR(10) PRIMARY KEY
       ,MOVIE_ID CHAR(6) NOT NULL
       ,MOVIE_Theater_ID CHAR(6) NOT NULL
       ,CUST_ID CHAR(10) NOT NULL REFERENCES TB_MOVIE_CUST(CUST_ID) NOT NULL
       ,MOVIE_START_TIME TIMESTAMP NOT NULL CHECK (MOVIE_START_TIME < MOVIE_END_TIME)
       ,MOVIE_END_TIME TIMESTAMP NOT NULL
       ,SEAT_NO CHAR(4) NOT NULL
);

 

 

 

INSERT INTO TB_MOVIE_RESV
VALUES
 ('9000000001','000001','000010','0000000001', TO_TIMESTAMP('2019-05-01 14:00:00','yyyy-mm-dd hh24:mi:ss'),TO_TIMESTAMP('2019-05-01 17:30:00','yyyy-mm-dd hh24:mi:ss'), 'A-01')
,('9000000002','000002','000020','0000000001', TO_TIMESTAMP('2019-04-01 14:00:00','yyyy-mm-dd hh24:mi:ss'),TO_TIMESTAMP('2019-05-01 14:00:00','yyyy-mm-dd hh24:mi:ss'), 'A-11')
,('9000000003','000003','000040','0000000002', TO_TIMESTAMP('2019-03-01 16:00:00','yyyy-mm-dd hh24:mi:ss'),TO_TIMESTAMP('2019-05-01 18:30:00','yyyy-mm-dd hh24:mi:ss'), 'B-12')
,('9000000004','000004','000050','0000000002', TO_TIMESTAMP('2019-03-25 21:00:00','yyyy-mm-dd hh24:mi:ss'),TO_TIMESTAMP('2019-05-01 23:30:00','yyyy-mm-dd hh24:mi:ss'), 'B-12')
,('9000000005','000005','000060','0000000003', TO_TIMESTAMP('2018-07-11 16:00:00','yyyy-mm-dd hh24:mi:ss'),TO_TIMESTAMP('2019-05-01 18:30:00','yyyy-mm-dd hh24:mi:ss'), 'B-12')
,('9000000006','000005','000060','0000000003', TO_TIMESTAMP('2018-08-15 16:00:00','yyyy-mm-dd hh24:mi:ss'),TO_TIMESTAMP('2019-05-01 23:30:00','yyyy-mm-dd hh24:mi:ss'), 'B-12')
;

 

여기서 자꾸 오류나서 애먹었다....

 

INSERT INTO에 INTO를 자꾸 빼먹음!!!!

 

 

cust_id는 참조 무결성 제약 조건이 있기 때문에 TB_MOVIE_CUST이 테이블이 있는 상태에서 만들 수 있다~