0

我需要有关如何为数据库建模的帮助。我需要存储每条公共交通线路的时间表。让我们看看我们有什么...

我正在开发的程序的目的是检查官方时间表中的错误。每辆公共汽车都有一个跟踪 GPS 设备,每 10 秒将其位置发送到数据库。因此,我必须检查其坐标接近某个站点坐标的报告的时间,并将该时间与官方时间进行比较,如果有很大差异,请在其他表 STATISTICS 中创建一行报告该问题。

无论如何,这只是为了上下文。事实是,我不知道如何以有效的方式存储它。

我想过用 Stops 创建一个表:STOP_ID (PK) - NAME - LAT - LON - LINE - TIMETABLE

其中时间表将是一个数组,其中包含为该站点 [5:03,5:25,5:50,6:12,...] 序列化的所有时间。

虽然我认为这不是一个好的解决方案,但我想不出更好的方法。

也许我可以为站点创建一个表,为时间表创建一个表,但是时间表的列是什么?我有很多变数……如果是每周、周六或节假日,很多小时、分钟……而且每一站都不同。

你能分享一些关于如何面对这个问题的想法吗?非常感谢!!

4

1 回答 1

2

正如西蒙所说,你正在开始一个大项目。

建议:阅读关系 DBMS 的各种范式;如果您没有它,这将为您提供一些有用的背景。

你的实体(表)是什么?公交线路(考虑去程和回程是两条不同的线路)。这些线路上的车站,已订购。行程(例如,106 路巴士在 05:22 离开中央车站,另一趟在 05:42 等)。预定停止 GPS 观测。

以下是可能的表和列:

 Busline table:   one row for each busline.   
   Busline  e.g. 106-outbound or 108-inbound   (pk)
   Description

 Station table:   one row for each bus stop, including ends of trips
   Busline        part of pk, fk to Busline  e.g. 106
   Stationid      part of pk  kf to Station 
   Description    e.g. Second Avenue Eastbound at Houston Street
   lat
   long

 Trip table: One row for each bus trip.
   Tripid   pk
   Busline  fk to Busline
   Description  e.g.   05:22 trip Central Station to University Park

 Schedule table:  one row for each scheduled time for each trip at each stop 
   Scheduleid  pk ... ascending serial number.
   Busline     fk to Station
   Stationid   fk to Station
   Tripid      fk to Trip
   Time

 Observation table  a row for each of your GPS readings
   Observationid  pk  ... ascending serial number
   Busline if you know it   fk to Busline
   Tripid if you have it    fk to Trip
   Time
   Lat
   Long

我对 RDBMS 设计的建议是避免将多个数据项序列化到单个 DBMS 列中。这就是为什么我建议使用日程表。

一旦您弄清楚如何加载您的 Busline、Station、Trip 和 Schedule 表,并将您的观察结果加载到 Observation 表中,将您的观察结果与您的日程表关联起来将是一个有趣的练习。

当心!你可能会让你的市政交通部门难堪!:-)

于 2013-06-12T22:04:52.047 回答