Классика баз данных - статьи



         

Деревянный интерфейс - часть 4


select 10 as IdType, ‘Id_Site’ as IdName, Id_Site as IdValue, to_char (Code) '->' Name as Name, ‘Site’ as Icon from Main.Site where Id_Trust=[Id_Trust] order by Code

Обратите внимание на конструкцию [Id_Trust]. Такой конструкции нет в SQL, она была введена искусственно. Приложение перед отправкой запроса на сервер анализирует текст запроса и заменяет эту конструкцию на значение элемента с указанным именем находящееся выше по дереву. Именно по этому каждый элемент дерева хранит не только значение, но и название идентификатора объекта. Это позволяет найти объект нужного типа и получить его значение. В таком случае при развороте элемента трест с Id_Trust = 55, в SQL запрос на получение списка участков конкретного треста будет подставлено where Id_Trust=55, то есть конструкция [Id_Trust] будет заменена на значение конкретного треста внутри которого мы находимся в дереве. При таком подходе появляется возможность использовать значения любых элементов находящихся вверх по дереву (всех родителей) по отношению к текущему элементу. Вместо подстановки значений в текст SQL запроса можно использовать связанные переменные, выражения или использовать представления, что повышает эффективность выполнения запросов, но в данном случае нас интересует сама методика построения дерева, а не конкретный способ реализации. Поэтому вопросы оптимизации мы затрагивать не будем. Например, условие на выборку мастеров, находящихся внутри участка может иметь вид:

where Id_Trust =[Id_Trust] and Id_Site = [Id_Site] and .

Таким образом, мы получаем возможность довольно просто, только при помощи SQL запросов отображать информацию, находящуюся в базе данных в виде иерархического дерева любой структуры. Причем, структура отображения данных может не совпадать с их физическим расположением внутри таблиц базы данных. Кроме того, один и тот же объект может быть расположен в разных узлах дерева, но при этом он сохраняет все свои свойства и в зависимости от контекста может быть показан разными способами.




Содержание  Назад  Вперед