ник: Pasat
Если мы имеем основную таблицу «Departments» с 3-мя полями (DepID, ParentID, Name1) - в ней хранится иерархическая структура данных, где Поле ParentID является ссылкой на Id (первичный ключ) вышестоящего уровня в иерархии - со след.записями
DepID ParentID Name1
1 0 A
2 1 B1
3 1 B2
4 2 C1
5 3 C2
6 3 C3
и вспомогательную таблицу ANCESTORS содержащую всего два поля. В одном из них храним Id элемента, а в другом - Id всех его предков (Поле ancestorID ссылается на Id предка каждого элемента. В данном случае оно позволяет узнать все подразделения, в которые входит данный элемент)
DepID ancestorID
2 1
3 1
4 1
4 2
5 1
5 3
6 1
6 3
То подобная схема легко позволяет получить любую информацию об иерархических элементах одним запросом
1) можно получить всех предков, либо потомков определенного элемента (нет необходимости добавлятть поле FullPath ,в которое через разделитель записывать все коды от корня до данной ветки)
2) можно узнать, на каком уровне иерархии находится элемент (получив в запросе количество его предков)
3) можно узнать, отсутствуют или имеются другие элементы, входящие в конкретный элемент
Пользуясь двумя такими таблицами, можно легко строить практически любые запросы, характерные для иерархических объектов
Вот я и озадачился тем чтобы иметь только одну таблицу «Departments» а вместо вспомогательной таблицы ANCESTORS использовать запрос (вроде все данные в таблице «Departments» для этого есть).
На данный момент я вижу след. варианты
1) пытаться все-таки получить нужный запрос (если это реально) – это было бы самое лучшее
2) иметь таблицу в которой при каждом к ней обращении програмно создавать актуальный рекордсет, на основе данных таблицы «Departments».
Что Вы посоветуете в данном случае делать ???
Или рациональнее все-таки иметь постоянную вспомогательную таблицу ???
И последниий вопрос
Является ли вообще обтимальным выбранное решение, а именно использывание двух таблиц «Departments» и «ANCESTORS» для работы с иерархической структурой данных. Если есть что-либо более простое, тогда все выше описанное просто не нужно
С уважением ПАСАТ