电影院售票数据库系统设计.docx
《电影院售票数据库系统设计.docx》由会员分享,可在线阅读,更多相关《电影院售票数据库系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
电影院售票数据库系统设计
计算机实验报告
课程:
ORACLE班级:
学号:
姓名:
仪器编号实验日期
实验:
四电影院售票数据库系统设计
实验目的:
1.进一步熟悉oracle的各种操作。
2.能够在实际的实例中灵活运用学到的有关知识。
实验环境:
装有oracle10g的计算机且操作系统为Windowsxp。
实验内容:
(可用附页)
见附页
实验结果:
(可用附页)
见附页
实验内容:
电影院售票数据库系统设计
数据库设计是对于一个给定的应用环境,构建一个最优的数据库模式,并据此建立既能有效、完整、安全存储数据的数据库,又能满足多个用户的信息要求和处理要求的应用系统,
本数据库设计就是为了能够在很好的保存商品进销存的所有数据而进行设计。
(结合数据库设计和你要完成的系统进行陈述)。
数据库设计的过程包含需求分析、概念结构设计、逻辑结构设计、物理结构设计、应用的设计。
下面就按照数据库设计的过程进行逐一陈述
一、需求分析
1、系统设计的意义
电影院售票系统的数据库设计适用于电影院的售票,订票,退票服务。
利用数据库实现规范、方便的管理。
从而提升工作的效率,达到增长营利的效果。
2、数据库对象介绍
1)余票表
2)售票表
3)订票表
4)退票表
5)电影票综合表
3、系统相关对象
电影院售票人员及管理人员,消费者(购票者)
4、数据库对象分析
余票表—>>可以出售给消费者的所有电影票的表单
售票表—>>已经在售票处出售给消费者电影票的表单
订票表—>>通过电话、网络等途径订购电影票的表单
退票表—>>消费者(因某些原因)要求退还金钱的表单
电影票综合表—>>包括电影院所有的电影票的表单
5、功能分析
1)电影院的售票人员根据余票表单出售电影票,然后在售票表中记录。
2)通过订票表相应的在余票表中更新记录,减少一张票数。
3)通过退票表相应的在余票表中更新记录,增加一张票数。
4)根据表单实现查看总营利的功能
5)查看已经和未拿走订票的情况
6)查看当日上映电影及当日营利
7)查看已过期的未出售电影表单
8)…………
6、进阶分析
每张电影票都有自己唯一的编号ID,同一类型的电影票用片名来区分(同一片名的不同影片在片名后加入文字说明区分。
)有一个电影综合表,可以根据某个元素查出其他的各元素。
如:
根据片名可以查看所有该影片的电影票的每张编号,座位,票价,片映时间,该影片的票数等其他各种信息。
二、概念结构设计
1、各对象属性
余票表:
编号,片名,片映日期,影片时间,影厅,座位,票价,余票数。
售票表:
编号,片名,片映日期,影片时间,影厅,座位,票价,实收,找零,售票日期,售票数。
订票表:
编号,片名,片映日期,影片时间,影厅,座位,票价,手续费,售票日期,取票时间。
退票表:
编号,片名,片映日期,票价,售票日期,手续费,实退金额。
电影票综合表:
编号,片名,片映日期,影片时间,影厅,座位,票价,总票数。
(编号为每张电影票的区别号码,片名来区别不同的电影,影片时间单位为分钟)
2、画出E-r图
局部e-r图
三、逻辑结构设计
1、表的设计
余票表(remain_ticket):
列名
列名表示
数据类型
宽度
约束
编号
movie_id
number
20
主键
片名
movie_name
varchar2
100
片映日期
movie_date
date
影片时间
movie_time
number
影厅
movie_room
varchar2
20
座位
movie_seat
varchar2
20
票价
movie_price
number
20
余票数
remain_count
number
20
售票表(sale_ticket):
列名
列名表示
数据类型
宽度
约束
编号
movie_id
number
20
主键
片名
movie_name
varchar2
100
片映日期
movie_date
date
影片时间
movie_time
number
影厅
movie_room
varchar2
20
座位
movie_seat
varchar2
20
票价
movie_price
number
20
实收
movie_price_get
number
20
找零
movie_change
number
20
售票日期
movie_saledate
date
售票数
sale_count
number
20
订票表(book_ticket):
列名
列名表示
数据类型
宽度
约束
编号
movie_id
number
20
主键
片名
movie_name
varchar2
100
片映日期
movie_date
date
影片时间
movie_time
number
影厅
movie_room
varchar2
20
座位
movie_seat
varchar2
20
票价
movie_price
number
20
手续费
movie_poundage
number
20
售票日期
movie_saledate
date
取票时间
movie_picktime
date
退票表(back_ticket):
列名
列名表示
数据类型
宽度
约束
编号
movie_id
number
20
主键
片名
movie_name
varchar2
100
片映日期
movie_date
date
票价
movie_price
number
20
售票日期
movie_saledate
date
手续费
movie_poundage
number
20
实退金额
movie_refund
number
20
电影票综合表(movie_ticket):
列名
列名表示
数据类型
宽度
约束
编号
movie_id
number
20
主键
片名
movie_name
varchar2
100
片映日期
movie_date
date
影厅
movie_room
varchar2
20
座位
movie_seat
varchar2
20
票价
movie_price
number
20
总票数
all_count
number
20
影片时间
movie_time
number
四、物理结构设计
1、创建表空间
createtablespacemovie_tbs
datafile'D:
\app\other_tablespace\movie_tbs01.dbf'
size32m;
2、在oracle中创建用户movie并使用上面的表空间
createusermovie
identifiedbymovie
defaulttablespacemovie_tbs;
3、给movie用户授权并使用movie用户完成下列步骤
grantcreatesession,dbatomovie;
4、创建各对象表
余票表:
createtableremain_ticket
(
movie_idnumber(20)PRIMARYKEY,
movie_namevarchar2(100),
movie_datedate,
movie_timenumber(20),
movie_roomvarchar2(20),
movie_seatvarchar2(20),
movie_pricenumber(20),
remain_countnumber(20)
);
售票表:
createtablesale_ticket
(
movie_idnumber(20)PRIMARYKEY,
movie_namevarchar2(100),
movie_datedate,
movie_timenumber(20),
movie_roomvarchar2(20),
movie_seatvarchar2(20),
movie_pricenumber(20),
movie_price_getnumber(20),
movie_changenumber(20),
movie_saledatedate,
sale_countnumber(20)
);
订票表:
createtablebook_ticket
(
movie_idnumber(20)PRIMARYKEY,
movie_namevarchar2(100),
movie_datedate,
movie_timenumber(20),
movie_roomvarchar2(20),
movie_seatvarchar2(20),
movie_pricenumber(20),
movie_poundagenumber(20),
movie_saledatedate,
movie_picktimedate
);
退票表:
createtableback_ticket
(
movie_idnumber(20)PRIMARYKEY,
movie_namevarchar2(100),
movie_datedate,
movie_pricenumber(20),
movie_saledatedate,
movie_poundagenumber(20),
movie_refundnumber(20)
);
电影综合表:
createtablemovie_ticket
(
movie_idnumber(20)PRIMARYKEY,
movie_namevarchar2(100),
movie_datedate,
movie_roomvarchar2(20),
movie_seatvarchar2(20),
movie_pricenumber(20),
all_countnumber(20),
movie_timenumber(20)
);
5、创建视图
1)根据余票表中电影片名、余票数、票价和电影综合表中的总票数创建销售视图
createviewsale_condition
as
selectr.movie_name,r.movie_price,r.remain_count,m.all_count
fromremain_ticketr,movie_ticketm;
2)根据售票表中的片名、票价、售票数创建营利视图
createviewget_condition
(片名,票价,售票数,收益)
as
selectmovie_name,movie_price,sale_count,movie_price*sale_count
fromsale_ticket;
3)订票表中已经拿走票的视图
createviewtake_condition
(编号,片名,片映时间,售票时间,取票时间)
as
selectmovie_id,movie_name,movie_date,movie_saledate,to_number(to_char(movie_picktime,'yyyy-mon-dd,hh24:
mi:
ss'))
frombook_ticket
whereto_number(to_char(movie_picktime,'yyyy-mon-dd,hh24:
mi:
ss'))<=to_number(to_char(sysdate,'yyyy-mon-dd,hh24:
mi:
ss'));
4)订票表中未拿走票的视图
createviewuntake_condition
as
selectmovie_id,movie_name,movie_date,movie_saledate,movie_picktime
frombook_ticket
wheremovie_picktime=null;
5)查看当天上映电影的表单(片名、片映时间、影片时间、票价、余票数)
createviewtoday_movie
(片名,片映时间,影片时间,票价,余票数)
asselect
movie_name,to_char(movie_date,'yyyy-mon-dd'),movie_time,movie_price,remain_count
fromremain_ticket
whereto_char(movie_date,'yyyy-mon-dd')=
to_char(sysdate,'yyyy-mon-dd');
6)查看电影票销售排行(片名、片映时间、票价、总票数-余票数、票价*(总票数-余票数))
createviewsale_range
(片名,片映时间,票价,售票数,收益)
asselect
r.movie_name,r.movie_date,r.movie_price,
m.all_count-r.remain_count,r.movie_price*(m.all_count-r.remain_count)
fromremain_ticketr,movie_ticketm;
7)查看已过期的未出售的电影表单(片名、片映时间、票价、余票数)
createviewunsale_condition
(片名,片映时间,票价,余票数)
as
selectmovie_name,to_number(to_char(movie_date,'yyyy-mon-dd,hh24:
mi:
ss')),movie_price,remain_count
fromremain_ticket
whereto_number(to_char(movie_date,'yyyy-mon-dd,hh24:
mi:
ss'))<=to_number(to_char(sysdate,'yyyy-mon-dd,hh24:
mi:
ss'));
6、创建触发器
1)订票表+1的同时,余票表-1
createtriggerbook_ticket_add
afterinsert
ofmovie_id
onbook_ticket
foreachrow
begin
deletefromremain_ticket
whereremain_ticket.movie_id=book_ticket.movie_id;
end;
2)退票表+1的同时,余票表+1,售票表-1
createtriggerback_ticket_add
afterinsert
ofmovie_id
onback_ticketb
foreachrow
begin
selectm.movie_id,m.movie_name,m.movie_date,m.movie_time,m.movie_room,m.movie_seat,m.movie_price
frommovie_ticket
whereb.movie_id=m.movie_id
insertintoremain_ticketvalues
(m.movie_id,m.movie_name,m.movie_date,m.movie_time,m.movie_room,m.movie_seat,m.movie_price,remain_ticket=remain_ticket+1);
deletefromsale_ticket
wheresale_ticket.movie_id=b.movie_id;
end;
3)电影综合表+1的同时,余票表+1
createtriggermovie_ticket_add
afterinsert
onmovie_ticketm
begin
insertintoremain_ticket
(movie_id,movie_name,movie_date,movie_time,movie_room,movie_seat,movie_price,movie_count)
values(m.movie_id,m.movie_name,m.movie_date,m.movie_time,m.movie_room,m.movie_seat,m.movie_price,m.movie_count+1);
end;
7、创建过程
输入一个元素,输出整列的其他信息
createorreplaceproceduremovie_id_lookup
(
p_movie_idinnumber,
p_movie_nameoutmovie_ticket.movie_name%type,
p_movie_dateoutmovie_ticket.movie_date%type,
p_movie_roomoutmovie_ticket.movie_room%type,
p_movie_seatoutmovie_ticket.movie_seat%type,
p_movie_priceoupricemovie_ticket.movie_price%type,
p_all_countoutmovie_ticket.all_count%type,
p_movie_timeoutmovie_ticket.all_count%type
)
as
begin
selectmovie_name,movie_date,movie_room,movie_seat,movie_price,movie_time,all_count
frommovie_ticket
wheremovie_id=p_movie_id;
exception
whenno_data_foundthen
p_movie_name:
='null';
p_movie_date:
='null';
p_movie_room:
='null';
p_movie_seat:
='null';
p_movie_price:
='null';
p_movie_time:
='null';
p_all_count:
='null';
endmovie_id_lookup;
variablenamevarchar2(100);
variablemovie_datedate;
variableroomvarchar2(20);
variableseatvarchar2(20);
variablenamevarchar2(100);
variablepricenumber(20);
variablecountnumber(20);
五、数据库实施
本数据库利用ORACLE的表、视图和触发器等实现电影票售票系统的相应功能。
数据库性能评价:
本数据库只是利用Oracle实现几个基本的功能,实际的数据库还需要更多复杂的功能。
由于较简单,数据库的性能较好,且利于发现错误和进行维护。
六、数据库运行和维护
数据库每个季度(3个月)进行一次全部维护,在本季度结束的时候,对表和数据等进行备份,同时把各个表清空来开始存储下个季度的数据。
这样有利于数据库运行的效率。
同时保证了在以后出现纠纷时可以从备份中查找到相应的数据。
实验结果:
演示数据的输入:
insertintomovie_ticketvalues
('0001','赤壁',date'2010-6-1010:
30:
00','第二影厅','5号','30','150','120');
insertintomovie_ticketvalues
('0002','三国',date'2010-6-1014:
30:
00','第三影厅','10号','25','100','120');
售票:
insertintosale_ticketvalues
('0001','赤壁',date'2010-6-1010:
30:
00','120','第二影厅','5号','30','50','20',date'2010-6-814:
30:
30','1');
订票:
insertintobook_ticketvalues
('0002','三国',date'2010-6-1014:
30:
00','120','第三影厅','10号','25','0',date'2010-6-712:
30:
30',date'2010-6-715:
30:
00');
退票:
insertintosale_ticketvalues
('0001','赤壁',date'2010-6-1010:
30:
00','30',date'2010-6-814:
30:
30','2','28');