Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Реализация доступа к дереву при помощи SQL. / 4 сообщений из 4, страница 1 из 1
29.02.2008, 19:11
    #35164338
Hisbreht Victor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация доступа к дереву при помощи SQL.
Возникла такая задачка.
Есть в БД класс, содержащий relationship на себя самого для описания дерева.
Например, такой:

Class My.Tree Extends (%Persistent)
{
Property Name As %String;
Relationship Children As My.Tree [ Cardinality = many, Inverse = Parent ];
Relationship Parent As My.Tree [ Cardinality = one, Inverse = Children ];
}

При доступе через SQL он выглядит как таблица с тремя полями: ID, Name, Parent.

Как получить всех потомков выбранного объекта (выбранной записи в таблице) при доступе через SQL одним запросом?

В DB2 можно нарисовать рекурсивный запрос. Но Cache' не поддерживает WITH.

Виктор
...
Рейтинг: 0 / 0
29.02.2008, 21:42
    #35164501
Реализация доступа к дереву при помощи SQL.
Правильно я понимаю, что нужны все потомки, независимо от их уровня вложенности?

Такой функционал можно получить, оформив алгоритм в виде хранимой процедуры (запрос - член класса, написанный на COS). Заодно работать будет шустро.

Если версия Cache 2007.1, и сильно не хочется писать custom query, основанный на COS, то можно добавить в таблицу вычислимое поле Path, которое в конкатерированной форме хранит "путь" к записи (ID родителей с разделителями), и сделать по этому вычислимому полю индекс (для этого и нужна 2007.1), чтобы при каждом обращении эти поля не пересчитывались. Тогда поиск всех возможных детей вне зависимости от уровня вложенности будет сводится к условию вхождения в значение нашего вычислимого поля идентификатора родителя (включая 1 символ разделителя, чтобы ошибок вложенности, когда один ID может целиком (посимвольно) входить в другой ID, избежать).


---------
http://writeimagejournal.com - InterSystems Russia Technology Blog.
...
Рейтинг: 0 / 0
29.02.2008, 22:15
    #35164531
Hisbreht Victor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация доступа к дереву при помощи SQL.
Т.е. без изменения класса никак?
Собственно вопрос и был в том, чтобы БД не править.
...
Рейтинг: 0 / 0
11.03.2008, 12:03
    #35182044
Реализация доступа к дереву при помощи SQL.
А в чем сложность? Тут же аддитивное изменение - конфликтов быть не должно.
---------
http://writeimagejournal.com - InterSystems Russia Technology Blog.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Реализация доступа к дереву при помощи SQL. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]