У меня есть коммерческое приложение с базой данных SQL Server 2008 R2, которая содержит таблицу, которая должна моделировать структуру файлов и папок, аналогичную ‹root>:‹sublevel 1>:‹sublevel 2>..‹sublevel n>:‹ документ>. Таблица базы данных содержит пары значений (элемент_папки, родитель), где элемент-папка — это либо документ, либо папка, а родитель — ссылка на другую строку в таблице.
Я пытаюсь написать запрос, который возвращает два значения в строке:
- документ
- Полный сцепленный путь к документу от папки верхнего уровня до непосредственного контейнера документа, например Root:Level1:Level2..:LevelN.
Обычно рекурсивный запрос должен справиться с этой ситуацией, но есть одна сложность. Таблица элементов папки содержит избыточные записи для каждого документа и подуровня, связывая их с каждым предком в структуре папки, а не только с их непосредственным родителем.
Вместо (документ, родитель) (родитель, дедушка и бабушка) (прародитель, прадедушка) ... (предок, корень)
Таблица содержит (документ, родитель) (документ, прародитель) ... (документ, предок) (документ, корень) (родитель, прародитель) ... (родитель, предок) (родитель, корень) ... (прародитель, прапрадедушка) ... (прародитель, корень)
и так далее. Я уверен, что у специалистов по моделированию данных были свои причины для такого дизайна, но это сводит на нет использование стандартного рекурсивного иерархического запроса. На самом деле, когда я пытался, выполнение превысило максимальное количество уровней рекурсии.
Кто-нибудь еще сталкивался с подобной проблемой, и можно ли ее решить, не прибегая к сложному программированию, выходящему за рамки стандартных возможностей SQL?
Спасибо большое
Патрик