我正在使用 SQL 设计公交车时刻表。每条巴士路线都有多个站点,我是否需要为每条路线准备不同的表?
题
我正在尝试提出尽可能最有效的数据库。我的巴士路线大约有 10 个站点。巴士从一号站出发,直到到达第十站,然后再返回。这个循环每天发生3次。
我真的很困惑如何有效地生成公交车的时间以及应该在哪里存储站点。如果我将所有停靠点放在一个字段中,将时间放在另一字段中,数据库将不会非常动态。
如果我将所有停靠点逐个存储在一列中,然后将时间存储在另一列中,则由于一个停靠点有多次,因此向下会发生大量重复。
也许我错过了一些东西,我才刚刚开始学习 SQL,这是我们已经设定的任务。
提前致谢。
解决方案
您将需要一张包含您的表 Timetable
:
- 路线编号
- 停靠站 ID
- 时间
- 可能需要其他字段(方向、序列号、块号等)
我建议创建单独的表 Bus Stop
(存储车站名称、纬度/经度等)和 Route
(存储路线名称、首站、末站、方向等)。
您可能已经意识到这一点,但公交车调度很快就会变得复杂。例如:
您可能需要将某些停靠点指定为显示在打印时间表中的“时间点”
每条路线可能有多种变化。例如,某些版本可能在不同的公交车站开始或结束
周六和周日的时间表可能会有所不同,大多数机构每季度都会更改时间表
您可能需要考虑其中一些情况,并将它们构建到您的架构中。
这有帮助吗?
其他提示
下面只有一个(的多)的方式来做到这一点:
这听起来像你可能想有一个routes
表,它描述了每个路线,并具有启动时间。
然后,描述和等待时间,在每个停止所述总线的stops
表。
一个stopDistanceMapping
表将描述它们之间的驱动时间两个站之间的距离,和
最后,您routeMap
表将连接个人routes
与stops
的列表。然后,您可以填写您的routes
表的距离和时间,使用的等待时间从每个个体车站,而次/从stopDistanceMapping
距离。
祝你好运!
在一个(非常粗略的)第一通,我会保持公共汽车路线倍在表中是这样的:
RouteID StartingLocationID EndingLocationID TravelTime
此外,我会保持停止如表:
StopID Address City etc... (whatever other information you need about each location)
有关路由自身我将存储:
RouteID StartingLocationID RouteStartTime
显然,你应该调整这个你自己的需要,但是这应该给你一个起点。