Я ищу создание объекта, который позволяет запрашивать данные с иерархической фильтрацией. У меня есть несколько идей, как я собираюсь это сделать, но было интересно, есть ли какие-либо рекомендации или предложения, которые могут быть более эффективными.Лучший способ поиска иерархических данных
В качестве примера представьте, что пользователь ищет работу. Области работы будут следующими.
1: Scotland
2: --- West Central
3: ------ Glasgow
4: ------ Etc
5: --- North East
6: ------ Ayrshire
7: ------ Etc
Пользователь может искать специфические (т.е. Глазго) или в большей площади (т.е. Шотландия).
Эти два подхода я рассматриваю являются:
- держать ноту детей в базу данных для каждой записи (то есть кот 1 будет иметь 2, 3, 4 в своих детей на местах) и запроса в отношении этой записи с
SELECT * FROM Jobs WHERE Category IN Areas.childrenField
. - Используйте рекурсивную функцию, чтобы найти все результаты, имеющие отношение к выбранной области.
Проблемы я вижу, как из являются:
- Холдинговой эти данные в БД будет означать того, чтобы следить за всеми изменениями в структуре.
- Рекурсия медленная и неэффективная.
Любые идеи, предложения или рекомендации по наилучшему подходу? Я использую C# ASP.NET с MSSQL 2005 DB.
Вы можете сделать рекурсивные запросы, если ваша структура таблицы поддерживает его: Http: // msdn.microsoft.com/en-us/library/ms186243.aspx – FrustratedWithFormsDesigner
Рассматривали ли вы возможность моделирования своей информации в XML и хранения ее в атрибуте XML (в таблице базы данных), чтобы затем вы могли запросить его с помощью XQuery? – XpiritO