Sql 公路公交网络数据库

Sql 公路公交网络数据库,sql,database-design,Sql,Database Design,我正在创建一个数据库来存储公路公共汽车系统。基本上,这些公共汽车是由从一个城市到另一个城市的人使用的。根据出发城市和目的地城市的不同,一个人可能需要乘坐几辆公交车才能到达他们想要的目的地。它和公共交通系统非常相似。主要区别在于,公交车由多家不同的公司运营,数据库应允许应用程序根据出发地和目的地城市查询公司信息。假设用户想从罗马到维也纳,需要乘坐3辆公交车才能到达。通过将罗马作为出发城市,将维也纳作为目的地,我的应用程序将生成一个查询,返回一个类似于-Company1(姓名、地址、联系电话)、Co

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

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

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

City - id,name

Bus - id,companyid,stopid

Stop - id, cityid

从那以后,我不确定还需要添加哪些表,以便我的应用程序可以对需要乘坐多辆公交车的出行进行查询。非常感谢您的意见。

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

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

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

Bus - id, companyid, originid, destinationid
省略停止表。这样一来,一个旅行者就可以获得从罗马到维也纳的所有可用连接,但对于一家包含佛罗伦萨的连锁店来说,他不知道是在那里换车还是静静地坐着

如果希望站点对象描述行程,则它们将具有以下结构

BusStop - id, busid, cityid, sequence
其中序列属性将从0或1开始计算此总线所接触的城市


您的模型可能缺少的另一件事是距离或旅行时间的概念。可能有从罗马经斯德哥尔摩到维也纳的线路,但我怀疑它是否会很吸引人。航空公司有时会提供这种之字形路线,但对于公共汽车来说,这可能是不切实际的。对于连接总线的等待时间也有类似的观察结果。从罗马经佛罗伦萨、威尼斯、克拉根福和格拉茨到维也纳可能不错,但如果这意味着在每一个地方等两天下一班公交车,那么骑自行车可能是一个不错的选择。像这样的需求可能会导致更为复杂的数据模型。

嗨,大家好,给我们一些建设性的批评,告诉我们哪些需要改进?