您不指定方向是指公交车在接近停车位或离开车站时的行驶方向。在一个角落或附近的停车站可以从一个方向接近,并在另一个方向离开。它在设计中并不重要,但从数据构建路线时,这一点很重要。
假设您有一个停止表和路由表。您所描述的是两者之间的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