公交车路线查询系统后台数据库设计——引入步行路线

在《查询算法》和《关联地名和站点》两篇文章中,已经实现了通过地名或站点进行路线查询的算法 ,但是在现实中,从起点到终点不一定全程都是乘车,例如,有以下3条路线:

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

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

R3: S8->S9->S10

假如现在要从站点S1到S7,如果用Inquiry查询路线,显然没有合适的乘车方案。但是S2和S7相距仅仅 一个站的距离,可以用步行代替,因此可以先从S1乘坐R1到S2再步行到S7。

为了实现在乘车路线中插入步行路线,在数据库使用WalkRoute(StartStop, EndStop, Distance, Remark)(StartStop-起始站点,EndStop-目的站点,Distance-距离,Remark-备注)储存距离较近的两个站点 。

加入表WalkRoute后,查询算法也要作相应的修改,其实WalkRoute和RouteT0很相似,因此只需把 WalkRoute看成是特殊的直达线路即可,修改后的InqueryT1如下:

InquiryT1

/* 

查询站点@StartStops到站点@EndStops之间的一次换乘乘车路线,多个站点用'/'分开,如: 

exec InquiryT1 '站点1/站点2','站点3/站点4' 

*/ 

CREATE proc InquiryT1(@StartStops varchar(32),@EndStops varchar(32)) 

as 

begin 

    declare @ss_tab table(name varchar(32)) 

    declare @es_tab table(name varchar(32)) 

    insert @ss_tab select Value from dbo.SplitString(@StartStops,'/') 

    insert @es_tab select Value from dbo.SplitString(@EndStops,'/') 

    if(exists(select * from @ss_tab sst,@es_tab est where sst.name=est.name)) 

    begin 

        raiserror ('起点集和终点集中含有相同的站点',16,1) 

        return 

    end 

    declare @stops table(name varchar(32)) 

    insert @stops select name from @ss_tab 

    insert @stops select name from @es_tab 

    declare @result table( 

        StartStop varchar(32), 

        Route1 varchar(256), 

        TransStop varchar(32), 

        Route2 varchar(256), 

        EndStop varchar(32), 

        StopCount int 

    ) 

    declare @count int 

    set @count=0 

    --查询"步行-乘车"路线 

    insert @result 

    select  

        sst.name as StartStop, 

        '从'+r1.StartStop+'步行到'+r1.EndStop as Route1, 

        r1.EndStop as TransStop, 

        r2.Route as Route2, 

        est.name as EndStop, 

        r2.StopCount as StopCount 

    from  

        @ss_tab sst, 

        @es_tab est, 

        (select * from WalkRoute where EndStop not in (select name from @stops)) 

r1, 

        RouteT0 r2 

    where 

        sst.name=r1.StartStop 

        and r1.EndStop=r2.StartStop 

        and r2.EndStop=est.name 

    order by r2.StopCount 

    set @count=@@rowcount 

    --查询"乘车-步行"路线 

    insert @result 

    select  

        sst.name as StartStop, 

        r1.Route as Route1, 

        r1.EndStop as TransStop, 

        '从'+r2.StartStop+'步行到'+r2.EndStop as Route2, 

        est.name as EndStop, 

        r1.StopCount as StopCount 

    from  

        @ss_tab sst, 

        @es_tab est, 

        RouteT0 r1, 

        (select * from WalkRoute where StartStop not in (select name from 

@stops)) r2 

    where 

        sst.name=r1.StartStop 

        and r1.EndStop=r2.StartStop 

        and r2.EndStop=est.name 

    order by r1.StopCount 

    set @count=@count+@@rowcount 

     

    if(@count=0) 

    begin 

        --查询"乘车-乘车"路线 

        insert @result 

        select 

            sst.name as StartStop, 

            r1.Route as Route1, 

            r1.EndStop as TransStop, 

            r2.Route as Route2, 

            est.name as EndStop, 

            r1.StopCount+r2.StopCount as StopCount 

        from  

            @ss_tab sst, 

            @es_tab est, 

            (select * from RouteT0 where EndStop not in (select name from 

@stops)) r1, 

            RouteT0 r2 

        where 

            sst.name=r1.StartStop 

            and r1.EndStop=r2.StartStop 

            and r2.EndStop=est.name 

            and r1.Route<>r2.Route 

        order by r1.StopCount+r2.StopCount 

    end 

    select 

        StartStop as 起始站点, 

        Route1 as 路线1, 

        TransStop as 中转站点, 

        Route2 as 路线2, 

        EndStop as 目的站点, 

        StopCount as 总站点数 

    from 

        @result 

