让我们想象一个公共汽车系统。
下面是简单的部分:
但是,如果我们需要知道每个车站的具体路线是哪一条呢?把止损点和方向联系起来是不好的做法吗?
请注意,停止模型现在直接与路由模型以及方向模型相关联。我觉得这很奇怪,因为路由模型以两种不同的方式与停止模型相关联:直接和间接地通过Direction。
下面是一个图表的尝试:
Route
| \
Stop — Direction这闻起来对你有坏处吗?
我可以删除“路由”和“停止”之间的关联,因为从技术上讲,我可以通过Route->Direction(s)->Route找到它,但是在许多情况下,我们也想知道哪些路由通过一个停止。明智的程序员是否只选择其中的一种关系?或者两者兼而有之是可以接受的?
发布于 2016-11-11 02:26:22
您没有指定方向是指公共汽车在接近车站时行驶的方向,还是当它离开车站时行驶的方向。拐角上或附近的车站可以从一个方向靠近,然后在另一个方向左转。在设计中,这并不重要,但在根据数据构建路由时,这将是很重要的。
假设您有一个停站表和一个路线表。您所描述的是两者之间的may关系:一个路由由零或多个站点组成,一个停止可能出现在零或多个路由中。
然而,现在,您想要添加方向的混合。这是好的,但你必须记住,“方向”是关系的一个属性。站和路都不能用“指示”来形容。所以交叉桌看起来是这样的:
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站访问的。
更新:--听起来像是“方向”--是stop的一个属性,它指示向该方向行驶的路线正在或可能使用它。可以用一个简单的表来建模。
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号站可供北行、南行和西行路线使用。
https://stackoverflow.com/questions/40514179
复制相似问题