公交車路線查詢系統後台資料庫設計 查詢演算法

2022-02-20 17:42:20 字數 4239 閱讀 6042

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:

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)直達路線檢視

直達路線檢視可以理解為一張儲存了所有直達路線的表(如果兩個站點之間存在直達路線,那麼在直達路線檢視中就有一行與之相對應)。例如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

同理可以得到二次換乘的查詢語句

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 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...