代码之家  ›  专栏  ›  技术社区  ›  Rob West

使用SQLServer2008查询一组路由上的可能目的地

  •  0
  • Rob West  · 技术社区  · 16 年前

    我正在编写一个应用程序,对列车路线进行建模,这些路线存储在数据库表[TrainStop]中,如下所示:

    列车服务ID 站代码 停止索引 已启用

    列车服务1:A、B、C、D、E

    列车服务2:P、Q、B、C、D、R

    在C语言中解决这个问题相当简单,但我想知道是否可以在SQL中优雅而有效地解决这个问题?我正在努力寻找一种方法,对于每条路线,排除经过未启用的行的站点。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Philip Kelley    16 年前

    我想我可以这样安排。三张桌子:


    路由列表

    车站
    车站一览表

    路线路径(或路线图?)
    路由和站点之间的多对多表,包括StopIndex属性

    是否启用或禁用站点既是单个站点的属性(站点已关闭),也是路由路径的属性(“此”站点之前的站点已关闭,因此“此”也已关闭)。这意味着IsEnabled应该出现在STATION和ROUTEPATH表中。

    • 在ROUTEPATH中将其标记为禁用
    • 对于每个包含该站点的路由,将StopIndex大于该站点的所有站点标记为禁用(最后两个可以作为一个更新查询完成)

    要启用站点时,请反转此过程。

    • 非零表示禁用
    • 为每个“站禁用”操作增加一个
    • 对于每个“站点启用”操作,将其减一

    这样的系统应该适合于相对简单的查询。

    推荐文章