公交车时刻表数据库设计

时间:2010-04-20 21:18:13

标签: sql mysql database-design timetable

我正在设计一个数据库来存储300条不同巴士路线的时间表, 每条路线的停靠次数不同,周一,周六和周日的时间也不同。 我代表每条路线的巴士出发时间如下, 我不确定表中是否应该有空值,这看起来不错吗?

route,Num,Day,    t1,   t2,   t3,    t4    t5      t6      t7      t8     t9    t10 

117, 1, Monday,   9:00, 9:30, 10:50, 12:00, 14:00  18:00   19:00   null   null   null
117, 2, Monday,   9:03, 9:33, 10:53, 12:03, 14:03  18:03   19:03   null   null   null
117, 3, Monday,   9:06, 9:36, 10:56, 12:06, 14:06  18:06   19:06   null   null   null
117, 4, Monday,   9:09, 9:39, 10:59, 12:09, 14:09  18:09   19:09   null   null   null
.
.
.
117, 20, Monday,   9:39, 10.09, 11:39, 12:39, 14:39  18:39   19:39   null   null   null
119, 1, Monday,   9:00, 9:30, 10:50, 12:00, 14:00  18:00   19:00   20:00  21:00  22:00
119, 2, Monday,   9:03, 9:33, 10:53, 12:03, 14:03  18:03   19:03   20:03  21:03  22:03
119, 3, Monday,   9:06, 9:36, 10:56, 12:06, 14:06  18:06   19:06   20:06  21:06  22:06
119, 4, Monday,   9:09, 9:39, 10:59, 12:09, 14:09  18:09   19:09   20:09  21:09  22:09
.
.
.
119, 37, Monday,   9:49, 9:59, 11:59, 12:59, 14:59  18:59   19:59   20:59  21:59  22:59
139, 1, Sunday,   9:00, 9:30,  20:00  21:00  22:00  null   null     null    null   null  
139, 2, Sunday,   9:03, 9:33,  20:03  21:03  22:03  null   null     null    null   null  
139, 3, Sunday,   9:06, 9:36,  20:06  21:06  22:06  null   null     null    null   null  
139, 4, Sunday,   9:09, 9:39,  20:09  21:09  22:09  null   null     null    null   null  
.
.
.
139, 20, Sunday,   9:49, 9:59, 20:59  21:59  22:59  null   null     null    null   null  

3 个答案:

答案 0 :(得分:5)

不,看起来不行。每个路线/日/停止时间值应位于单独的行中:

 Route, Day, Run #, Stop #, Time

 117, Monday, 1, 1, 9:00
 117, Monday, 1, 2, 9:30
 117, Monday, 1, 3, 10:50
 117, Monday, 1, 4, 12:00
 . . . Finish Run #1 . . .
 117, Monday, 2, 1, 9:03
 117, Monday, 2, 2, 9:33
 117, Monday, 2, 3, 10:53
 117, Monday, 2, 4, 12:03

理想情况下,您将在其中有一个单独的表,其中包含Route,Day,Run#并将它们分配给唯一的RunID整数值,然后使用该值代替StopTimes中的Route,Day和Run#列表

一般情况下,如果末尾有索引号的列(Time1,Time2或Phone1,Phone2),则提示您的数据库不是按照规范化原则设计的。

当然,您可以将数据转换为您建议发布的格式。

答案 1 :(得分:3)

您系统的基础知识是公交车(或车辆),车站(预定)以及类似以下的路线:

总线

bus_id
汽车类型?
handicap_accessible?
等...

停止

stop_id
位置
other_stop_attributes?

路线

ROUTE_ID
stop_id
stop_order


我认为你会按照你希望它们发生的顺序列出路由表中的所有停靠点。如果您愿意或需要,可以使用此seprated进行其他路由优化。

您可能希望有一个大的停止矩阵来停止距离和时间,这将使您可以灵活地设计新路线。最后,您需要一个时间表来确定哪一条公交车将在哪一条路线上。所有类似于以下示例:

Stop_Stop

stop_1_id
stop_2_id
距离
时间

附表

DAY_OF_WEEK
bus_id
ROUTE_ID
START_TIME

答案 2 :(得分:1)

我必须解决这个问题而且我用过这个:

订单   - 号码   - 姓名

<强>站  - 名称   - 纬度   - 经度   - is_terminal

<强>度假   - 约会   - 说明

<强>路线   - line_id   - from_terminal:station_id   - to_terminal:station_id

路线时间表   - route_id   - is_holiday_schedule   - starting_at

路线停止   - route_id   - station_id   - enlapsed_time_from_start:以分钟为单位

它看起来对你有好处吗?