用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - sql代码库

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

2013-05-01 作者: 行者无疆举报

[sql]代码库

1、数据库设计
stop_route(站点,路线名,站点在路线中的位置)
例如:如果有以下3条路线
R1: S1->S2->S3->S6->S4
则对应的关系表stop_route为
Stop  Route  Position
S1     R1       1
S2     R1       2
S3     R1       3
S6     R1       4
S4     R1       5

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<sr2.Position
        and sr1.Stop=@StartStop
        and sr2.Stop=@EndStop
end

3.查询换乘路线算法
 (1)直达路线视图
直达路线视图可以理解为一张存储了所有直达路线的表(如果两个站点之间存在直达路线,那么在直达路线视图中就有一行与之相对应)。
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<sr2.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 


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...