1

讓我們想象一下總線系統。將模型A與模型B和模型B的關聯關聯

這裏是最容易的部分:

  • 路線有很多路線
  • 停止有許多途徑

但是,如果我們需要知道哪些特定的路線指引到每個停止呢?把停靠點和方向聯繫起來是不好的做法?

  • 停止有很多路線

,現在停止模式與路徑模型,直接相關的通知,也與方向模式。這對我來說很奇怪,因爲路線模型通過兩種不同的方式與停靠模型相關聯:直接和間接通過方向。

下面是在圖中的一個嘗試:

Route 
| \ 
Stop — Direction 

這是否臭到你?

可以刪除路由和Stop之間的關聯,因爲在技術上我能找到這個通過Route->Direction(s)->Route但也有一些情況下,我們也想簡單地知道哪個路線經過一個車站。明智的程序員是否只選擇其中一種關係?或者兩者都可以接受?

回答

0

您不指定方向是指公交車在接近停車位或離開車站時的行駛方向。在一個角落或附近的停車站可以從一個方向接近,並在另一個方向離開。它在設計中並不重要,但從數據構建路線時,這一點很重要。

假設您有一個停止表和路由表。您所描述的是兩者之間的m-m關係:路由由零個或多個停靠點組成,並且停止點可能出現在零個或多個路線中。

但是,現在您想要爲混音添加指示。這很好,但你必須記住,「方向」是關係的一個屬性。 「停車」和「路線」都不能用「方向」來描述。因此,交叉表是這樣的:

create table RouteStops(
    RouteID int not null references Routes(ID), 
    StopIncr smallint not null -- Stop #1, stop #2, etc. 
    StopID int not null references Stops(ID), 
    Direction char(2) not null, -- 'N', 'W', 'NW', etc 
    constraint PK_RouteStops primary key(RouteID, StopIncr) 
); 

因此,如果路線#15由31個站的,就在這個表中31項。

RouteID StopIncr StopID Direction 
    15  1 417 N 
    15  2 122 N 
    15  3 213 E 
    ... 
    15  17 122 S 
    ... 

你需要一個像StopIncr一個字段,以便您可以指定路線內的停靠點的順序:路線的第一站,路線的第二站,等

通知停止#122參觀作爲第三站,如果公交車朝相反方向行駛,則爲第17站。

更新: 這聽起來像「方向」是表示這是或者可以通過在該方向前進的路線被用於停止的屬性。這可以通過一個簡單的表格來建模。

create table StopDirection(
    StopID int not null references Stops(ID), 
    Direction char(2) not null, -- 'N', 'W', 'NW', etc, 
    constraint PK_StopDirection(RouteID, Direction) 
); 

因此,停止可能與一個方向,兩個或所有方向相關聯。

StopID Direction 
    15   N 
    15   S 
    15   W 

因此,停靠#15可用於北行,南行和西行路線。

+0

感謝您的深思熟慮的答案。但方向是不同的。方向沒有描述巴士停靠的方向。方向描述了在該站點停止的路線。例如,有時東行巴士和西行巴士停在同一地點。但有時候,街道一側的停靠站只適用於東行公交車,而另一側則適用於西行。換句話說,我需要一種方法來回答這個問題:「東行的A線巴士停在這裏嗎?」現在這更清楚了嗎? – emersonthis

+0

@emersonthis我這麼認爲。因此,如果一條街道經過東/西,並且該街道位於街道的北側,則僅適用於西行公共汽車。 – TommCatt

+0

對。有時候是這樣,但其他時候卻不是。所以我需要這個模型足夠靈活以適應這個 – emersonthis