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
s1r11s2
r12s3r13s4
r14s5r15s6
r21s7r22s2
r23s8r24s8
r31s9r3
2s10r33
注:stop為站點名,route為路線名,position為站點在路線中的位置
2.直達乘車路線查詢演算法
基於表stop_route可以很方便實現直達乘車路線的查詢,以下是用於查詢直達乘車路線的儲存過程inquiryt0:
create3.查詢換乘路線演算法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
(1)直達路線檢視
直達路線檢視可以理解為一張儲存了所有直達路線的表(如果兩個站點之間存在直達路線,那麼在直達路線檢視中就有一行與之相對應)。例如r1,r2,r3對應的routet0如下:
起點
終點
乘坐路線
站點數
s3s4
r1s3
s5r1
s4s5
r1s1
s2r1
s1s3
r1s1
s4r1
s1s5
r1s2
s3r1
s2s4
r1s2
s5r1
s2s8
r2s6
s2r2
s6s7
r2s6
s8r2
s7s2
r2s7
s8r2
s8s10
r3s8
s9r3
s9s10
r3routet0定義如下:
create同理可以得到二次換乘的查詢語句view
routet0
asselect
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
create4.測試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
exec inquiryt0 's1','s2'
exec inquiryt1 's1','s8'
exec inquiryt2 's1','s9'
執行結果:
公交車路線查詢系統後台資料庫設計 引入步行路線
公交車路線查詢系統後台資料庫設計系列文章 該資料庫已經輸入了廣州市350條公交車路線作為測試資料 在 查詢演算法 和 關聯地名和站點 兩篇文章中,已經實現了通過地名或站點進行路線查詢的演算法,但是在現實中,從起點到終點不一定全程都是乘車,例如,有以下3條路線 r1 s1 s2 s3 s4 s5 r2...
Vue實現後台資料庫的增刪查改
2020 8 21 今天在公司早上接觸vue實現後台資料庫的增刪查改,比之前更高效,尤其是遍歷查詢,少快速 ajax載入學生 function loadstudentall function data return sitems ajax載入班級 function loadclassesall fu...
簡易個人部落格系統純後台開發(二資料庫設計)
1 user 2 blog 3 class blog分類 4 user class user對應的blog分類 建表語句如下 mysql backup source server version 8.0.15 source database myblog date 2019 3 5 18 06 25...