您不指定方向是指公交車在接近停車位或離開車站時的行駛方向。在一個角落或附近的停車站可以從一個方向接近,並在另一個方向離開。它在設計中並不重要,但從數據構建路線時,這一點很重要。
假設您有一個停止表和路由表。您所描述的是兩者之間的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可用於北行,南行和西行路線。
感謝您的深思熟慮的答案。但方向是不同的。方向沒有描述巴士停靠的方向。方向描述了在該站點停止的路線。例如,有時東行巴士和西行巴士停在同一地點。但有時候,街道一側的停靠站只適用於東行公交車,而另一側則適用於西行。換句話說,我需要一種方法來回答這個問題:「東行的A線巴士停在這裏嗎?」現在這更清楚了嗎? – emersonthis
@emersonthis我這麼認爲。因此,如果一條街道經過東/西,並且該街道位於街道的北側,則僅適用於西行公共汽車。 – TommCatt
對。有時候是這樣,但其他時候卻不是。所以我需要這個模型足夠靈活以適應這個 – emersonthis