一般来说,应该可以按站搜索时间表,并且还应该可以绘制从初始站到最终站的路线。
在哪个表中存储距离并不完全清楚。
有两个想法:
- 在中间表station_station中存储距离(多对多)
- 或存储在距离(一对多)表中
使用中间表 station_station(多对多)的第一个选项:
App\Models\Station:
id
name
type(обычная, пересадка)
lineName
public function distances()
{
return $this->belongsToMany(Station::class);
}
App\Models\StationStation(多对多)
station_id
station_id2
km (расстояние от station_id до station_id2)
第二个选项是将距离存储在距离表
App\Models\Station
id
name
type(обычная, пересадка)
lineName
public function distances()
{
return $this->hasMany(Distance::class);
}
应用\模型\距离
id
station_id
station_id2
km
我不太确定如何正确操作,请告诉我如何操作?
站列表将从文件加载到数据库中。
相邻的车站会在地铁线路的名称之后一个接一个地走:
例如在Bookock线上会有这样一个列表:
Boock Line (линия)
Ajax Rapids (соседняя станция)
HTML Heights (соседняя станция)
JavaBeans Boulevard (соседняя станция)
...
PS
即 随后将有一种算法来计算从一个站点到另一个站点的最短路径。
不过这个现在不感兴趣了,现在他感兴趣的是如何正确组织数据库
您不太可能直接通过 SQL 计算最短路径,而是将所有站点卸载到内存中并使用代码中的算法。
因此,将最简单的数据库分为线路、车站和换乘,对您来说将更加方便和轻松。
线表
站台表
转移表
在交换表中,您可以记录循环(闭合)线,其中 From/To 值将相同。
使用表格数据,可以通过belongsTo/hasMany实现线路和车站之间的关系,对于换乘(Transition),使用一个模型,每个线路和车站都有一个附加方法来检查关闭的车站圆形分支:
顺便说一句,为了节省距离,您可以使用传输表,但这是一个问题,您要确切地回填如何;)