Запрос для определения возможных мест назначения на наборе маршрутов с использованием SQL Server 2008 - PullRequest
0 голосов
/ 23 апреля 2010

Я пишу приложение, которое моделирует маршруты поездов, которые хранятся в таблице базы данных [TrainStop] следующим образом:

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? Я изо всех сил пытаюсь найти способ для каждого маршрута исключать станции за строкой, которая не включена.

1 Ответ

1 голос
/ 23 апреля 2010

Я думаю, я мог бы настроить это таким образом. Три стола:

ROUTE
Список маршрутов

СТАНЦИЯ
Список станций

МАРШРУТ (или план маршрута?)
Таблица «многие ко многим» между маршрутом и станцией, включая атрибут StopIndex

Является ли станция включенной или отключенной, является атрибутом отдельной станции (станция закрыта) И атрибутом маршрута (станция до того, как "эта" станция закрыта, поэтому "это" также закрыта). Это означает, что IsEnabled должен появляться в ботах в таблицах STATION и ROUTEPATH.

Когда станция должна быть отключена:

  • Пометить его как отключенный в STATION
  • Пометить его как отключенный в ROUTEPATH
  • Для каждого маршрута, содержащего эту станцию, пометьте все станции, у которых StopIndex больше, чем у этой станции, как отключенные (последние две могут быть выполнены как один запрос на обновление)

Когда станция должна быть включена, отмените процесс.

Конечно, будут проблемы, когда несколько станций будут отключены - или, скорее, когда некоторые, но не все отключенные станции снова станут активными. Я думаю, что было бы лучше сделать атрибут ROUTEPATH "IsDisabled" и сделать его целым числом:

  • Ноль означает не отключен
  • Ненулевое значение отключено
  • Увеличивать его на единицу для каждого действия "отключена станция"
  • Уменьшить его на единицу для каждого действия "Включение станции"

Такая система должна подойти для относительно простых запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...