Я ищу помощь с задачей базы данных, которая, вероятно, будет легче решить с помощью какого-либо языка программирования объектов. В настоящий момент я пытаюсь найти решение TSQL/SQL Server.Сетевые данные в SQL Server - определение отдельных маршрутов
Я использую исходную таблицу, которая содержит данные о маршрутах. Каждая запись описывает ссылку маршрута с routeNo, originNodeID и destinationNodeID. Наиболее сложный пример данных из этой таблицы выглядит следующим образом:
routeID originNodeID destinationNodeID
WRTV ... ...
WRTX 5 10
WRTX 10 15
WRTX 15 20
WRTX 20 25
WRTX 25 30
WRTX 25 1505
WRTX 25 2005
WRTX 30 35
WRTX 30 1005
WRTX 35 40
WRTX 40 45
WRTX 45 50
WRTX 1005 1010
WRTX 1015 1020
WRTX 1505 1510
WRTX 1510 1515
WRTX 2005 2010
WRTX 2010 2015
WRTX 2020 2025
WRTY .... ....
Итак, как вы можете видеть каждый routeID описывает не линейный маршрут, но маршрут с ветвями. Маршрут из примера может выглядеть следующим образом:
1515 1020
/ /
/ /
5 ------ 25 --- 30 -------50
\
\
2025
Теперь, что мне нужно сделать, чтобы расчленить этот маршрут к отдельным маршрутам:
5-25-30-50 WRTX1 5-25- 30-1020 WRTX2 5-25-1515 WRTX3 5-25-2025 WRTX4
Для каждого из новых маршрутов я просто нужна последовательность ссылки, как показано ниже:
routeID originNodeID destinationNodeID
WRTX1 5 10
WRTX1 10 15
WRTX1 15 20
WRTX1 20 25
WRTX1 25 30
WRTX1 30 35
WRTX1 35 40
WRTX1 40 45
WRTX1 45 50
WRTX2 5 10
WRTX2 10 15
WRTX2 15 20
WRTX2 20 25
WRTX2 25 30
WRTX2 30 1005
WRTX2 1005 1010
WRTX2 1015 1020
WRTX3 5 10
WRTX3 10 15
WRTX3 15 20
WRTX3 20 25
WRTX3 25 1505
WRTX3 1505 1510
WRTX3 1510 1515
WRTX4 5 10
WRTX4 10 15
WRTX4 15 20
WRTX4 20 25
WRTX4 25 2005
WRTX4 2005 2010
WRTX4 2010 2015
WRTX4 2020 2025
Вы не знаете, как решить мою проблему? Предпочтительно, я хотел бы сделать это решение на SQL Server, но у меня было мало опыта в циклах и курсорах, которые, возможно, были бы полезны в этом случае. Как только я даже сделал ETL, но он работал только тогда, когда был только один пункт, где маршрут расщепляется.
Я был бы признателен за любую помощь.
Действительно ли это график или иерархия слева направо? Похоже, вы запрашиваете все * leaves * и их путь к корню. Вы можете добавить [hierarchyid] (https://msdn.microsoft .com/en-us/library/bb677290.aspx). Каждое значение иерархии по существу кодирует путь к корню, преобразуя поиск иерархии в поиск диапазона. Это означает, что вы можете использовать индекс в столбце иерархии, чтобы ускорить поиск –
[Преобразование таблицы в иерархическую структуру] (https://msdn.microsoft.com/en-us/library/bb677237.aspx) tu torial показывает, как вы можете преобразовать таблицу родителя/ребенка в таблицу с столбцами иерархии. –