Oracle数据库期末作品。
需求分析
功能阐述
- 系统主要分为两类用户,他们相应的操作:
管理员:创建、修改、删除表数据,执行存储过程。
会员:查票、查优惠、查积分、买票与退票。
- 主要功能:购买优惠电影票,并可获得会员积分与使用会员积分。
用例图
功能模块设计
影讯管理模块
- 新片录入:该模块用于添加新的影片信息。
- 修改资料:该模块用于修改已添加的影片信息。
- 删除影片:该模块用于删除现有影片。
- 查询数据:该模块用于查询影片信息。
会员管理模块
- 录入新会员:该模块用于添加新会员。
- 会员充值:该模块用于会员充值。
- 会员查询:该模块用于查询会员信息。
- 会员注销:该模块用于删除现有会员。
- 会员信息修改:该模块用于修改会员信息。
售票管理模块
- 会员购票:该模块用于添加购买特惠影票购买信息。
- 会员取票:该模块用于判断会员是否已取票。
- 盈利统计:该模块用于统计盈利数值。
- 销售统计:该模块用于统计销售量。
退票管理模块
- 会员退票:该模块用于添加退票信息。
- 退票统计:该模块用于统计退票数量。
- 返还金额统计:该模块用于统计退还金额。
折扣管理模块
- 添加优惠信息:该模块用于添加优惠信息。
- 删除优惠信息:该模块用于删除优惠信息。
- 修改优惠信息:该模块用于修改优惠信息。
- 会员积分统计:该模块用于统计会员积分。
- 积分抵扣:该模块用于统计积分抵扣金额。
- 优惠力度:该模块用于计算优惠力度。
数据库设计
数据库概念结构设计
本图涉及四个实体,分别是管理员、会员、电影和特惠影票,通过其之间的联系,E-R图设计如图:
由实体联系分析得到数据库的关系模型:
- 影讯信息(影片ID、片名、上映时间、片长、售价、总票数、余票数)
- 会员信息(会员ID、会员名、会员手机、会员积分、会员余额、入会时间)
- 售票信息(订单号、会员ID、影片ID、购买时间、场次、影厅、座位、售价、实收、取票Flag)
- 退票信息(退单号、会员ID、影片ID、订单号、退票时间、退还金额、退还积分)
- 折扣信息(折扣ID、影片ID、折扣价、获得积分、折扣开始时间、折扣停止时间)
数据库逻辑结构设计
movie_table(影讯表)
表4-1 | |||
---|---|---|---|
列名 | 数据类型 | 是否为空 | 说明 |
movie_id | NUMBER(20) | 否 | 影片编号 主键 |
movie_name | VARCHAR2(100) | 否 | 影片名称 |
movie_date | DATE | 否 | 上映时间 |
movie_time | NUMBER(20) | 否 | 影片时长 |
movie_price | NUMBER(20) | 否 | 影票原价 |
movie_count | NUMBER(20) | 否 | 总票数 |
movie_remain | NUMBER(20) | 否 | 余票数 |
member_table(会员信息表)
表4-2 | |||
---|---|---|---|
列名 | 数据类型 | 是否为空 | 说明 |
member_id | NUMBER(20) | 否 | 会员编号 主键 |
member_name | VARCHAR2(50) | 否 | 会员名 |
member_phone | VARCHAR2(20) | 否 | 联系方式 |
member_point | NUMBER(20) | 否 | 会员积分 |
member_balance | NUMBER(20) | 否 | 会员余额 |
member_date | DATE | 否 | 注册时间 |
sale_table(售票信息表)
表4-3 | |||
---|---|---|---|
列名 | 数据类型 | 是否为空 | 说明 |
sale_id | NUMBER(20) | 否 | 售票编号 主键 |
member_id | NUMBER(20) | 否 | 会员编号 外键 |
movie_id | NUMBER(20) | 否 | 影片编号 外键 |
sale_date | DATE | 否 | 售票时间 |
sale_session | DATE | 否 | 影片场次 |
sale_room | VARCHAR2(50) | 否 | 影厅 |
sale_seat | VARCHAR2(20) | 否 | 座位 |
sale_price | NUMBER(20) | 否 | 售价 |
sale_get | NUMBER(20) | 否 | 实收价 |
sale_flag | CHAR(1) | 否 | 是否取票 |
back_table(退票信息表)
表4-4 | |||
---|---|---|---|
列名 | 数据类型 | 是否为空 | 说明 |
back_id | NUMBER(20) | 否 | 退票编号 主键 |
member_id | NUMBER(20) | 否 | 会员编号 外键 |
movie_id | NUMBER(20) | 否 | 影片编号 外键 |
sale_id | NUMBER(20) | 是 | 售票编号 外键 |
back_date | DATE | 否 | 退票时间 |
back_count | NUMBER(20) | 否 | 退回金额 |
back_point | NUMBER(20) | 否 | 退回积分 |
discount_table(折扣表)
表4-5 | |||
---|---|---|---|
列名 | 数据类型 | 是否为空 | 说明 |
discount_id | NUMBER(20) | 否 | 折扣编号 主键 |
movie_id | NUMBER(20) | 否 | 影片编号 外键 |
discount_count | NUMBER(20) | 否 | 折扣价格 |
discount_point | NUMBER(20) | 否 | 赠送积分数量 |
discount_start | DATE | 否 | 开始时间 |
discount_end | DATE | 否 | 结束时间 |
用户权限以及授权功能
1. 创建表空间
表空间movie_system_tbs:
1 | create tablespace movie_system_tbs |
2. 普通用户的创建和授权
创建管理员用户c##hlr1802设置默认表空间并授权:
1 | create user c##lhr1802 identified by lhr1802 |
创建普通用户c##hlr1802_user设置默认表空间并授权:
1 | create user c##lhr1802_user identified by lhr1802 |
3. 表的创建
3.1 创建影讯表(movie_table)
1 | create table movie_table |
3.2 创建会员表(member_table)
1 | create table member_table |
3.3 创建售票表(sale_table)
1 | create table sale_table |
3.4 创建退票表(back_table)
1 | create table back_table |
3.5 创建折扣表(discount_table)
1 | create table discount_table |
4.表信息的录入
4.1 movie_table表
1 | insert into movie_table values('0001','电影A',to_date('2021-3-12 13:10:00','YYYY-MM-DD HH24:MI:SS'),'120','60','100','98'); |
4.2 member_table表
1 | insert into member_table values('0001','李杭瑞','13300225588','196','90',to_date('2021-01-29 17:20:00','YYYY-MM-DD HH24:MI:SS')); |
4.3 sale_table表
1 | insert into sale_table values('0001','0001','0001',to_date('2021-4-10 13:10:00','YYYY-MM-DD HH24:MI:SS'), |
4.4 back_table表
1 | insert into back_table values('0001','0001','0002','0004',to_date('2021-4-14 19:10:00','YYYY-MM-DD HH24:MI:SS'),'80','8'); |
4.5 discount_table表
1 | insert into discount_table values('0001','0001','30','3',to_date('2021-3-13 15:10:00','YYYY-MM-DD HH24:MI:SS'), |
5. 创建视图
5.1 查询电影余票
1 | create view remain_condition |
5.2 查询各个影片销量
1 | create view sale_condition |
5.3 查询各个影片折扣力度
1 | create view discount_condition |
5.4 查询各个影片收入
1 | create view income_condition |
5.5 查询各个影片退款情况
1 | create view refund_condition |
5.6 统计会员积分与可抵扣的金额
1 | create view point_condition |
5.7 查询会员观影排行
1 | create view rank_condition |
5.8 查询售票表中已取走的票
1 | create view take_condition |
5.9 查询售票表中未取走的票
1 | create view untake_condition |
6. 创建索引
6.1 按照电影信息创建余票降序索引
1 | create index remain_price on movie_table(movie_remain DESC); |
6.2 按照折扣价格创建升序索引
1 | create index discount_price on discount_table(discount_count ASC); |
6.3 按照购票积分创建升序索引
1 | create index give_point on discount_table(discount_point ASC); |
6.4 按照会员积分创建降序索引
1 | create index member_point on member_table(member_point DESC); |
7. 创建触发器
7.1 插入修改或删除影讯后统计当前电影数量
1 | create or replace trigger add_movie |
7.2 修改会员表后显示修改前与修改后信息的差别,插入和删除会员时显示删除的会员卡号和会员名
1 | create or replace trigger modify_member |
7.3 修改售票表后显示修改前与修改后信息的差别
1 | create or replace trigger modify_sale |
7.4 修改退票表后显示修改前与修改后信息的差别
1 | create or replace trigger modify_back |
7.5 购票后显示折扣、获得积分、可抵金额、余额、余票
1 | create or replace trigger buy_ticket |
7.6 退票后显示余额、退款额和退还积分
1 | create or replace trigger back_ticket |
7.7 增改折扣后显示折扣价格
1 | create or replace trigger add_discount |
8. 创建存储过程
8.1 会员充值
1 | create or replace |
8.2 会员购票
1 | create or replace |
8.3 会员退票
1 | create or replace |
8.4 会员取票
1 | create or replace |
8.5 影讯信息增加
1 | create or replace |
8.6 影讯信息删除
1 | create or replace procedure del_movie |
8.7 影讯信息修改
1 | create or replace |
8.8 影讯信息查询
1 | create or replace procedure que_movie( |
8.9 会员信息增加
1 | create or replace |
8.10 会员信息删除
1 | create or replace procedure del_member |
8.11 会员信息修改
1 | create or replace |
8.12 会员信息查询
1 | create or replace procedure que_member( |
8.13 折扣信息增加
1 | create or replace |
8.14 折扣信息删除
1 | create or replace procedure del_discount |
8.15 折扣信息修改
1 | create or replace |
8.16 影讯信息查询
1 | create or replace procedure que_discount( |
8.17 订单信息删除
1 | create or replace procedure del_sale |
8.18 订单信息修改
1 | create or replace |
8.19 订单信息查询
1 | create or replace procedure que_sale( |
8.20 退单信息删除
1 | create or replace procedure del_back |
8.21 退单信息修改
1 | create or replace |
8.22 退单信息查询
1 | create or replace procedure que_back( |
9. 导出
1 | exp system/123456@orcl file=D:\app\lhr.dmp owner=<c##lhr1802>log=D:\app\lhr.log |
设计总结
在这次的实验中,我主要以积分优惠影票销售系统的设计为主,在上面的设计文档中,不仅涉及了表和字段,还涉及到了索引、视图、触发器、存储过程等内容。其中为了提高操作的效率,我主要利用存储过程来完成对表的操作,这使数据库的性能得到了优化。我利用了多种思路来设计这个系统,也利用各种的方法对表进行管理。
在实验过程中,系统功能主要是特惠电影票销售所需要的各种功能来实现的,在改系统的设计上让我们懂得了如何去寻找我们所要的设计的内容,增加了我个人的思维能力,进一步完善了我对oracle数据库的了解,也实现了对数据库的设计,最终成功完成我们自己想要的设计。