假设我想使用诸如Neo4j之类的图形数据库对公共巴士运输服务进行建模。
此类服务由一组公交车站,一组线路以及一组将公交线路与公交车站相关的时间表组成。
查询数据库应该回答一些问题,例如从城市的某个点到另一点的最佳路线(例如,通过时间或步行最少的时间或变化次数较少)。
遵循最常见的准则,公交车站和公交线路成为各自具有适当属性(每个车站的ID,地理位置和地址等)的节点。
每行的边上都带有标签start
和stop
,它们分别是行服务的开始和结束。随后的公交车站与具有某些属性(例如,线路,两个车站之间的距离以及其他)的其他边缘相连。
如何在此类数据库中对时间表进行建模?将它们建模为巴士站(或连接它们的边)的键值属性,其值是一个包含时间的数组,是否很好?
答案 0 :(得分:0)
像您最关心的声音是如何为每条线的排班时间建模。如果我正确理解您的担忧,那是因为每条线路每天在两个公共汽车站之间可以有多个班次。
可以将所有时间表安排在一个数组中,并将其存储为公交车站的属性。但是,要扩展到除公交车以外的其他交通方式将非常困难。因此,在可扩展性更高的图形模型中,顶点可以是一个位置,而边缘将是两个位置之间的运输(不限于公交车)。运输选择的任何属性都可以是边缘的属性,包括时间表。
但是让我们以公共汽车为例。因此,假设您在相同的两个巴士站A和B之间有m条线路,并且您想为每一条线路每天安排n个班次(实际上,不同线路的n可以不同,但是没关系)。然后,您可以在A和B之间创建m * n条边。在这种情况下,每个边只有一个属性作为其计划时间。然后,您可以使用排名来区分边缘。一种替代方法是仅创建m个边,并将n个位移定义为每个边上的属性。在这种情况下,每个边缘都有n个属性作为其计划时间。显然,前一种方法对以后的查询更友好。