公交车路线查询系统后台数据库设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

公交车路线查询系统后台数据库设计--查询算法

1. 公交车路线信息在数据库中的存储方式

显然,如果在数据库中简单的使用表bus_route(路线名,路线经过的站点,费用)来保存公交车路线的线路信息,则很难使用查询语句实现乘车线路查询,因此,应该对线路的信息进行处理后再保存到数据库中,笔者使用的方法是用站点-路线关系表stop_route(站点,路线名,站点在路线中的位置)来存储公交车路线,例如,如果有以下3条路线

R1: S1->S2->S3->S4->S5

R2: S6->S7->S2->S8

R3: S8->S9->S10

则对应的站点-路线关系表stop_route为

注:Stop为站点名,Route为路线名,Position为站点在路线中的位置

2.直达乘车路线查询算法

基于表stop_route可以很方便实现直达乘车路线的查询,以下是用于查询直达乘车路线的存储过程InquiryT0:

create proc InquiryT0(@StartStop varchar(32),@EndStop varchar(32)) as

begin

select

sr1.Stop as 启始站点,

sr2.Stop as 目的站点,

sr1.Route as 乘坐线路,

sr2.Position-sr1.Position as 经过的站点数

from

stop_route sr1,

stop_route sr2

where

sr1.Route=sr2.Route

and sr1.Position

and sr1.Stop=@StartStop

and sr2.Stop=@EndStop

end

3.查询换乘路线算法

(1)直达路线视图

直达路线视图可以理解为一张存储了所有直达路线的表(如果两个站点之间存在直达路线,那么在直达路线视图中就有一行与之相对应)。例如R1,R2,R3对应的RouteT0如下:

RouteT0定义如下:

create view RouteT0

as

select

sr1.Stop as StartStop, --启始站点

sr2.Stop as EndStop, --目的站点

sr1.Route as Route, --乘坐线路

sr2.Position-sr1.Position as StopCount --经过的站点数

from

stop_route sr1,

stop_route sr2

where

sr1.Route=sr2.Route

and sr1.Position

(2)换乘路线算法

显然,一条换乘路线由若干段直达路线组成(每段路线的终点与下一段路线的起点相同),因此,基于直达路线视图RouteT0可以很方便实现换乘查询,以下是实现一次换乘查询的存储过程InquiryT1:

create proc InquiryT1(@StartStop varchar(32),@EndStop varchar(32)) as

begin

select

r1.StartStop as 启始站点,

r1.Route as 乘坐路线1,

r1.EndStop as 中转站点,

r2.Route as 乘坐路线2,

r2.EndStop as 目的站点,

r1.StopCount+r2.StopCount as 总站点数

from

RouteT0 r1,

RouteT0 r2

where

r1.StartStop=@StartStop

and r1.EndStop=r2.StartStop

and r2.EndStop=@EndStop

end

同理可以得到二次换乘的查询语句

create proc InquiryT2(@StartStop varchar(32),@EndStop varchar(32)) as

begin

select

r1.StartStop as 启始站点,

r1.Route as 乘坐路线1,

r1.EndStop as 中转站点1,

r2.Route as 乘坐路线2,

r2.EndStop as 中转站点2,

r3.Route as 乘坐路线3,

r3.EndStop as 目的站点,

r1.StopCount+r2.StopCount+r3.StopCount as 总站点数

from

RouteT0 r1,

RouteT0 r2,

RouteT0 r3

where

r1.StartStop=@StartStop

and r1.EndStop=r2.StartStop

and r2.EndStop=r3.StartStop

and r3.EndStop=@EndStop

end

4.测试

exec InquiryT1 'S1','S8'

exec InquiryT2 'S1','S9'

运行结果:

公交车路线查询系统后台数据库设计--关联地名和站点

在《公交车路线查询系统后台数据库设计——查询算法》一文中,已经实现了查询站点到站点的路线查询算法,但是,现实中用户不一定使用站点进行查询,而是使用地名。因此,公交车查询系统数据库必需记录地名与站点的对应关系,在查询时将地名映射为站点。根据实际情况,某一地点附近通常有几个站点,因此,地名与站点之间是多对多的关系。显然,只需创建一个地名站点关系表stop_spot(Stop,Spot)用于储存这个关系即可。数据库关系图如下:

相关文档
最新文档