С.Д. Кузнецов - Основы баз данных (1121716), страница 68
Текст из файла (страница 68)
Наличие возможности указывать несколько ссылок на таблицы в разделе Гном и спецификации произвольного логического выражения в разделе Янеке для ограничения расширенного декартова произведения этих таблиц позволяет выражать с помощью традиционных средств Я)Е соединение общего вида в смысле Кодла, и до поры до времени зто считалось достаточным. Внешние соединения Но имеются два важных частных случая соединений, которые выражаются с помощью традиционных средств Я.П излишне громоздко,— это естественные и внешние соединения. При наличии возможности определения внешних ключей таблицы кажется достаточно странной потребность всякий раз явно указывать в запросах условие естественного соединения.
Например, во многих примерах запросов в лекции 14 присутствует условие соединения ЕМР. ОЕРТ НО = ОЕрт. ОЕВТ Но в тех случаях, когда в действительности нам требовался результат операции емр нйтоны. Оотн Оерт. Внешние соединения были введены еще Эдгаром Кодлом в!979 г. В целом, основная идея этой разновидности операции соединения состояла в том, что„с одной стороны, результат операции обычного соединения двух отношений повышает информационный уровень данных, поскольку в результате операции мы имеем информационно связанные данные.
Но, с другой стороны, в результирующем отношении мы теряем информацию об исходных объектах, которые оказались несвязанными и не вошли в результат соединения. Кодл придумал, как, используя неопределенные значения, определить обобщенную операцию, которая будет обладать достоинствами обычной операции соединения, не приводя к потере исходной информации. Вернее, он предложил три операции: левое внешнее соединение, правое внешнее соединение и полное (симметричное) внешнее соединение. Приведем их определения (в реляционных терминах данного курса).
Пусть имеются отношения г1 и г2, совместимые относительно операции взятия расширенного декартова произведения. Пусть з является результатом операции г1 ьерт Онтен сони Г2 Жмене солгр (левое внешнее соединение г1 и г2 по условию соглр). тогда не = нг1 оп(оп нг2. пусть гг1 В Вс1 и сг2 б Вг2.Тогда г г1 потоп ск2 й Ве втоц итольковтомслучае, когда сошр ~ г г1 иптоп Г Г2) = сх не.
Если имеется кортеж с Г1 б Вг1, для которого нет ни одного кортежа г Г2 е г2, такого, что соглр ~ сг1 потоп ГГД = Стоп,тО Г Г1 ио(ОП ГГ2„„,г б ВЗ,ГДЕ ГГ2„„зг — КОРтЕж, СООтастетвуюший нг2, все значения которого являются неопределенными'. * Здесь мы прнбегаем к компромнссу ме:кду реляцнонной термннологней н моделью данных яяц конечно, в реляционной модели кортеж нз неопределенных значений не может соответствовать мголовку отногяення, поскольку нсьг, не является значением нн одного типа данных. 319 Основы баз данных Курс Пусть я является результатом операции г1 в10нт О((ткв до((н г2 ннквк согхр (правое внешнее соединение г1 и г2 по условию ссир).
Тогда ня = Нг1 сп)оп нг2. Пусть сг1 е Вг1 и сг2 е Вг2. Тогда сг1 со)оп сг2 к Вя втом и только втом случае, когда ссир (Сг1 иШоп гг2) = Ггие. Если имеется кортеж сг2 е вг2, для которого нет ни одного такого кортежа сг1 е вг1, что сепР (Сг1 сп(оп Гг2) = Ггие,тО Сг1.„н сп)оп Гг2 6 ВЯ,ГДЕ Гг1„н — КОРтЕж, соответствующий Нг), все значения которого являются неопределенными. Наконец, пусть я является результатом операции г1 кнкь О((ткв гОНН г2 ННКВК сспр (полное внешнее соединение г1 и г2 по условию сояр). Тогда не = нг1 нп)оп нг2.
Пусть гг1 е Вг1 и гг2 е Вг2. Тогда сг1 оп(оп гг2 к Вявтомитольковтом случае, когда сотр (гг1 некое гг2) — Ггие. Если имеется кортеж сг1 Е Вг1, ЛЛЯ которого нет ни одного кортежа гг2 е Вг2,такого, что сотр (сг1 некое гг2) = ггие,то сг1 нп(оп ГГ2„ы, Е ВЯ, ГДЕ СГ2„ы; — КОРтЕж, СООтВЕтетВУЮШИй НГ2, ВСЕ ЗНаЧЕНИЯ КО- торого являются неопределенными. Если имеется кортеж Гг2 Е Вг2, для которого нет ни одного кортежа сг1 е Вг1, такого, что сагхр ( сг1 нп)оп ГГ2) = ГГиЕ,тО ГГ1„.Н ЕП1ОП СГ2 6 Кя, ГдЕ ГГ1ын — КОртЕж, СООтВЕтетвуюший Нг1, все значения которого являются неопределенными. Понятно, что традиционными средствами Б(.)1 можно выразить все виды внешних соединений (например, с испольюванием переключателей), но такие запросы будут очень громоздкими.
Компании-производители Б(.)).-ориентированных СУБД пытались обеспечивать выразительные средства внешних соединений путем расширения системы обозначений для операций сравнения. Этот подход был не слишком удачным и не обеспечивал обшего решения. В стандарте языка Я21. специфицирован отдельный специализированный подъязык для формирования выражений соединения таблиц. Такие выражения называются соединенными таблицами„и их можно использовать в качестве ссылок на таблицы в списке раздела Квом. Разработчики стандарта Б(.) не любят мельчить — в языке допускается 14 видов соединений: ° прямое соединение; а внутреннее соединение по условию; ° внутреннее соединение по совпадению значений указанных одноименных столбцов; ° естественное внутреннее соединение; ° левое внешнее соединение по условию; ° правое внешнее соединение по условию; ° полное внешнее соединение по условию; ° левое внешнее соединение по совпадению значений указанных одноименных столбцов; ° правое внешнее соединение по совпадению значений указанных одноименных столбцов; ° полное внешнее соединение по совпадению значений указанных одно- 320 Лекция 15 Гр ппироака и условия раздела Ндглмг», порождаемые н соединенные таблицы именных столбцов; в естественное левое внешнее соединение; ° естественное правое внешнее соединение; а естественное полное внешнее соединение; ° соединение объединением.
Во всех этих операциях нет ничего сложного, но их неформальное описание исключительно громоздко. Поэтому в разделе «Более сложные конструкции оператора выборки» мы определяем операции на формальном уровне, а потом иллюстрируем их на примерах. Наконец, последняя тема этой лекции относится к еще одному типу ссылок на таблицу, допускаемых в разделе РЕОМ: порождаемым таблицам с горизонтальной связью. Фактически порождаемая таблица с горизонтальной связью представляет собой выражение запросов, в котором может присутствовать корреляция со строками таблиц, специфицированных в списке раздела РЕОМ слева от данной порол(даемой таблицы с горизонтальной связью.
Наличие порождаемых таблиц с горизонтальной связью требует некоторого уточнения семантики выполнения раздела РРОМ оператора еееест. По нашему мнению, это средство является полностью избыточным, хотя и не вредным, поскольку его реализация не должна вызывать затруднений и/или снижать эффективность системы.
Агрегатные функции, группировка и условия РаЗДЕЛа ЛЛ(ггна В этом разделе мы систематически обсудим все аспекты группировки таблиц и вычисления агрегатных функций. Некоторые темы уже затрагивались на неформальном уровне в предыдуших лекциях. Семантика агрегатных функций Агрегатные функции (в стандарте ЯЯ[. они называются функциями над множествами)* определяются следующими синтаксическими правилами: <вес йгзпсойоп зрес111саоуоп> СОПИТ(*) еес Ецпсгъоц Гуре ([Р1ЕТ1ИСТ ) А(Л, ] на1це ехргевзйоп) ОЯОПР1ИО (со1цддг гейегепсе) <зес Ештсойоп Гуре> ( АЧО ) МАХ ) М1И [ ЕПМ ) ЕВЕРУ ) АИУ ) ЯОМЕ ) СОПИТ ' Оба термина являются приемлемыми. Речь кает об агрегатлых фулхциях, поскольку аргументом функции является агрегатное (составное) значение.
Речь идет о функциях ладмлозкестеами, поскольку аргументом функции является множество (в обшем случае, мультимножество) значений. Но более правильно было бы говорить о еруипоеых фулхцилх, поскольку в большинстве случаев такие функции работают на значениях столбцов групп строк. 321 Основы баз данных Ку о Как видно из этих правил, в стандарте $Щ:1999 определены пять стандартных агрегатных функций: сопит — число строк или значений, млх — максимальное значение, мтм — минимальное значение, Бом — суммарное значение и ~но — среднее значение, а также две «кванторные» функции е(гкг~ н яомк (гьчу) .
В последних двух случаях выражение должно иметь булевский тип. Обсуждение функции овоортмо мы отложим до следующей лекции. Агрегатные функции предназначены для того, чтобы вычислять некоторое значение для заданного мультимножества строк. Таким мультимножеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице, или (в вырожденных случаях) вся таблица. ДЛя ВСЕХ атрстатНЫХ фуНКцИй, КРОМЕ СОО(хт (*), фаКтИЧЕСКИй (т. Е. трсбуЕ- мый семантикой) порядок вычислений состоит в следующем. На основании параметров агрегатной функции из заданного мультимножества строк производится список значений.
Затем по этому списку значений производится вычисление функции. Если список оказался пустым, то значением функции солт для него является о, значением функции яомк — Гаме, значением функции л~, — г~ие, а значением всех остальных функций — мл,ь. Пусть т обозначает тип значений из этого списка (вернее, «наименьший общий» тип, см.