首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型A与模型B和模型B的关联

模型A与模型B和模型B的关联
EN

Stack Overflow用户
提问于 2016-11-09 19:03:35
回答 1查看 22关注 0票数 1

让我们想象一个公共汽车系统。

下面是简单的部分:

  • 路线有很多方向
  • 车站有很多路线

但是,如果我们需要知道每个车站的具体路线是哪一条呢?把止损点和方向联系起来是不好的做法吗?

  • 停车有很多方向

请注意,停止模型现在直接与路由模型以及方向模型相关联。我觉得这很奇怪,因为路由模型以两种不同的方式与停止模型相关联:直接和间接地通过Direction。

下面是一个图表的尝试:

代码语言:javascript
复制
 Route
 |    \
Stop — Direction

这闻起来对你有坏处吗?

我可以删除“路由”和“停止”之间的关联,因为从技术上讲,我可以通过Route->Direction(s)->Route找到它,但是在许多情况下,我们也想知道哪些路由通过一个停止。明智的程序员是否只选择其中的一种关系?或者两者兼而有之是可以接受的?

EN

回答 1

Stack Overflow用户

发布于 2016-11-11 02:26:22

您没有指定方向是指公共汽车在接近车站时行驶的方向,还是当它离开车站时行驶的方向。拐角上或附近的车站可以从一个方向靠近,然后在另一个方向左转。在设计中,这并不重要,但在根据数据构建路由时,这将是很重要的。

假设您有一个停站表和一个路线表。您所描述的是两者之间的may关系:一个路由由零或多个站点组成,一个停止可能出现在零或多个路由中。

然而,现在,您想要添加方向的混合。这是好的,但你必须记住,“方向”是关系的一个属性。站和路都不能用“指示”来形容。所以交叉桌看起来是这样的:

代码语言:javascript
复制
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个条目。

代码语言:javascript
复制
RouteID StopIncr StopID Direction
     15        1    417 N
     15        2    122 N
     15        3    213 E
     ...
     15        17   122 S
     ...

您需要一个类似于StopIncr的字段,这样您就可以指定路由内的停止顺序:路线的第一站,路线的第二站,等等。

注意,当公共汽车朝相反方向行驶时,122号站是作为第三站和第17站访问的。

更新:--听起来像是“方向”--是stop的一个属性,它指示向该方向行驶的路线正在或可能使用它。可以用一个简单的表来建模。

代码语言:javascript
复制
create table StopDirection(
  StopID    int  not null references Stops( ID ),
  Direction char( 2 ) not null, -- 'N', 'W', 'NW', etc,
  constraint PK_StopDirection( RouteID, Direction )
);

因此,停止可能与一个方向、两个方向或所有方向相关联。

代码语言:javascript
复制
StopID   Direction
    15           N
    15           S
    15           W

所以15号站可供北行、南行和西行路线使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40514179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档