【问题标题】:Development of railway enquiry system, how to model Trains, Stations and Stops?开发铁路查询系统,如何对火车、车站和站点进行建模?
【发布时间】:2011-11-25 18:58:35
【问题描述】:

例如,如果我有两列火车 X 和 Y,它们在行驶:

火车.........车站

  • Train-X :通过 Station-A; B站; C站; D站
  • Train-Y :途经 Station-B;站-X; D站;站-Y

如果乘客询问哪些火车以 Station-B 开头?哪些火车以 Station-D 结尾? strong> 那么 Train-X 和 Train-Y 都应该出现在结果中。

【问题讨论】:

  • 同一用户提出的相同问题:stackoverflow.com/questions/8189245/…
  • 为了清楚起见稍微更改了标题和措辞,例如在给定“A 站”的情况下,训练 X 而不是训练 A 作为混淆可能性

标签: mysql database database-design model


【解决方案1】:

我会说你需要三个表才能完成这项工作。

电台:电台ID、名称等

服务:服务 ID、运营商、可能的火车车厢数量等。

Service_Stop:服务ID、站号、车站ID。

然后,您可以使用类似以下的查询来查找停靠在 Station-B 和随后在 Station-D 的服务:

SELECT
    Service_ID
FROM
    Station AS Start_Station
    JOIN Service_Stop AS Start_Stop ON
        Start_Station.Station_ID = Start_Stop.Station_ID
    JOIN Service_Stop AS End_Stop ON
        Start_Stop.Service_ID = End_Stop.Service_ID AND
        Start_Stop.Stop_Number < End_Stop.Stop_Number
    JOIN Station AS End_Station ON
        End_Stop.Station_ID = End_Station.Station_ID AND
        End_Station.Name = "Station-D"
WHERE
    Start_Station.Name = 'Station-B'

【讨论】:

  • 这个服务ID、运营商、帮助的列车数量和服务站点与该路线有什么关系?
  • 我不知道。拥有一个行代表火车旅程的表似乎是明智的,Service_Stop.Service_ID 可以是外键。
  • 查询部分很有用,但我不了解数据库表部分,假设在该站表中,所有站 id 都将被存储,在服务和服务停止时我找不到要存储的内容以及如何通过路线放置中间...
  • Service_Stop 中的每一行代表语句,“服务X 停靠在Station Y,而且Station Y 是服务Z 的第Z 停靠X”。跨度>
【解决方案2】:

我会使用五个表:。

Train: train_id, name   # e.g "The UnionT522"
Station: station_id, name # e.g. "Eggles Place"
Route: route_id, route_name # e.g. "Afternoon special at 4pm" 
RouteStation: route_station_id, route_id, station_id, route_order, begin_flag, end_flag
TrainRoute: train_route_id, train_id, route_id  # e.g. which train (above) is going on which route (above).

所以RouteStation 会知道事情是在给定路线的给定车站开始还是结束。
TrainRoute 会知道火车正在走哪条路线。

【讨论】:

  • 非常感谢这个有用的答案,你能解释一下 begin_flag 和 end_flag 的作用吗?
  • 它与 route_order 结合,因此如果一条路线是 4 个站点,您将有 4 行,1 行将设置 begin_flag(route_order 为 1),接下来的 2 行将没有设置任何标志(route_order 2和3),第4个将设置end_flag(路由顺序4)。这样,您可以使用与此数据结构的适当连接来构建良好的“路线”信息。
  • "未设置标志" -> "未设置标志(或设置为false/N)"
  • Hammerite 的回答更纯粹,我相信它会正常工作。有些人可能会发现我的更具可读性/可维护性。与所有事情一样,“这取决于你要去哪里......”
  • 我将 RouteStation ID 添加到 RouteStation 表中,还将 TrainRouteID 添加到 TrainRoute 表中。这些将是他们的主键。它们也可以在每个表中称为 ID(例如 RubyOnRails 使用该约定)。
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多