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