2010-04-23 98 views
0

我正在寫的模型火車路線,它們存儲在數據庫中的表[TrainStop]如下應用制定出了一套路線可能的目的地:查詢使用SQL Server 2008

TrainServiceId StationCode StopIndex IsEnabled

因此,給定的列車遵循一條路線,由幾行組成,StopIndex指示順序。我試圖解決的問題是,根據可用的列車服務,說明用戶可以從給定的起始站獲得哪些站點。這將是相對簡單的,但它也可能禁用停止,這意味着用戶無法到達該列車服務停止後的任何目的地。它也有可能是在不同的路由多輛列車可以共享站例如:

列車服務1:A,B,C,d,E

列車服務2:P,Q,B,C,d, R

因此,如果用戶在B,他們可以去C,D,E和R,但是如果D站在任何一項服務上都被禁用,他們只能進入C.如果E站在服務1上被禁用,則用戶可以到達C,D和R.

解決此問題在C#中非常簡單,但我想知道它是否可以在SQL中優雅高效地解決?我正在努力尋找一種方式,爲每條路線排除過去未啓用行的電臺。

+0

你可以給一些樣本輸入和輸出數據嗎? – 2010-04-23 13:08:04

回答

1

我想我可能會這樣設置它。三個表:站

ROUTE
路線

名單

STATION
列表

ROUTEPATH(或航線計劃?)
許多一對多路線和車站之間的表,其中包括StopIndex屬性

站是啓用還是禁用既是單個站的屬性(站關閉),也是路徑路徑的屬性(站之前的站s「站關閉,所以」this「也關閉)。這意味着IsEnabled應該出現在bot和ROUTEPATH表中。

當一個站被禁止:

  • 標記它爲禁用在STATION
  • 標記它爲禁用在ROUTEPATH
  • 對於每個路由含有站,比標誌所有站與StopIndex更大該站點被禁用(後兩個可以作爲一個更新查詢完成)

當要啓用站點時,請反轉該過程。

當一個以上的電臺被禁用時 - 或者更確切地說,當一些但並非所有禁用的電臺再次啓用時,當然會有問題。我認爲這將是更好地使ROUTEPATH的屬性「IsDisabled」,並使它成爲一個整數

  • 零表示不禁止
  • 非零值意味着禁用
  • 遞增它由一個爲每個「站禁用「行動
  • 遞減它通過爲每個‘站啓用’行動

像這樣的系統應該借給本身相對簡單的查詢。

+0

對不起,應該說清楚,這實際上是關於火車在路線上,它是不能停在車站的火車,因此不可能把車站本身標記爲未啓用。 – 2010-04-23 13:23:55

+0

我原來的(如果不是公開說明)的觀點是,「的IsEnabled」意味着不同的事情,不同的實體,並且總體而言,它似乎是最好的計算和當時的表格是申請啓用/禁用所有受影響的條目(而不僅僅是一個)更新了新的信息。我相信這個邏輯應該仍然成立。 – 2010-04-23 13:39:37