end

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索站点
, select
, r-2r
, name
, from
, est
, 路线
, varchar
SplitString
两江四湖步行路线、上海步行路线、步行路线查询、上下九步行街美食路线、西湖最佳步行游览路线,以便于您获取更多的相关知识。

时间: 2024-11-02 01:45:04

公交车路线查询系统后台数据库设计——引入步行路线的相关文章

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

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

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

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

公交车路线查询系统后台数据库设计——换乘算法改进与优化

在<查询算法>一文中已经实现了换乘算法,但是,使用存储过程InquiryT2查询从"东圃镇"到"车 陂路口"的乘车路线时,发现居然用了5分钟才查找出结果,这样的效率显然不适合实际应用.因此,有 必要对原有的换乘算法进行优化和改进.在本文中,将给出一种改进的换乘算法,相比原有的算法,改进 后的算法功能更强,效率更优. 1. "压缩"RouteT0 假设RouteT0有以下几行 如下图所示,当查询S1到S4的二次换乘路线时,将会产生3×2

数据库建模-业务系统系统权限数据库设计问题

问题描述 业务系统系统权限数据库设计问题 本人菜鸟,最近公司正在准备一个新项目,在权限部分的数据库设计上出现了问题. 之前框架的权限部分是基于角色的权限管理,角色与模块和操作多对多关联,关联信息存在中间表里,但是这样做会使中间表数据量非常大,每次登录都去关联各个表查询. 现在还有一个新的方法,就是取消掉模块和操作表,取而代之的是把各个角色的模块和操作权限直接用一条JSON保存到角色表的字段里,这样每次登录只查询角色表把权限JSON拿到后台处理就行了,查询速度是快了,但是如果模块和操作变动的时候就

新闻-教务网站信息发布系统的数据库设计

问题描述 教务网站信息发布系统的数据库设计 教务网站信息发布系统需求分析 一.新闻发布 普通富文本编辑器(百度UEditor等).格式字符经过转义以后储存在数据库中. 允许上传图片.图片采用文件格式储存,不用数据库储存. 允许上传附件(一个),限制格式. 允许自定义排序,采用排序号. 允许设置所属专题. 允许设置标题链接:设置后,点击不进入内容页面,直接进入设置的链接. 置顶方式:采用排序号. 二.栏目管理 只有超级管理员具有栏目管理权限. 新闻最多分为三级栏目.(或者以设置父栏目的形式实现多级

多语言系统的数据库设计

之前做的项目涉及到中国大陆和纽伦新港的用户使用,也就需要做成一个多语言的系统,现在总结下其中一些经验和思考. 首先我们需要确认我们要做的系统,多语言到底是要做多少种语言,以后会不会要求增加更多的语言.比如我们做一个给中国大陆和纽伦新港使用的系统,可以确定的语言就是简体中文.繁体中文和英语,而且可以确定以后也不会增加语言.确定以后是否需要增加语言这一点很重要,决定了我们在数据库设计时,是否需要考虑多语上的扩展性. 先说下在数据库设计时,可以有以下方案实现多语: 一.为每个多语字段建立对应语言的字段

求产品销售系统的数据库设计

问题描述 本人毕业设计题目:产品销售系统.系统要求:系统采用B/S结构的MVC模式,对用户浏览的相关产品提供相关度推荐链接以及相关产品销售情况等介绍.实现商品的各项销售管理功能,包括用户登录,产品分类,价格查询,结算等模块等.求解数据库的设计.

数据库access 2000-VB +++数据库Access学生成绩管理查询系统

问题描述 VB +++数据库Access学生成绩管理查询系统 用数据库Access 2000 .Visual Basic 6.0制作一个类似学生成绩管理查询系统的程序,要求可以使用 有大神帮忙吗,求求!

“一卡通”信息系统数据库设计初步探讨

设计|数据|数据库|数据库设计                               "一卡通"信息系统数据库设计初步探讨                                      福建开普教育设备有限公司 陈优章         引言:卡的应用不外乎就是计费与身份识别之用.所谓"一卡通"就是同一张卡片,每一用户只需要一张卡,在多种不同功能管理中使用.这是用户对系统的基本要求,也是"一卡通"最主要的表现.一卡,并不是一种固定