2010-04-23 99 views
0

我正在写的模型火车路线,它们存储在数据库中的表[TrainStop]如下应用制定出了一套路线可能的目的地:查询使用SQL Server 2008

TrainServiceId StationCode StopIndex IsEnabled

因此,给定的列车遵循一条路线,由几行组成,StopIndex指示顺序。我试图解决的问题是,根据可用的列车服务,说明用户可以从给定的起始站获得哪些站点。这将是相对简单的,但它也可能禁用停止,这意味着用户无法到达该列车服务停止后的任何目的地。它也有可能是在不同的路由多辆列车可以共享站例如:

列车服务1:A,B,C,d,E

列车服务2:P,Q,B,C,d, R

因此,如果用户在B,他们可以去C,D,E和R,但是如果D站在任何一项服务上都被禁用,他们只能进入C.如果E站在服务1上被禁用,则用户可以到达C,D和R.

解决此问题在C#中非常简单,但我想知道它是否可以在SQL中优雅高效地解决?我正在努力寻找一种方式,为每条路线排除过去未启用行的电台。

+0

你可以给一些样本输入和输出数据吗? – 2010-04-23 13:08:04

回答

1

我想我可能会这样设置它。三个表:站

ROUTE
路线

名单

STATION
列表

ROUTEPATH(或航线计划?)
许多一对多路线和车站之间的表,其中包括StopIndex属性

站是启用还是禁用既是单个站的属性(站关闭),也是路径路径的属性(站之前的站s“站关闭,所以”this“也关闭)。这意味着IsEnabled应该出现在bot和ROUTEPATH表中。

当一个站被禁止:

  • 标记它为禁用在STATION
  • 标记它为禁用在ROUTEPATH
  • 对于每个路由含有站,比标志所有站与StopIndex更大该站点被禁用(后两个可以作为一个更新查询完成)

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

当一个以上的电台被禁用时 - 或者更确切地说,当一些但并非所有禁用的电台再次启用时,当然会有问题。我认为这将是更好地使ROUTEPATH的属性“IsDisabled”,并使它成为一个整数

  • 零表示不禁止
  • 非零值意味着禁用
  • 递增它由一个为每个“站禁用“行动
  • 递减它通过为每个‘站启用’行动

像这样的系统应该借给本身相对简单的查询。

+0

对不起,应该说清楚,这实际上是关于火车在路线上,它是不能停在车站的火车,因此不可能把车站本身标记为未启用。 – 2010-04-23 13:23:55

+0

我原来的(如果不是公开说明)的观点是,“的IsEnabled”意味着不同的事情,不同的实体,并且总体而言,它似乎是最好的计算和当时的表格是申请启用/禁用所有受影响的条目(而不仅仅是一个)更新了新的信息。我相信这个逻辑应该仍然成立。 – 2010-04-23 13:39:37