我要在数据库中实现一个功能:查询每个航班的预定情况、统计航班的满座率,旅客能够退订机票;旅客进行机票预定时,输入旅客基本信息,系统为旅客安排航班;
我写的代码如下:
create database 机票预订系统
use 机票预订系统
go
--创建航班信息表
create table 航班信息
(
航班号 char(20)primary key,
起飞时间 char(20) not null,
到达时间 char(20) not null,
出发地 char(30)not null,
目的地 char(30)not null
)
--创建机票信息表
create table 机票信息
(
航班号 char(20),
座位号 int,
座位信息 char(2) not null,
机票类型 varchar(50) not null,
机票价格 int not null,
primary key(航班号,座位号)
)
alter table 机票信息
add constraint 已订座位信息
check (座位信息 in('有','无'))
--创建旅客信息表
create table 旅客信息
(
旅客姓名 varchar(10) not null,
身份证号 varchar(50) primary key,
性别 char(10) check (性别 in('男','女')),
电话 char(20)not null
)
--创建订、取票信息表
create table 取票信息
(
旅客姓名 varchar(10) not null,
身份证号 varchar(50),
航班号 char(20),
座位号 int not null,
取票时间 char(20) not null,
订单号 varchar(20) not null,
primary key(航班号,身份证号)
)
--创建退票信息表
create table 退票信息
(
旅客姓名 varchar(10) not null,
订单号 varchar(20) primary key ,
身份证号 varchar(50),
电话 char(20) not null
)
--插入信息
insert into 航班信息 (航班号,起飞时间,到达时间,出发地,目的地)
values ('20131217','12-17-17:13','12-17-17:18','北京','广州')
--创建订票触发器
create trigger 订票 on 取票信息 for insert
as
begin
create table 旅客订票
(
旅客姓名 char(10),
航班号 char(20)
)
insert into 旅客订票(旅客姓名,航班号) select 旅客姓名,航班号 from 取票信息
end
--订票触发事件
create trigger 退票 on 取票信息 for delete
as
begin
declare @订单号1 varchar(20)
select @订单号1=订单号 from 取票信息
delete from 退票信息 where 订单号=@订单号1
end
--创建存储过程
create proc 航班
@旅客姓名 char(10),
@航班号 char(20) output,
@座位号 int output
as
begin
select *from 取票信息 where 旅客姓名=@旅客姓名
select @航班号=航班号 from 取票信息 where 旅客姓名=@旅客姓名
select @座位号=座位号 from 取票信息 where 旅客姓名=@旅客姓名
end
--执行存储过程
declare @x char(10),@y int
execute 航班'张三',@x output ,@y output
select @x as 航班号 , @y as 座位号
取票信息,旅客订票,退票信息 是否可以统一为 订单信息 呢
触发器和存储过程有什么冲突?
这几张表要求不能统一
需要通过表的级联 以及触发器去实现上述功能
所谓的触发器:让开发人员偷懒,满足条件就自动执行.
最简单的方案 建议做一个触发流程图.用事务完成.直接写在代码里面.