《2022年公交路线查询系统数据库设计方案.docx》由会员分享,可在线阅读,更多相关《2022年公交路线查询系统数据库设计方案.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源StopRoutePositionS1R11S2R12S3R13S4R14S5R15S6R21S7R22S2R23S8R24S8R31S9R32S10R331.公交车路线信息在数据库中的存储方式明显,假如在数据库中简洁的使用表bus_route路线名 ,路线经过的站点 ,费用来储存公交车路线的线路信息,就很难使用查询语句实现乘车线路查询,因此,应当对线路的信息进行处理后再储存到数据库中,考试大使用的方法是用站点路线关系表 stop_route站点 ,路线名 ,站点在路线中的位置以下 3条路线R1:S1-S2-S3-S4-S5 R2:S6-S7-S2-S8R3:S8-S9-S10-来
2、储备公交车路线,例如,假如有就对应的站点 -路线关系表 stop_route为注: Stop为站点名, Route为路线名, Position 为站点在路线中的位置2.直达乘车路线查询算法基于表 stop_route可以很便利实现直达乘车路线的查询,以下是用于查询直达乘车路线的储备过程 InquiryT0 :createprocInquiryT0StartStopvarchar32,EndStopvarchar32 asbeginselectsr1.Stopas启始站点 ,sr2.Stopas目的站点 ,sr1.Routeas乘坐线路 , sr2.Position-sr1.Positionas
3、经过的站点数fromstop_routesr1,stop_routesr2where sr1.Route=sr2.Routeandsr1.Position直达路线视图直达路线视图可以懂得为一张储备了全部直达路线的表假如两个站点之间存在直达路线, 那么在直达路线视图中就有一行与之相对应createviewRouteT0 asselectsr1.StopasStartStop,-启始站点sr2.StopasEndStop,-目的站点sr1.RouteasRoute,-乘坐线路sr2.Position-sr1.PositionasStopCount-经过的站点数fromstop_routesr1,s
4、top_routesr2where sr1.Route=sr2.Routeandsr1.Position换乘路线算法明显,一条换乘路线由如干段直达路线组成,因此,基于直达路线视图RouteT0 可以很便利实现换乘查询,以下是实现一次换乘查询的储备过程InquiryT1 :createprocInquiryT1StartStopvarchar32,EndStopvarchar32 asbegin selectr1.StartStopas启始站点 ,r1.Routeas乘坐路线 1,r1.EndStopas中转站点 ,r2.Routeas乘坐路线 2,r2.EndStopas目的站点 ,r1.St
5、opCount+r2.StopCountas总站点数fromRouteT0r1,RouteT0r2where r1.StartStop=StartStopandr1.EndStop=r2.StartStopandr2.EndStop=EndStopend同理可以得到二次换乘的查询语句createprocInquiryT2StartStopvarchar32,EndStopvarchar32 as欢迎下载精品学习资源beginselectr1.StartStopas启始站点 ,r1.Routeas乘坐路线 1,r1.EndStopas中转站点 1,r2.Routeas乘坐路线 2,r2.EndS
6、topas中转站点 2,r3.Routeasr3.EndStopas乘坐路线 3,目的站点 ,r1.StopCount+r2.StopCount+r3.StopCountas总站点数fromRouteT0r1,RouteT0r2,RouteT0r3wherer1.StartStop=StartStopandr1.EndStop=r2.StartStopandr2.EndStop=r3.StartStopandr3.EndStop=EndStopend3.测试execInquiryT0 S1 , S2execInquiryT1 S1 , S8execInquiryT2 S1 , S9运行结果 :
7、那么有没有方法可以提高挑选第2 段路线的效率呢?答案是确定的;只需把GRouteT0 改成实表,并创建索引就行了;修改成实表后,就不需要把第2 段路线缓存到暂时表 #R2 中,修改后的 GInquiryT2 重命名为 GInquiryT2_1如下:GInquiryT2_1/*查询站点 StartStops到站点 EndStops之间的二次换乘乘车路线,多个站点用/ 分开,结果以分组欢迎下载精品学习资源方式给出,如:execGInquiryT2_1站点1/站点2,站点3/站点4*/CREATEprocGInquiryT2_1StartStopsvarchar2048,EndStopsvarcha
8、r2048as begindeclaress_tabtableStopKeyintdeclarees_tabtableStopKeyintinsertss_tabselectdistinctStop.StopKey fromdbo.SplitStringStartStops,/sn,Stopwheresn.Value=Stop.StopNameinsertes_tabselectdistinctStop.StopKey fromdbo.SplitStringEndStops,/sn,Stopwheresn.Value=Stop.StopNameifexistsselecttop1*fromss
9、_tabsst,es_tabestwhere sst.StopKey=est.StopKeybegin raiserror起 点 集 和 终 点 集 中 含 有 相 同 的 站 点 ,16,1returnenddeclarestopstableStopKeyintinsertstopsselectStopKeyfromss_tabinsertstopsselectStopKeyfromes_tab欢迎下载精品学习资源print=print筛选 出 第 1 段 乘 车路线 printsetstatisticstimeon-筛 选 出 第 1段 乘 车 路 线 , 保 存 到 临 时 表 #R1中
10、select*into#R1fromGRouteT0where StartStopKeyinselectStopKeyfromss_tabandEndStopKeynotinSelectStopKeyfromstopsorderbyStartStopKey,EndStopKey-在临时表#R1上创建索引createindexindex1on#R1StartStopKey,EndStopKeysetstatisticstimeoff print=print筛选 出 第 3 段 乘 车路线 printsetstatisticstimeon欢迎下载精品学习资源-筛 选 出 第 3段 乘 车 路 线
11、, 保 存 到 临 时 表 #R3中select*into#R3fromGRouteT0where EndStopKeyinselectStopKeyfromes_tabandStartStopKeynotinSelectStopKeyfromstops orderbyStartStopKey,EndStopKey-在临时表上创建索引createindexindex1on#R3StartStopKey,EndStopKeysetstatisticstimeoff print=print二次换乘查询printsetstatisticstimeon-二次换乘查询selectss.StopNamea
12、s起点, dbo.JoinRouteres.StartStopKey,res.TransStopKey1as路 线 1,欢迎下载精品学习资源ts1.StopNameas中转站1, dbo.JoinRouteres.TransStopKey1,res.TransStopKey2as路 线 2, ts2.StopNameas中转站2, dbo.JoinRouteres.TransStopKey2,res.EndStopKeyas路 线 3,es.StopNameas终点,MinStopCountfrom-查询出 站 点数 最少 的10组路线selecttop10r1.StartStopKeyasS
13、tartStopKey,r2.StartStopKeyasTransStopKey1,r2.EndStopKeyasTransStopKey2,r3.EndStopKeyasEndStopKey,r1.MinStopCount+r2.MinStopCount+r3.MinStopCountasMinStopCountfrom#R1r1,GRouteT0r2,#R3r3 wherer1.EndStopKey=r2.StartStopKeyandr2.EndStopKey=r3.StartStopKeyorderbyr1.MinStopCount+r2.MinStopCount+r3.MinStopCountascres,Stopss,Stopes,Stopts1,Stopts2whereres.StartStopKey=ss.StopKeyandres.EndStopKey=es.StopKeyand欢迎下载精品学习资源res.TransStopKey1=ts1.StopKeyandres.TransStopKey2=ts2.StopKeysetstatisticstimeoffprint=end欢迎下载