公路客运网数据库

时间:2016-03-19 21:58:10

标签: sql database-design

我正在创建一个存储公路巴士系统的数据库。基本上,这些公共汽车是从一个城市到另一个城市旅行的人使用的。根据出发城市和目的地城市,一个人可能需要乘坐几辆公共汽车才能到达目的地。它与公共交通系统非常相似。主要区别在于公交车由几家不同的公司运营,数据库应允许应用程序查询出发地和目的地城市的公司信息库。让我们说用户想要从罗马到维也纳,需要乘坐3辆公共汽车去那里。通过提供罗马作为出发城市和维也纳作为目的地,我的应用程序将生成一个返回结果的查询 - 公司1(姓名,地址,联系电话),公司2(姓名,地址,联系电话),公司3(姓名,地址,联系电话)。

到目前为止,我已经提出了4个表:

Company - id,name, companyid, address, ph#

City - id,name

Bus - id,companyid,stopid

Stop - id, cityid

从那里开始,我不确定要添加哪些表格,以便我的应用程序可以运行查询以获取需要多个总线的行程。感谢您的投入。

1 个答案:

答案 0 :(得分:0)

您需要的表格和属性取决于您的功能要求。因此,如果您只需要有关公交车,运营公司的公司以及停靠的城市的信息,您的表格可能包含足够的信息。如果您的要求变得更加复杂(或者如果您认为有些要求没有明确说明,那么可能会缺少一些信息)。

您的设计中存在一个正式缺陷。我假设您的id属性应包含每条记录的唯一键。如果这是真的,那么每条总线的记录不会超过一条,因此每条总线只能有一个停靠点。此外,每个站点不会有多个记录,因此每个站点只能关联一个城市。因此,即使每辆公交车仅被认为连接两个城市,您也无法表达从一个到另一个城市的关系。

有两种方法可以解决这个问题。如果,当从A到B再到C时,你不关心它是否真的是连接它们的同一条总线,那么定义就足够了

Bus - id, companyid, originid, destinationid

并省略Stop表。这样,一个旅行者可以获得从罗马到维也纳的所有可用连接,但对于佛罗伦萨的链条,不知道是在那里换乘公交车还是只是安静地坐着。

如果您希望Stop对象描述行程,则它们将具有结构

BusStop - id, busid, cityid, sequence

其中序列属性将从0或1向上计算此公共汽车所触及的城市。

您的模型可能缺少的另一件事是距离或旅行时间的概念。从罗马经斯德哥尔摩到维也纳可能有联系,但我怀疑它会非常有吸引力。航空公司有时会提供这种曲折的航线,但对于公共汽车而言,这可能是不切实际的。类似的观察结果适用于连接总线的等待时间。通过佛罗伦萨,威尼斯,克拉根福和格拉茨从罗马到维也纳可能会很不错,但如果这意味着在下一班车的每个地方等待2天,使用自行车可能是一个不错的选择。这些要求可能会导致数据模型变得非常复杂。