Джо Селко Стиль Программирования Джо Селко На Sql
Иерархические структуры и деревья в SQL . Примеры могут быть найдены в совершенно разных предметных областях: классификация товаров, контрагентов, комплектация изделия, иерархия должностей, административно- территориальное деление, генеалогическое древо, наконец, просто дерево перебора вариантов или дерево классов. В общем случае все сводится к моделированию многоуровневой связи «главный—подчиненный», «предок—потомок», «общий—конкретный».
Что же касается языка SQL, то столбцы в таблице имеют порядок, который. Стиль программирования Джо Селко на SQL.
Книга «Стиль программирования Джо Селко на SQL» Джо Селко. Вы программист, которому нужно изучить SQL? Вы пришли на новую работу, где . SQL для простых смертных 11.8 MB (pdf) - М. Грабер (Базы данных). Стиль программирования на SQL 968.7 kB (doc) - Д. Селко (Базы данных).
Крымская Электронная библиотека: Программирование SQL бесплатно скачать книгу. Название: Стиль программирования Джо Селко на SQL. Сразу оговорюсь: к способу, продвигаемому Джо Селко (Joe Celko) и по. Стиль программирования Джо Селко на SQL. Стиль программирования Джо Селко на SQL. Руководство по стилю SQL .
Говоря более строгим математическим языком, мы моделируем граф без циклов. Углубляться в теорию графов в рамках статьи мы не будем, ограничившись минимальными пояснениями по ходу изложения, и рассмотрим наиболее часто встречающиеся варианты реализации древовидных структур в базах данных.
В качестве примера используем Microsoft SQL Server 2. СУБД, с которой придется работать. Такая абстракция называется матрицей смежности.
Матрица смежности может быть также представлена в виде списка (множества) пар с номерами (идентификаторами, кодами) вершин по принципу: есть пара — есть связь, нет пары — нет связи. Корневые вершины отличаются от других пар пустой (NULL) ссылкой на предка, в приведенном примере это поле «Код вышестоящей территории». Для выполнения часто используемых выборок требуется поддержка рекурсивных запросов. Если СУБД не умеет выполнять такие запросы, то выборки придется строить с использованием других механизмов, например временных таблиц или хранимых процедур и функций. Рассмотрим примеры запросов. Выборка поддерева по заданному узлу (здесь и далее по тексту используем синтаксис MS SQL Server 2.
WITH Поддерево (. Поэтому, чтобы избежать путаницы, я даже изменил информативное название «вложенные множества» на более простое.
В этой схеме дерево представляется вложенными подмножествами: корневой уровень включает в себя все подмножества — узлы первого уровня, а они, в свою очередь, включают в себя все узлы второго уровня и т. Бланк Карточка Предприятия Ип. Иерархия территорий может выглядеть так, как показано на рис. Целостность данных будет поддерживаться триггерами, которые перезаписывают список и уровни предков данного узла при его изменении. Для операции удаления достаточно декларативной ссылочной целостности (каскадное удаление), если ваша СУБД его поддерживает. Если за образец принять список смежности, который не содержит никакой избыточности, то для метода подмножеств на каждый уровень потребуется столько дополнительных записей в таблице подмножеств, сколько элементов находится на данном уровне дерева, умноженном на номер уровня (вершину считаем первым уровнем). Количество записей растет в арифметической прогрессии. Однако стоит взглянуть на примеры все тех же типовых запросов, как становятся очевидными преимущества, полученные от избыточности хранения: запросы стали короткими и быстрыми.
Выборка поддерева по заданному узлу: SELECT . Префиксный порядок обхода дерева рекурсивно определяется так: сначала корень дерева, потом узлы левого поддерева в префиксном порядке, наконец, узлы правого поддерева в префиксном порядке. Взгляните на рис. По недоразумению, потому что из рис. Однако эта неувязка с названиями нисколько не уменьшает практической ценности метода. Квадратик на рисунке обозначает узел, цифра в левом его углу является порядковым номером этапа маршрута при входе в узел, а цифра справа — при выходе, т. Как нетрудно заметить, номера потомков всегда располагаются в интервале между соответствующими номерами предка, сколь угодно дальнего.
Храня порядок обхода дерева (рис. Очевидная сложность — пересчет порядка обхода при добавлении новых или перемещении имеющихся узлов (удаление можно игнорировать). В триггере придется реализовать последовательный порядок обхода с оптимизацией. Но, например, если добавляется элемент самого нижнего уровня, то все равно придется пересчитать все, что «выше» или «правее», а это может быть сравнимо с пересчетом маршрута по всему дереву. Типовые запросы в методе маршрута обхода также лаконичные и быстрые. Выборка поддерева по заданному узлу.
SELECT T1.*FROM . Делалось это для того, чтобы, во- первых, интерпретатору было легче обрабатывать текст программы, а во- вторых, чтобы работали многочисленные операторы безусловного перехода (GOTO, если кто забыл) на строку с таким- то номером. Существовало и ограничение, согласно которому на каждой строке мог находиться только один оператор. Поскольку программа во время своей жизни подвергалась изменениям, то в нее добавлялись новые операторы.
Опытные программисты сразу нумеровали строки не 1, 2, 3, а 1. Это позволяло вставить в текст новую строку без полной перенумерации всех последующих. Думаю, идею вы уже поняли: надо нумеровать входы и выходы из узлов с некоторым интервалом, например 1. Например, ранее приведенная на рисунке иерархия территорий могла бы выглядеть так: Как видите, очень напоминает нумерацию частей, разделов и глав в книге. Данный метод является наиболее наглядным с точки зрения кодификации элементов: каждый узел получает интуитивно понятное значение, сам код и его части несут смысловую нагрузку.
Подобные свойства важны в классификациях, предназначенных для широкого использования, например в стандартизованных справочниках территорий (ОКАТО), отраслей экономики (ОКВЭД, NAICS), медицинских диагнозов (МКБ — международный классификатор болезней) и во многих других областях. Сложнее ситуация с запросами. Они лаконичны, но не всегда эффективны, так как могут требовать поиска по подстроке. Выборка поддерева по заданному узлу.
SELECT *FROM . Пустые лидирующие разряды заполняются нулями. Подобная система используется во многих межсистемных классификаторах, например относящихся к государственному стандарту ОКАТО (Общероссийский классификатор объектов административно- территориального деления) или NAICS (North American Industry Classification System — Североамериканская система классификации отраслей экономики). Если собрать достоинства и недостатки в одну общую таблицу, то мы получим более полную картину. Следует помнить, что нет «плохих» или «хороших» методов: вы делаете оценки и выбор, исходя из условий конкретной задачи. Нам хотелось показать вам основные принципы, используя которые вы сможете не только сделать обоснованный рациональный выбор одного из известных методов, но и создать свой, оптимизированный вариант. В конце концов, инженер тем и отличается от рабочего на сборке, что может и должен уметь находить оптимальные средства для решения задачи, а не слепо копировать чужие инструкции и шаблоны.
Стиль программирования Джо Селко на SQL. СПб.: Питер, 2. 00.