Oracle机票预定信息系统数据库设计.docx
《Oracle机票预定信息系统数据库设计.docx》由会员分享,可在线阅读,更多相关《Oracle机票预定信息系统数据库设计.docx(18页珍藏版)》请在冰豆网上搜索。
Oracle机票预定信息系统数据库设计
《数据库原理及应用》课程设计
设计题目机票预订信息系统
系部信息技术工程学院
班级网络1302
学号
姓名
2016年1月
一、需求分析
Ø背景分析
以信息技术为主要标志的科技进步日新月异,高科技成果向现实生产力的转化越来越快。
纵观全球经济发展,信息技术和信息产业已经成为经济增长的主要推动力之一,正在改变着传统的生产和经营方式以至生活方式,发达国家经过产业结构的升级和经济结构的转型已进入信息经济阶段。
机票预订系统也开始影响着人们日常生活和出行,并且变得越来越重要。
而原有的系统随着航空公司载客量的迅猛增长和人们对便捷性要求的提高,已经变得无法满足需求。
原有的系统不仅效率比较低下,而且在安全性、准确性等方面有很多不足。
为了实现航空公司以及旅游行业的现代化管理,进一步提高工作效率,方便旅客,需要开发一个机票预订系统。
Ø需求分析
1)系统功能:
●航班信息的输入,修改查询。
●航班座位信息的输入,修改查询。
●根据旅客输入的基本信息,为旅客安排航班,打印取票通知和帐单。
●旅客在飞机起飞前一天凭取票通知交款取票。
●旅客能够退订机票。
●能够查询每个航班的预定情况、计算航班的满座率。
2)系统信息:
●航班信息:
航班编号、飞机编号、起飞地、目的地、起飞时间、飞行时间等。
●飞机信息:
飞机编号、飞机型号、座位数。
●机票信息:
航班编号、旅客编号、座位号、票价等。
●旅客信息:
姓名、性别、联系电话、身份证号等。
3)数据流图:
工作人员
编辑航班
飞机表
航班表
机票表
用户表
账单表
旅客
机票操作
用户信息编辑
账单操作
4)数据字典:
根据总体结构图设计机票预定系统基本表结构,其相应标的定义如下:
表4-1飞机信息
字段名称
类型
长度
是否非空
主关键字
备注
plain_id
VARCHAR2
10
Y
飞机编号
model
VARCHAR2
10
N
飞机型号
seat
int
2
N
总座位
表4-2航班信息
字段名称
类型
长度
是否非空
主关键字
备注
flight_id
VARCHAR2
10
Y
航班编号
plain_id
VARCHAR2
10
N
飞机编号
start
VARCHAR2
10
N
起飞地
end
VARCHAR2
10
N
目的地
departure_time
datetime
N
起飞时间
duration
int
4
N
飞行时间
表4-3机票信息
字段名称
类型
长度
是否非空
主关键字
备注
tickets_id
VARCHAR2
10
Y
机票编号
flight_id
VARCHAR2
10
Y
航班编号
traveler_id
VARCHAR2
10
N
旅客编号
seating_list
int
4
N
座位号
cabin_rating
VARCHAR2
10
N
机舱等级
updata_time
datetime
N
更新时间
status
int
10
N
状态
表4-4旅客信息
字段名称
类型
长度
是否非空
主关键字
备注
traveler_id
VARCHAR2
10
Y
旅客编号
name
VARCHAR2
10
N
姓名
sex
int
1
N
性别
id_value
VARCHAR2
20
N
身份证号
phone
VARCHAR2
11
N
联系方式
表4-5账单信息
字段名称
类型
长度
是否非空
主关键字
备注
bill_id
VARCHAR2
10
Y
账单编号
traveler_id
VARCHAR2
10
Y
旅客编号
tickets_id
VARCHAR2
10
Y
机票编号
payment
float
(2)
N
N
价格
updata_time
datetime
N
更新时间
status
int
4
N
付款状态
二、结构设计
ØE-R图
根据需求分析抽象出信息结构,可得该系统的E-R图。
飞机E-R图,如图4-1所示。
图4-1飞机E-R图
航班E-R图,如图4-2所示。
图4-2航班E-R图
机票E-R图,如图4-3所示。
图4-3机票E-R图
旅客E-R图,如图4-4所示。
图4-4旅客E-R图
账单E-R图,如图4-5所示。
图4-5账单E-R图
航班坐位E-R图,如图4-6所示。
图4-6航班坐位E-R图
取票通知E-R图,如图4-7所示。
图4-7取票通知E-R图
总E-R图,如图4-8所示。
图4-8总E-R图
Ø关系模式
基本表
飞机信息表(飞机编号、飞机型号、飞机座位)
航班信息表(航班编号、飞机编号、起飞地、目的地、起飞时间、飞行时间)
机票信息表(机票编号、航班编号、旅客编号、机舱等级、座位号、更新时间、状态)
旅客信息表(旅客编号、姓名、性别、联系电话、身份证号)
账单表(账单编号、旅客编号、机票编号、价格、更新时间、状态)
虚表(视图)
航班坐位情况表(机票信息表.航班编号、机票信息表.座位号、机票信息表.状态)
取票通知表(机票信息表.航班编号、机票信息表.旅客编号、机票信息表.座位号、机票信息表.状态)
三、数据库实现
Ø创建表空间与赋权限
createtemporarytablespaceHKSP_TEMP
tempfile'C:
\oraclexe\app\oracle\oradata\XE\HKSP_TEMP.dbf'
size50M
autoextendon
next50Mmaxsize1048M
extentmanagementlocal;
createtablespaceHKSP_DATA
atafile'C:
\oraclexe\app\oracle\oradata\XE\HKSP_DATA.dbf'
size50M
autoextendon
next50Mmaxsize1048M
extentmanagementlocal;
createuserHKSPidentifiedby123456
defaulttablespaceHKSP_DATA
temporarytablespaceHKSP_TEMP;
grantconnect,resource,dbatoHKSP;
Ø飞机信息表建立
CREATETABLE"HKSP"."plain"(
"plain_id"VARCHAR2(10BYTE)NOTNULLprimarykey,
"model"VARCHAR2(10BYTE)NOTNULL,
"seat"NUMBERNOTNULL
)
Ø航班信息表建立
CREATETABLE"HKSP"."flight"(
"flight_id"VARCHAR2(10BYTE)NOTNULLprimarykey,
"plain_id"VARCHAR2(10BYTE)NOTNULL,
"start"VARCHAR2(20BYTE)NOTNULL,
"end"VARCHAR2(20BYTE)NOTNULL,
"departure_time"DATENOTNULL,
"duration"NUMBERNOTNULL
)
Ø机票信息表建立
CREATETABLE"HKSP"."tickets"(
"tickets_id"VARCHAR2(10BYTE)NOTNULLprimarykey,
"flight_id"VARCHAR2(10BYTE)NOTNULL,
"traveler_id"VARCHAR2(10BYTE)NOTNULL,
"seating_list"NUMBERNOTNULL,
"cabin_rating"VARCHAR2(10BYTE)NOTNULL,
"updata_time"DATENOTNULL,
"status"NUMBERNOTNULL
)
Ø旅客信息表建立
CREATETABLE"HKSP"."traveler"(
"traveler_id"VARCHAR2(10BYTE)NOTNULLprimarykey,
"name"VARCHAR2(10BYTE)NOTNULL,
"sex"NUMBERNOTNULL,
"id_value"VARCHAR2(20BYTE)NOTNULL,
"phone"VARCHAR2(11BYTE)NOTNULL
)
Ø账单信息表建立
CREATETABLE"HKSP"."bill"(
"bill_id"VARCHAR2(10BYTE)NOTNULLprimarykey,
"traveler_id"VARCHAR2(10BYTE)NOTNULL,
"tickets_id"VARCHAR2(10BYTE)NOTNULL,
"payment"FLOAT(10)NOTNULL,
"updata_time"DATENOTNULL,
"status"NUMBERNOTNULL
)
Ø航班坐位视图
CREATEORREPLACEFORCEVIEW"HKSP"."seating_view"AS
SELECT
HKSP."tickets"."flight_id",
HKSP."tickets"."seating_list",
HKSP."tickets"."status"
FROM
HKSP."tickets";
Ø取票通知视图
CREATEORREPLACEFORCEVIEW"HKSP"."notice_view"AS
SELECT
HKSP."tickets"."flight_id",
HKSP."tickets"."traveler_id",
HKSP."tickets"."status"
FROM
HKSP."tickets"
WHERE
HKSP."tickets"."status"=2;
Ø外键语句
ALTERTABLE"HKSP"."bill"ADDFOREIGNKEY("traveler_id")
REFERENCES"HKSP"."traveler"("traveler_id")ONDELETECASCADE;
ALTERTABLE"HKSP"."bill"ADDFOREIGNKEY("tickets_id")
REFERENCES"HKSP"."tickets"("tickets_id")ONDELETECASCADE;
ALTERTABLE"HKSP"."flight"ADDFOREIGNKEY("plain_id")
REFERENCES"HKSP"."plain"("plain_id")ONDELETECASCADE;
ALTERTABLE"HKSP"."tickets"ADDFOREIGNKEY("traveler_id")
REFERENCES"HKSP"."traveler"("traveler_id")ONDELETECASCADE;
四、数据库实施
Ø添加飞机
INSERTINTO"HKSP"."plain"VALUES('F-T1235','T12306','100');
INSERTINTO"HKSP"."plain"VALUES('F-T1236','T12306','100');
INSERTINTO"HKSP"."plain"VALUES('F-T1237','T12306','100');
INSERTINTO"HKSP"."plain"VALUES('F-T1234','T12306','100');
Ø添加航班
INSERTINTO"HKSP"."flight"VALUES('MH370','F-T1235','北京','马来西亚',TO_DATE('2016-01-1810:
12:
09','YYYY-MM-DDHH24:
MI:
SS'),'5');
INSERTINTO"HKSP"."flight"VALUES('MH371','F-T1236','北京','西安',TO_DATE('2016-01-1909:
20:
13','YYYY-MM-DDHH24:
MI:
SS'),'4');
INSERTINTO"HKSP"."flight"VALUES('MH372','F-T1237','北京,'上海',TO_DATE('2016-01-2020:
14:
17','YYYY-MM-DDHH24:
MI:
SS'),'11');
INSERTINTO"HKSP"."flight"VALUES('MH373','F-T1234','北京','杭州',TO_DATE('2016-01-1905:
29:
21','YYYY-MM-DDHH24:
MI:
SS'),'3');
Ø添加用户
INSERTINTO"HKSP"."traveler"VALUES('LK00001','小明','1','140522199311111111','123456781');
INSERTINTO"HKSP"."traveler"VALUES('LK00002','小红','2','140522199311111112','123456782');
INSERTINTO"HKSP"."traveler"VALUES('LK00003','小芳','2','140522199311111113','123456783');
INSERTINTO"HKSP"."traveler"VALUES('LK00004','小小','1','140522199311111114','123456784');
INSERTINTO"HKSP"."traveler"VALUES('LK00005','小亮','1','140522199311111115','123456785');
INSERTINTO"HKSP"."traveler"VALUES('LK00006','小心','2','140522199311111116','123456786');
Ø预定机票(存储过程)
CREATEORREPLACE
PROCEDUREbook_tickets(flight_idINVARCHAR2,traveler_idINVARCHAR2,seatingINNUMBER)
AS
ticketsid"tickets"."tickets_id"%TYPE;
test_ticketsidNUMBER;
test_cabin"tickets"."cabin_rating"%TYPE;
tempvarchar(32);
test_valueNUMBER:
=0;
BEGIN
--生成机票ID
temp:
=sys_guid();
ticketsid:
=substr(temp,1,6)||substr(temp,28,4);
--测试座位是否被预定
SELECTcount(*)INTOtest_ticketsid
FROM"tickets"
WHERE"seating_list"=seating;
--查看结果
IFtest_ticketsid=0THEN
--座位未被预定
--判断仓位等级
test_value:
=seating/10;
CASE
WHENtest_value<1THEN
test_cabin:
='商务舱';
WHENtest_value<2THEN
test_cabin:
='二等舱';
ELSE
BEGIN
test_cabin:
='经济舱';
END;
ENDCASE;
--预定机票
INSERTINTO"HKSP"."tickets"VALUES(ticketsid,flight_id,traveler_id,seating,test_cabin,SYSDATE,1);
DBMS_OUTPUT.PUT_LINE('预定成功');
ELSE
--座位已被预定
DBMS_OUTPUT.PUT_LINE('座位已被预定');
ENDIF;
END;
Ø打印取票通知(存储函数)
CREATEORREPLACE
FUNCTIONget_voucher(flight_idINVARCHAR2,traveler_idINVARCHAR2)
RETURNVARCHAR2
AS
test_tickets"tickets"."tickets_id"%TYPE;
BEGIN
--获得机票ID
SELECT"tickets"."tickets_id"INTOtest_tickets
FROM"tickets"
WHERE"flight_id"=flight_idAND"traveler_id"=traveler_id;
--更新状态
UPDATE"tickets"SET"status"=2
WHERE"tickets"."tickets_id"=test_tickets;
--返回机票ID
RETURNtest_tickets;
EXCEPTION
WHENOTHERSTHEN
RETURN'你没有预定机票';
END;
Ø生成账单(触发器和存储过程)
――插入账单 存储过程
CREATEORREPLACE
PROCEDUREinsert_bill(traveler_idINVARCHAR2,tickets_idINVARCHAR2,statusINNUMBER)
AS
tempvarchar2(32);
uuidvarchar2(10);
BEGIN
temp:
=sys_guid();
uuid:
=substr(temp,1,10);
IFstatus=2THEN
INSERTINTO"HKSP"."bill"("bill_id","traveler_id","tickets_id","payment","updata_time","status")VALUES(uuid,traveler_id,tickets_id,100,SYSDATE,1);
ENDIF;
END;
――机票状态触发器
CREATEORREPLACETRIGGERbill_add
AFTERUPDATEOF"status"ON"HKSP"."tickets"
FOREACHROW
BEGIN
INSERT_BILL(:
OLD."traveler_id",:
OLD."tickets_id",:
NEW."status");
END;
五、总结
经过一周的努力,本次课程设计终于完成了。
通过这次课程设计,我对数据库这门课程有了更深入的理解,数据库是一门实践性较强的课程,同时我明白了理论与实际应用相结合的重要性,掌握并熟练运用SQL语句,提高了我的综合运用所学知识的能力。
1.独立创建表空间,创建用户,并赋予权限。
2.创建表,指定主键,指定外键。
3.Select,include,update,delect等语句的使用。
4.存储过程,存储函数,触发器的使用。
5.对数据库的创建过程有了一个系统的理解。
在本次课程设计和过程中,由于时间不是很长,再加上要求独立完成,系统需求分析上可能不是很全面,程序中还存在很多缺,希望老师能给予批评和指导。
经过这次课程设计,我的知识得到了很大,经验也更加丰富。
希望能在今后的不断的学习中和努力中,把程序做得更好。
最后,感谢指导老师给予的帮助。