火車票訂票系統的數據庫設計與實現(某某樂后端實習面試題)


目的:設計一個車票的數據庫,完成一些基本的查詢、增刪功能。

數據表結構分析;
各個字段分析;
基本數據庫、表的建立,數據錄入;
復雜查詢的實現簡要分析。
 
 
1 數據庫結構分析;
1.1 客戶表
目的:查詢客戶的所有信息。
輸出字段:身份證號(主鍵)、姓名、用戶名、聯系電話、籍貫、類型(學生還是普通)
 
1.2 訂票單表
目的:查詢某一客戶訂單票的信息
輸入in:姓名
輸出:訂單編號,訂票時間,乘車日期,訂票數量
 
1.3車票表
輸出:車次,出發站,目的站,座位類型,座位號,車票價格,發車時間,到站時間
 
 
二、表設計
create database ticketSystem;
use ticketSystem;
表1 客戶表結構
create table users(
id_number varchar(18) primary key,
name varchar(10) not null,
tel char(11),
username varchar(16) not null,
hometown varchar(18),
type varchar(18)
);
insert into users values('522131199901016666','張三','13899998888','zhangsan666','貴州','學生票');
insert into users values('522131199901016667','李四','13899998889','lisi666','重慶','成人票');
 
表2 訂票單表結構
create table orders(
order_number varchar(18) primary key,
order_time varchar(10) not null,
go_date timestamp,
order_counts int(3) not null,
id_number varchar(18) not null
);
 
alter table orders modify order_time timestamp not null;
 
insert into orders values('201904200001','20190401060000','20190501060000','1','522131199901016666');
insert into orders values('201904200002','20190402060000','20190502120000','2','522131199901016667');
insert into orders values('201904200003','20190402060000','20190502101010','2','522131199901016668');
insert into orders values('201904200004', current_time,'20190502120000','2','522131199901016667');
 
表3 車票表
create table tickets(
ticket_id varchar(18) primary key,
train_number varchar(10) not null,
start_station char(11) not null,
arrive_station varchar(16) not null,
seat_type varchar(18) not null,
price varchar(18),
go_time timestamp,
arrive_time timestamp,
type varchar(18),
order_number varchar(18)
);
insert into tickets values('ticket201904200001','Z49','上海','杭州','硬座','20.00','2019-04-20 21:01:00','2019-04-20 22:00:00','成人票','201904200001');
insert into tickets values('ticket201904200002','Z50','嘉興','杭州','硬座','10.00','2019-04-02 21:00:00','2019-04-02 22:00:00','成人票','201904020001');
insert into tickets values('ticket201904200003','Z50','上海','南京','硬座','10.00','2019-04-02 21:00:00','2019-04-02 22:00:00','成人票','201904020004');
insert into tickets values('ticket201904200004','Z50','上海','杭州','硬卧','10.00','2019-04-02 21:00:00','2019-04-02 22:00:00','成人票','201904020005');
insert into tickets values('ticket201904200005','G11','上海','武漢','硬座','10.00','2019-04-02 21:00:00','2019-04-02 22:00:00','成人票','201904020001');
 
三、具體查詢需求分析:
日期處理:arrive_time只需要日期+時分。
建表的時候有五種:
查詢的時候:
需要格式化,DATE_FORMAT(tickets.arrive_time,'%Y%m%d %H:%i:%s'
select date_format(order_time,'%Y-%m-%d %H:%m') order_time from orders;

 

 
主要是車票表的查詢:
(1)需求:查詢所有從上海出發到杭州的火車的車次,起點,終點站,席位,價格,出發時間
select train_number as 車次,
start_station as 起點,
arrive_station as 終點,
seat_type as 席位,
price as 價格,
date_format(go_time,'%Y-%m-%d %H:%m') 出發時間
from tickets
where start_station = '上海'
and
arrive_station = '杭州';

 

type字段顯示為All,沒有用到索引。
 
(2)優化:為了加快查找速度,給始發站和終點站添加復合索引
alter table tickets add index idx_start_arrive(start_station,arrive_station);
type字段為ref,性能優化較好。
 
表結構參考了:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM