Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD / Урок 12-Рекурсивный SQL.doc
Скачиваний:
56
Добавлен:
20.02.2016
Размер:
721.41 Кб
Скачать

Урок 12. РекурсивныйSql

Древовидные структуры

Стандартное представление и манипулирование деревьями в SQL

Рекурсивные запросы в Oracle

Рекурсивные запросы в стандарте SQL

Рекурсивными называются запросы, когда для получения необходимого значения (или даже целой таблицы) следует многократно использовать одну и ту же таблицу, причем количество обращений к такой таблице как правило заранее не известно. На этом уроке мы сначала дадим основные понятия о специальной структуре данных, деревьях, которая используются в рекурсивных вычислениях, затем приведем примеры содержательных запросов, которые требуют рекурсивных вычислений, покажем, как можно выразить некоторые из рекурсивных запросов с помощью обычных средств SQL, и, наконец, представим специальные расширения языка для описания вычислений, не имеющих заранее заданной глубины рекурсивной вложенности.

Древовидные структуры

Графы— структуры данных, состоящие из вершин (узлов) связанных дугами.Дерево— специальный вид направленного графа, у которого дуги показывает однонаправленную связь между двумя вершинами (то есть дуги направленные; как правило, на схемах это представляется в виде дуг со стрелкой в конце дуги), причем никакая вершина не может иметь двух входящих в нее дуг. Древовидные структуры широко распространены. Например, в диаграмме организационной структуры подчинения вершины представляют сотрудников, а каждая дуга описывает подчиненность нижестоящего сотрудника (тот, к которому ведет стрелка дуги) вышестоящему. В перечне компоновки агрегатов из других агрегатов/деталей, вершины — агрегаты/детали, а дуги описывают отношение «состоит из». В дереве родословной вершины представляют людей, а дуги представляют связь «является ребенком».

Вершина дерева называется корнем. В организационной диаграмме, это самый большой начальник, а в компоновке агрегатов это собранный агрегат, который имеет непосредственное применение. Дуга связывает две вершины, причем первая из них (из которой исходит дуга) называетсянепосредственным предком(родительская вершина), а вторая —непосредственным потомком(дочерняя вершина). Вершина дерева называетсяконечной(листьевой), если у нее нет вершины–потомка. В организационной структуре листьями являются те сотрудники, которые не имеют подчиненных, а в компоновке агрегатов – детали, которые не имеют внутренней компоновки. Относительно любой вершины можно говорить о множестве всех ее предков (если эта вершина не корневая) и о множестве всех ее потомков, если она не конечная. Две вершины называютсяподобными, если у них один и тот же непосредственный предок. В организационной структуре подобными являются сотрудники одного начальника.

Двоичное дерево— это дерево, в котором вершина может иметь не более двух потомков; В общем случае, n–мерное дерево — то, в котором вершина может иметь не больше чем n вершин–потомков.

Если выбирается некоторая некорневая вершина дерева вместе со всеми ее потомками, такое дерево называется поддеревом. Говорят, что вершина, определяющая поддерево, являетсякорнем поддерева.

Деревья часто изображают в виде диаграмм, как это показано на рис ?? и рис. ?? ниже.

Рис. 10.1 Представление древовидной структуры в виде диаграммы

Рис. 10.2. Представление древовидной структуры в виде вложенных множеств

Древовидная структура распределяет вершины по уровням. Корневая вершина представляет первый уровень, Все вершины, дочерние корневой, представляют второй уровень, и т.д.