1

我在 MYSQL 中创建了一个火车时刻表数据库。每天有数千条路线。但除了少数例外,大多数路线在每个工作日都是相似的,但在周末会有所不同。

此时我基本上每天午夜更新我的 SQL 表,以获取接下来 24 小时的出发时间。然而,这非常不方便。所以我需要一种将日期存储在表格中的方法,这样我就不必每天都这样做了。

我尝试创建一个单独的表,在其中存储每个路由号的日期(路由号每天都会重置),但这使我的查询变得如此缓慢以至于无法使用。这是否意味着我必须将出发和到达时间存储为日期时间?在这种情况下,包含路由的主表将有几百万个条目。

还是有其他方法?

我的路由表如下所示:

StnCode(在单独的站表中引用)  
深度时间  
到达时间  
路由号  
腿数  
4

2 回答 2

1

你是如何存储日期的?单个日期/时间字段?这肯定是最紧凑的表示,但也是最难索引和扫描的,特别是如果您正在执行以下类型的查询:

SELECT ...
WHERE MONTH(DepTime) = 4 AND DAY(DepTime) = 19;

这样的构造将需要全表扫描来拆分每个日期字段并提取月/日。对于这种情况,最好进行一些去特征化并将日期时间拆分为单独的年/月/日/小时/分钟字段并将索引放在它们上。维护起来有点麻烦,但也会极大地加快特定时间部分的查询速度。

于 2010-04-19T22:03:06.367 回答
0
  1. 您可以根据日期(星期日、星期一、星期二等)存储它们,而不是按日期存储时间表。这将消除存储路线的日期。您可以将路线视为预先确定的,因此它们是固定的。由于列车数量约为 8000 辆(客运列车),天数固定(7),路线为(50-1000),每张表如 1, 1A,如在铁路书籍中发布,
    这将避免存储大量的列车组合日程安排到数据库中,因为每个日期都被转换为工作日之一,并且我们没有丢失任何数据。

  2. 您可以创建一个表来存储最多 7 天的天数。

  3. 我建议以这样的方式对数据库进行建模,每个站点都是一个接触点,而不是站点 ID....

  4. 并且可以在设计中引入枢纽概念,识别3-4个车站,属于同一个城市....

  5. 每个车站都是一个接触点,由登机点、HALT POINT 等设施提供支持...

  6. 因为,并非所有车站都是所有火车的上车点。

  7. 设施是在不同车站可用的设施......

  8. 并非所有火车都可以使用所有设施...,例如:Kazipet 是一个车站,也是一个路口...但是对于少数火车,在少数几条路线上,它们会经过车站,并且也会停在车站,但是,它将不允许新乘客在车站上车。但是,它将允许在反向路线上相同......

于 2011-02-14T21:36:22.597 回答