我在MYSQL中创建了一个列车时刻表数据库。每天有几千条路线。但除少数例外情况外,大多数路线在每个工作日都相似,但周末不同。
此时我基本上每天午夜更新我的SQL表,以便在接下来的24小时内完成离职。然而,这非常不方便。所以我需要一种方法在我的表中存储日期,所以我不必每天都这样做。
我尝试创建一个单独的表,其中我存储了每个routenumber的日期(每天重置routenumbers),但这使得我的查询速度太慢而无法使用。这是否意味着我必须将出发和到达时间存储为日期时间?在这种情况下,包含路由的主表将有数百万个条目。
还是有另一种方式吗?
我的路线表如下:
StnCode (referenced in seperate Station table) DepTime ArrTime Routenumber legNumber
答案 0 :(得分:1)
你是如何存储日期的?单个日期/时间字段?这肯定是最紧凑的表示,但也是最难索引和扫描的,特别是如果你正在进行以下类型的查询:
SELECT ...
WHERE MONTH(DepTime) = 4 AND DAY(DepTime) = 19;
这样的构造需要全表扫描来撕开每个日期字段并提取月/日。对于这种情况,最好去一点并将日期时间分成单独的年/月/日/小时/分钟字段并将其放在它们上面。更难以维护,但也会加快特定时间部分的查询速度。
答案 1 :(得分:0)
您可以将日期存储在日期(Sun,Mon,Tue等),而不是按日期存储计划。这将消除存储路线的日期。您可以将路线视为预定路线,因此它们是固定的。由于列车数量约为8000(旅客列车),固定天数(7),路线为(50-1000),每张表如1,1A,在铁路书中出版,
这将避免将大量列车时刻表存储到数据库中,因为每个日期都会转换为其中一个工作日,我们不会遗漏任何数据。
您可以创建一个表格,用于存储最多7天的日期。
我建议以这样的方式对数据库建模,即每个站点都是一个触点,而不是站点ID ....
您可以在设计中介绍集线器概念,识别3-4个同一城市的电台....
每个站点都是一个接触点,它受到诸如登机点,HALT POINT等设施的支持......
因为并非所有车站都是所有列车的登机点..
设施是不同车站的设施......
所有列车都没有所有设施......, 例如:Kazipet是一个车站,也是一个交叉路口...但对于少数列车,在几条路线上, 他们经过车站,也停在车站,但是,它不允许新乘客登上车站。 但是,它会在反向路线上允许相同的......