С.Д. Кузнецов - Основы баз данных (1121716), страница 77
Текст из файла (страница 77)
Например, в примерах 16.3 и 16.4 столбец сонтлгнеР едет связывает конструктивный элемент автомобиля с входящими в его состав подэлементами (через значения их столбцов сонтлтнтнс едет). Раздел нет приводит к образованию нового столбца результирующей таблицы. Для строк, которые попадают в результат первый раз, в столбец сус1е вагх се1ипп папе заносится значение выражения ча1це ехргевв)оп 2. В повторно заносимых строках значение столбца — ча1пе ехргеввуоп 1.
Типом данных 369 Основы баз данных Курс этого столбца является тип символьных строк длины один, так что в качестве уа1пе ехргеяя(оп 1 и уа1пе ехргеяя(оп,2 разумно использовать константы '0' и '1' или 'у' и 'М'. Раздел Остии приводит к образованию еще одного дополнительного столбца результата с именем раей со1швп папе. Типом данных столбца является АККАУ, причем кардинальность этого типа предполагается достаточно большой, чтобы сохранить информацию обо всех строках, попавших в результат.
Элементы массива имеют «строчный тип» (гон туре), содержащий столько столбцов, сколько их указано в списке раздела суВ- С( Е. Каждый элемент массива соответствует строке результата, и в его столбцах содержится копия значений соответствующих столбцов этой строки. Вот пример запроса, содержащего раздел суксье (пример 16.5): Х1ТН ВЕСОКБ1Ж РАНТЕ (РАНТ НОМВЕВ, КОНВЕТЕ ОР РАВТБ, СОБТ) АБ (БЕЬЕСТ СОМТА1НЕО РАНТ, 1, 0.00 РВОМ Сйп ХНЕКЕ СОНТА1М1НО РАНТ ОН1ОН А1Л БЕ1 ЕСТ САВ.СОНТА1НЕО РАНТ, САВ.%)МЕЕВ ОР РАРТЯ, САВ.%)МВЕК ОР РАВТЯ * САК.РАНТ СОЯТ РВОМ СйК, РАВТЯ ЯНЕКЕ РАНТЕ.РАНТ %ЖЕЕВ = САК.СОНТА1Н1НО РАНТ) СУКОНКЕ СОНТА1НЕО РАНТ ЯЕТ СХСЬЕМАКК ТО 'У' РЕРАОЕТ 'Н' НЯ1НО СУВСЬЕРАТН ЯЕЬЕСТ РАНТ НОМВЕВ, Я()М(НОМВЕВ ОР РАНТЕ), ЯОМ(СОБТ) РВОМ РАВТЯ ОКРЕК ВУ РАНТ %)МЕЕВ; Имена столбцов сусьемйкк и суВсьерйтн выбраны произвольным образом — требуется только, чтобы имена этих столбцов отличались от имен столбцов рекурсивного запроса.
При выполнении запроса строки, удовлетворяющие его условию, накапливаются в результирующей таблице. Но, кроме того, эти строки «кэшируются» в столбце СУКСЬЕРАТН. При попытке добавления к результату новой строки на основе текущего содержимого столбца суксьеРАТН проверяется, не содержится ли она уже в результате. Если не содержится, то данные об этой строке добавляются к столбцу сунсьевйтн (к массиву добавляется новый элемент), в столбец сусьемйВК этой строки заносится значение 'Н', и строка добавляется к результату. Иначе в столбец СусьемйВК соответствующей строки результата заносится значение 'у', означающее, что от этой строки начинается цикл.
370 Лекция 16 Средства формулировки аналитических и рекурсивных запросов Рекурсмвные представления Рекурсивным называется представление, в определяющем выражении запроса которого используется имя этого же представления. В представлениях может использоваться и прямая, и взаимная рекурсия.
Синтаксис оператора определения рекурсивного запроса выглядит следующим образом: СЕЕЛтЕ ЕЕССЕЯтуЕ утЕИ Па]зте пап1е [ со1цппт пап1е сап«па 11вп ] АЯ с]вегу ехргевэтоп Хотя для того, чтобы представление было рекурсивным, требуется рекурсивность определяющего выражения запроса (т. е. в нем должна присутствовать спецификация ееспеЯ1уе); наличие избыточного ключевого нес]]еЯ туе в опрелелении рекурсивного представления является обязательным. Как говорят авторы стандарта, это сделано для того, чтобы избежать случайного появления непред)смотренных рекурсивных представлений. Наконец, обратите внимание на то, что еще не обсуждавшийся нами необязательный раздел иттН СНЕСК Орттоп не может присутствовать в определении рекурсивного представления (по той причине, что разработчики стандарта не смогли найти разумной интерпретации для комбинации ееснеЯтуе и итти снеск срттсп). В заключение этого раздела могу сказать, что лично мне механизм рекурсии, предлагаемый в стандарте БО(., представляется громоздким и ограниченным.
Кроме того, насколько мне известно, компании, поставляющие 3О) -ориентированные СУБД, не спешат внедрять в свои продукты средства рекурсии в соответствии со стандартом БОЕ: 1999 (или, по крайней мере, не слишком их афишируют). Заключение Если вернуться к синтаксическим определениям разд.
«Общие синтакические правила построения скалярных выражений» лекции 13, то можно убедиться, что в последних четырех лекциях мы рассмотрели все варианты организации оператора ЯЯЕЕст языка БОЕ (за исключением конструкцийсо11есптоп г]ег(пег] паыеиОиьу [саые ог с[пеку пап1е] относящихся к объектным расширениям языка БОЕ). Для общего понимания языка на модельном уровне более важными являются прелыдущие три лекции. Данная лекция включена в курс, скорее, с целью общего ознакомления читателей с новыми возможностями оператора выборки, чем с целью их подробного описания. С большой вероятностью средства формулировки аналитических и рекурсивных запросов языка БО будут пересматриваться при подготовке следующих вариантов стандарта языка.
371 Основы баа данных Курс Лекция 17. Язык баз данных 801: средства манипулирования данными Название этой лекции не совсем правильно отражает ее реальное содержание. Собственно средствам языка Я)Ь, предназначенным для обновления базы данных, посвящается только один нз трех основных разделов. Однако и следующие два раздела непосредственно примыкают к этой теме. В разделе «Представления, над которыми возможны операции обновления» рассматриваются возможности выполнения операций обновления базы данных через представляемые таблицы.
Обсуждается проблема в целом, подход к ее решению, применявшийся в ранних вариантах стацдарта 8(2Ь, н решение, принятое в стацдарте ВЯЬ:1999. Последний основной раздел лекции посвящается механизму триггеров, специфицированному в стандарте ВОЬ:1999.
Здесь тоже имеется явная связь с основной темой лекции, потому что главным условием срабатывания трипера является выполнение некоторой операции обновления базы данных, и действия, выполняемые в трнггерной процедуре, как правило, тоже связаны с обновлением базы данных. Ключевые слова: оператор тмБкнт, вставка всех строк указанной таблицы, вставка явно заданного набора строк, вставка строк результата запроса, оператор оролтк, оператор окьктк, представления, над которыми возможны операции обновления (цроагаЫс у(еуу), материализация представления, представления, допускающие применение операций обновления, в стандарте ЗОЬ/92, представления, допускающие применение операций обновления, в стандарте Я )Ь:1999, потенциальная применимость операций обновления, применимость операций обновления, простая применимость операций обновления, применимость операции вставки, аксиоматическая функциональная зависимость, известная функциональная зависимость, восмножество столбцов, Врк-множество столбцов, раздел нттн снеск орттон определения представления, режимы проверки слнслоко и г,ость, триггер, триггсрная процедура, активная база ланных, механизм триггеров в Б( Ь: 1999, прелметная таблица (ьцЬ~ссг (аые), инициирующий оператор Я)ь (гпяксппд з(2ь згагстспг), триггеры вкгонк и лкткн, триггеры тнякнт, оролтк и окьктк, триггеры дон и нтлткмкнт, раздел ннкм определения триггера, инициируемый 5(2Ь-оператором ((пйасгсд Я Ь згагстспг), составной инициируемый Я.1Ь-оператор, Я)Ь-процедура (ЯН.
ргоссдцгс), Я.1Ь/РБМ, выполнение триггеров, контекст выполнения триггера, переходная таблица, порядок выполнения триггеров, триггеры и ссылочныс действия. 372 Лекция 17 язык баз данных 50ц средства манипулирования данными Введение Базы данных, по крайней мере, в приложениях категории ОЕТР являются высоко динамичными объектами.
В таких приложениях на две операции выборки данных в среднем приходится одна операция обновления содержимого базы данных (добавления новых данных, удаления или модификации существующих данных). Поэтому для пользователей и разработчиков ОЕТР-приложений средства манипулирования даняымц по важности находятся на втором месте после средств выборки данных.
В этой лекции мы обсудим средства манипулирования данными, входяшие в прямой БОЕ. Заметим, что с практической точки зрения более важными являются средства манипулирования ланными, выходяшие за пределы прямого Я )Е и присутствующие во встраиваемом и динамическом 50Е. Но, как мы неоднократно отмечали, в этом курсе мы не обсуждаем возможности использования Я~Е для создания приложений. По мнению автора, материал данной лекции полезен для обшего понимания специфики операторов манипулирования данными, а расширения этих операторов, присутствующие во встраиваемом и динамическом Я;)Е, в любом случае нужно изучать совместно с другими аспектами подобных уровней языка.
Лекция состоит из трех основных разделов. В первом разделе мы обсудим синтаксис и семантику операторов манипулирования данными, полагая, что они действуют над базовыми таблицами. Во втором разделе будет продемонстрировано, что в ряде случаев, специфицированных в стандарте языка $9Е, операторы манипулирования данными можно применять к порождаемым таблицам и представлениям с однозначным отображением результатов действия этих операторов на соответствуюшие базовые таблицы.
Третий раздел посвящен механизму триггеров, которые, по сугцеству, представляют собой «хранимые процедуры», автоматически вызываемые при возникновении соответствующих условий. Триггеры не обязательно связываются с действиями, производимыми при манипулировании данных, но, поскольку одно из основных функций этого механизма состоит в поддержании целостности баз данных, как правило, такая связь имеется. Поэтому мы включили обсуждение механизма триггеров в соответствии со стандартом БОЕ именно в данную лекцию. Базовые средства манипулирования данными К базовым средствам манипулирования данными языка Я >Е относятся «поисковые» варианты операторов цррлтк и пеьктк.