Ульман Дж. Базы данных на Паскале (главы 2, 3) ббк 32. 973. 2-01 У51 icon

Ульман Дж. Базы данных на Паскале (главы 2, 3) ббк 32. 973. 2-01 У51



Смотрите также:
Вопросы к государственному меж...
Вопросы к государственному междисциплинарному...
Структура базы данных Oracle. Основные объекты и термины базы данных...
Информационные системы, использующие базы данных: оборудование, программное обеспечение, данные...
Вопросы для подготовки к экзамену по курсу «Базы данных»...
Реферат на тему: Access. Базы данных...
Понятия о базах данных и системах управления ими. Классификация баз данных...
Инструкция по конвертации базы данных асиоу конвертацию данных осуществляет администратор...
Р. майсурадзе проектирование б a з данных Регистрировано редакционно- издательским советом гту...
Р. майсурадзе проектирование б a з данных Регистрировано редакционно- издательским советом гту...
Приказ 07. 12. 2011 с...
Андреева Е., Фалина И. Турбо-Паскаль в школе...



страницы:   1   2   3   4
скачать
Ульман Дж. Базы данных на Паскале

(главы 2, 3)


ББК 32.973.2-01

У51

УДК [[681.3.016: 519.682] +681.3-181.4])- 03 == 20


Ульман Дж.

У51 Базы данных на Паскале/Пер, с англ. М. В. Сергиев-

ского, А. В. Шалашова; Под ред. Ю. И. Топчеева.-М.:

Машиностроение, 1990.-368.: ил.

ISBN 5-217-00628-5


В книге английского автора процесс создания баз данных впервые описывается с позиций инженера-программиста. Многочисленные примеры структур данных и запросов дают возможность читателю быстро овладеть мощными языковыми средствами и могут быть легко обобщены на ситуациях, возникающих в технических областях. Основное внимание автор уделяет широко распространенным реляционным базам данных, реализуемых на мини- и микроЭВМ, в частности на персональных компьютерах.

Для инженеров-разработчиков и пользователей баз данных во всех областях техники.


Оригинал книги опубликован на английском языке

издательством Оксфорд Юниверсити Пресс, г. Оксфорд, Англия


ПРОИЗВОДСТВЕННОЕ ИЗДАНИЕ

ДЖУЛИАН УЛЬМАН

БАЗЫ ДАННЫХ НА ПАСКАЛЕ


Ордена Трудового Красного Знамени издательство <Машиностроение>

107076, Москва, Стромынский пер., 4


Типография № 6 ордена Трудового Красного Знамени

издательства <Машиностроение> при Государственном комитете СССР по печати.

193144, Ленинград, ул. Моисеенко, 10.


ISBN 5-217-00628-5 (СССР) @ Julian Ullmann, 1985

ISBN 0-19-859642-1 (Велико- @ Перевод на русский язык и

британия) ответы к упражнениям,

М. В. Сергиевский, А. В. Ша-

лашов, 1990


ОГЛАВЛЕНИЕ


Введение .....................


Глава 2. РЕЛЯЦИОННАЯ АЛГЕБРА


2.1. Введение

2.2. Музыкальные файлы

2.3. Операции и операнды

2.4. Проектирование

2.5. Выбор

2.6. Простейшие запросы

2.7. Соединение

2.7.1 Соединение по одному полю

2.7.2. Использование соединения при ответах на запросы

2.7.3. Соединение по нескольким полям

2.8. Упражнения

2.9. Объединение

2.10. Пересечение

2.11. Вычитание

2.12. Деление

2.13. Умножение

2.14. Упражнения.

2.15. Оптимизация запросов


^ Глава 3. ПРИНЦИПЫ НОРМАЛИЗАЦИИ


3.1. Распределение полей по файлам

3.2. Полная декомпозиция

3.3. Дублирование информации

3.3.1. Примеры дублирования

3.3.2. Ключи-кандидаты

3.4. Присоединенные записи

3.5. Нормализация

3.5.1. Пятая нормальная форма

3.5.2. Упражнения

3.6. функциональная зависимость

3.6.1. 0пpеделениe функциональной зависимости

3.6.2. Теорема Хита

3.7. Нормализация на основе функциональной зависимости.

3.7.1. Первая нормальная форма

3.7.2. Вторая нормальная форма

3.7.3. Третья нормальная форма

3.7.4. Нормальная форма Бойса-Кодда

3.8. Упражнения

3.9. Четвертая нормальная форма

3.10. Объекты и атрибуты

3.10.1. Функциональная зависимость атрибутов от объектов

3.10.2. Построение набора файлов по эмпирическим данным

З.10.З. Преобразование набора файлов

3.11. Упражнения


ВВЕДЕНИЕ


Обширный предмет исследований и разработок, объединяемых под общим названием «Технология проектирования баз данных», принадлежит к числу важнейших разделов современной информатики. Этим определяется и место данного предмета в профессиональной подготовке будущих специалистов по вычислительной технике.

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

дисциплин.

Автор стремился построить книгу таким образом, чтобы изучение технологии проектирования баз данных могло вестись на более раннем этапе цикла, посвященного вычислительной технике, чем это принято в настоящее время. Опыт преподавания показывает, что такие понятия, как пятая нормальная форма или

структуры данных КОДАСИЛ, вполне доступны хорошо успевающему первокурснику. Между тем, раннее знакомство с технологией проектирования баз данных представляется желательным по многим соображениям.

а. Очень важно, чтобы уже в самом начале обучения основам вычислительной техники студент приобщался к ее практическому применению, и базы данных предоставляют для этого самый разнообразный материал.

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


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

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

курс будет также способствовать более осознанному усвоению общих понятий вычислительной техники, таких, например, как иерархия уровней программирования.

д. Следует, наконец, упомянуть и о тех трудностях, с которыми сталкивается преподаватель, читающий на одном из последних семестров курс по архитектуре баз данных, если технология проектирования баз данных изучается в параллель с этим

курсом или даже позже.

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

баз данных, однако в ней упоминаются и некоторые методы контроля информации. В гл. 6 обсуждение вопросов групповой обработки сочетается с описанием В-деревьев, используемых впоследствии для организации доступа к данным.

Здравый смысл подсказывает, что изучению основ технологии баз данных должно предшествовать хотя бы минимальное знакомство с практическими приложениями файлов. По этой причине гл. 1 начинается с описания типичного предприятия, использующего в своей деятельности различные виды данных. В этой же главе приводятся наглядные примеры файлов, записей, полей и ключей.

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


Для иллюстрации излагаемых принципов и книге было введено всего два языка - один язык запросов реляционной алгебры и один язык более низкого уровня, являющийся, по существу, дополнением Паскаля. Из всего многообразия реляционных языков запросов был выбран язык реляционной алгебры, поскольку его операции весьма удобны при выводе нормальных форм, описываемых в гл. 3. Кроме того, эти операции широко используются в гл. 7 и 8. Реляционная алгебра представлена как самостоятельный язык, не погруженный в среду языка более высокого уровня.

На примере языка нижнего уровня предполагалось продемонстрировать студентам соотношение между средствами программирования путей доступа к базе данных и стандартными средствами Паскаля. С этой целью в гл. 5 и 6 Паскаль был дополнен небольшим набором процедур, в том числе INSERT, FIND и REMOVE. Подобное расширение в какой-то мере приближает Паскаль к фирменным языкам манипулирования данными. Разумеется, это расширение является минимальным и не идет ни в какое сравнение с другими дополнительными средствами, за счет которых Паскаль приобретает некоторые возможности, свойственные лишь реляционным языкам запросов.

Опыт показывает, что целесообразно размещать материал в том порядке, в котором он лучше усваивается студентом, даже если при этом приходится нарушать традиционную логику, идя от частного к общему. Именно поэтому книга начинается с почти элементарных практических примеров, а завершается в гл. 9 анализом достаточно абстрактных для начинающего проблем организационного характера. Вряд ли гл. 9 пришлась бы по вкусу читателю, будь она в самом начале книги, хотя во многих учебных пособиях с этого примерно я начинается изложение предмета.

В завершение автору хотелось бы поблагодарить Спобана Норта, Хью Лэфферти, Джима Мак-Грегора и Лоренса Эткинсона за их конструктивные замечания по содержанию некоторых разделов рукописи. Дополнительные средства Паскаля, описанные в книге, были полностью реализованы Нортом на ЭВМ PRIMOS

750, оснащенной системой PRIMOS (см. A Pascal database management system. Journal of Pascal, Ada and Modula 2, Vol. 3, No. 6, 1984, pp 15--22).


Шеффилд, декабрь 1984


Дж. УЛЬМАН


ГЛАВА 2

РЕЛЯЦИОННАЯ АЛГЕБРА


2.1. ВВЕДЕНИЕ


Если файлы хранятся в памяти компьютера, пользователь не может сам взять и прочитать или исправить их содержимое, как в добрые старые времена, когда они хранились в папках с бумагами. Вместо этого он должен скомандовать машине, чтобы та проделала за него требуемые операции. Но иногда пользователю бывает нужно выполнить такие действия, которые крайне сложно, а зачастую и невозможно запрограммировать на обычном языке, в том числе на Паскале. В таких случаях приходится переходить на специальный язык обработки данных, представляющий расширение стандартного языка программирования. Альтернативой может служить высокоуровневый язык запросов - специализированный язык для работы с файлами. Между языками запросов и обработки данных трудно провести четкую границу, и некоторые специалисты предпочитают не различать их вовсе.

Примером языков подобного типа является простейший язык запросов на основе реляционной алгебры. Существуют и другие, порой весьма изощренные и обладающие широкими возможностями языки, по форме напоминающие примитивный английский,

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


2.2. МУЗЫКАЛЬНЫЕ ФАЙЛЫ


Воспользуемся набором намеренно упрощенных файлов, которые в дальнейшем будут именоваться музыкальными.


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

Все даты в файлах будут представлены восьмизначными числами, в которых первая слева четверка цифр указывает год, следующая пара - номер месяца, а две последние цифры - число месяца. В частности, 19910507 обозначает <7 мая 1991 г.>

Достоинство такой непривычной записи дат в том, что их можно использовать непосредственно как операнды в операциях сравнения. Если, например, d = 19891102, можно утверждать, что справедливо неравенство 19910506 > d.

Дадим теперь краткую характеристику музыкальных файлов и входящих в них полей.


МУЗЫКАНТЫ

(MUSICIANS)


НОММУЗ

(MNO)


ИМЯ МУЗ

(MNAME)

ДАТАРОЖ

(BDATE)

СТРАНАРОЖ

(BCOUN TRY)


СОЧИНЕНИЯ

(COMPOSITIONS)


НОМСОЧ

(CNO)


НАЗВАНИЕ

(TITLE)

НОММУЗ

(MNO)

ДАТАСОЧ

(CDATE)


АНСАМБЛИ

(ENSEMBLES)


НОМАНС

(ENO)


НАЗВАНС

(ENAME)

СТРАНАНС

(ECOUNTRY)

НОММУЗ

(MNO)


ИСПОЛНЕНИЯ

(PERFORMANCES)

НОМСОЧ

(CNO)


ДАТАИСП

(PDATE)

ГОРОД

(TOWN)

СТРАНА

(COUNTRY)

НОММУЗ

(MNO)


НОМАНС

(ENO)


ИСПОЛНИТЕЛИ

(PERFORMERS)


НОМИСП

(PNO)


НОММУЗ

(MNO)

ИНСТРУМЕНТ

(INSTRUMENT)

ОЦЕНКА

(GRADE)


^ УЧАСТНИКИ АНСАМБЛЕЙ

(ENSEMBLES МЕМВЕRS)


НОМАНС

(ENO)

НОМИСП

(PNO)

{Имя файла, содержащего персональную информацию о музыкантах. Ниже перечислены поля этого файла}

{Номер музыканта. Поле служит первичным ключом файла, а также используется как перекрестная ссылка)

{Имя музыканта. Для простоты записывается только фамилия)

{Дата рождения}


(Страна происхождения)


{Имя файла, содержащего краткую

информацию о сочинениях. Ниже перечислены поля файла)

{Номер сочинения. Поле служит первичным ключом файла, а также используется как перекрестная ссылка}

{Название произведения)


{Номер музыканта, присвоенный композитору)

{Дата создания произведения)


{Имя файла, содержащего информацию об ансамблях. Ниже перечислены

поля файла}


{Номер ансамбля. Поле служит первичным ключом файла, а также используется как перекрестная ссылка}

{Название ансамбля}


(Страна, где был организован ансамбль)

{Номер музыканта, присвоенный руководителю ансамбля)


{Имя файла, содержащего информацию об исполнениях сочинений. Ниже

перечислены поля файла)

{Номер исполненного сочинения}


{Дата исполнения)


{Место, где было исполнено сочинение)

{Страна, где было исполнено сочинение)

{Номер музыканта, присвоенный дирижеру ансамбля, исполнявшего сочинение)


{Номер ансамбля, исполнявшего сочинение)


{Имя файла, содержащего информацию о специальностях и квалификации

исполнителей (некоторые из них могут играть на нескольких инструментах, а другие не умеют ни на одном).

Ниже перечислены поля файла)

{Номер исполнителя. Поле служит

первичным ключом файла, а также

используется как перекрестная ссылка)

{Номер музыканта, присвоенный исполнителю}

{Инструмент, на котором играет исполнитель}

{Оценка качества исполнения)


{Имя файла, содержащего информацию о том, в каких ансамблях играют

исполнители. Ниже перечислены поля

файла}

{Номер ансамбля)

{Номер исполнителя}




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


МУЗЫКАНТЫ

НОММУЗ

М1

М2

МЗ

М4

М5

М6

М7

М8

М9

ИМЯМУЗ

ЭЙБИЙСКИЙ

БИСИЙСКИЙ

СИДИЙСКИЙ

ЭЙБИЙСКИЙ

ЭЙЭФСКИЙ

БИДИЙСКИЙ

ЭЙСИЙСКИЙ

СИДИЙСКИЙ

ДИБИЙСКИЙ

ДАТАРОЖ

19410609

18181211

18980404

19360621

19510919

19021025

19471104

18980404

19540130

СТРАНАРОЖ

УДЙЛАНДИЯ

ЗЕДЛАНДИЯ

ЭКСЛАНДИЯ

УАЙЛАНДИЯ

ЗЕДЛАНДИЯ

ТИЛАНДИЯ

УАЙЛАНДИЯ

ТИЛАНДИЯ

УАЙЛАНДИЯ



СОЧИНЕНИЯ

номсоч

С1

С2

СЗ

С4

С5

С6

НАЗВАНИЕ

ЭЛПИС

ЭМТЬЮН

КЕЙСОНГ

ЭЙЧТЬЮН

ЭЛПИС

КЕЙСОНГ

НОММУЗ

М5

М9

МЗ

М5

МЗ

М5


ДАТАСОЧ

19830605

19851108

19340120

19840929

19290530

19821204



АНСАМБЛИ

HOMAHC

Е1

E2

E3

E4

E5

E6

E7


НАЗВАНС

ЭЙЗ

ВИЗ

сиз

АЙЗ

ДИЗ

ЭФС

ВИЗ

СТРАНАНС

ЭКСЛАНДИЯ

ЭКСЛАНДИЯ

ТИЛАНДИЯ

ЗЕДЛАНДИЯ

ЭКСЛАНДИЯ

ЭКСЛАНДИЯ

ЗЕДЛАНДИЯ

НОММУЗ

М7

М5

М7

М4

М5

М5

М4



ИСПОЛНЕНИЯ

НОМСОЧ

С5

С1

С5

СЗ

С5

С6

Cl

С4

ДАТАИСП

19860530

19860615

19860622

19860622

19860703

19860705

19860711

19860719

ГОРОД

ТИТОН

АРБИ

ЭСТОН ЭСФИЛД

ЭСТОН

АРБИ

ТИБИ

АРБИ

СТРАНА

ТИЛАНДИЯ

ЭКСЛАНДИЯ

ЭКСЛАНДИЯ

ЭКСЛАНДИЯ

ТИЛАНДИЯ

ЗЕДЛАНДИЯ

ЭКСЛАНДИЯ

УАЙЛАНДИЯ

НОММУЗ

М9

М1

М9

М1

М9

М7

М1

М4

НОМАНС

ЕЗ

E6

E5

Е1

E5

E4

Е1

E2



ИСПОЛНИТЕЛИ

НОМИСП

Р1

Р2

РЗ

Р4

Р5

Р6

Р7

Р8

Р9


НОММУЗ

М1

М1

М1

М4

М5

М5

М9

М9

М7

ИНСТРУМЕНТ

САКСОФОН

ФЛЕЙТА

ФОРТЕПИАНО

ТРУБА

СКРИПКА

АЛЬТ

КЛАРНЕТ

САКСОФОН

ФОРТЕПИАНО

ОЦЕНКА

ОТЛИЧНО

СРЕДНЕ

СКВЕРНО

ОТЛИЧНО

ОТЛИЧНО

ПЛОХО

ОТЛИЧНО

СКВЕРНО

СРЕДНЕ


УЧАСТНИКИ АНСАМБЛЯ

НОМАНС

Е1

Е1

Е1

E2

E2

Е3

E4

E4

E4

E5

Е5

Е6

E6

E7

Е7

НОМИСП

Р5

Р8

Р9

Р5

РЗ

Р9

Р4

Р1

Р7

Р5

Р9

P1

Р7

РЗ

Р5



2.3. ОПЕРАЦИИ И ОПЕРАНДЫ


Имена и значения полей, образующих запись, определяют ее тип. Неупорядоченную совокупность однотипных записей называют отношением (Термин <отношение> в оригинале – <реляция>. Отсюда и произошло название раздела математики <реляционная алгебра>. - Прим. пер.). Понятие файла по сравнению с отношением является более общим - действительно, в файле могут содержаться записи разных типов (хотя в книге всегда подразумевается противоположное). Кроме того, существуют способы организации файлов, делающие возможной упорядоченность входящих в них записей и ее использующие. Предваряя обсуждение операндов реляционной алгебры, рассмотрим простейший оператор Паскаля:

F: = (А + В)* С - D.


Здесь А, В, С и D -операнды, а знаки +, * и - обозначают выполняемые над ними операции. Итоговый результат присваивается переменной F.

В реляционной алгебре и операнды и результата всех действий являются отношениями. Несколько упрощая, будем в дальнейшем отождествлять отношения реляционной алгебры с файлами. Порядок размещения записей в файлах-операндах никак не учитывается при выполнении операций, а в файлах-результатах

их распределение считается произвольным.

В работах по теории отношений и реляционной алгебре аналоги записей иногда именуются кортежами, полей - доменами, однако в книге эта специальная терминология не употребляется.

Познакомимся теперь с операциями, используемыми в реляционной алгебре.


2.4. ПРОЕКТИРОВАНИЕ


В операции проектирования участвует единственный операнд, который обозначим как ИМЯФАЙЛА (FNAME). Это может быть и файл с исходными данными, и файл, созданный в результате преобразований реляционной алгебры. Дадим следующее

определение операции проектирования


proj список имен полей (ИМЯ ФАЙЛА)


В списке имен, следующем за оператором proj, должны упоминаться только те поля, что входят в состав записей ИМЯФАЙЛА. Результат операции проектирования формируется следующим образом:


а) Из файла ИМЯФАЙЛА удаляются все поля, имена которых не фигурируют в списке;

б) Из полученной в п. а) совокупности записей удаляются повторяющиеся, так что итог операции не содержит одинаковых записей.


Первый пример - proj ИНСТРУМЕНТЫ (ИСПОЛНИТЕЛИ)


САКСОФОН

ФЛЕЙТА

ФОРТЕПИАНО

ТРУБА

СКРИПКА

АЛЬТ

КЛАРНЕТ


Как можно видеть, каждый инструмент назван лишь однажды.


Второй пример - proj ИМЯМУЗ, СТРАНАРОЖ (МУЗЫКАНТЫ)


ЭЙБИЙСКИЙ УАЙЛАНДИЯ

БИСИЙСКИЙ ЗЕДЛАНДИЯ

СИДИЙСКИЙ ЭКСЛАНДИЯ

ЭЙЭФСКИЙ ЗЕДЛАНДИЯ

БИДИЙСКИЙ ТИЛАНДИЯ

ЭЙСИЙСКИЙ УАЙЛАНДИЯ

СИДИЙСКИЙ ТИЛАНДИЯ

ЛИВИЙСКИЙ УАЙЛАНДИЯ


2.5. ВЫБОР


Подобно проектированию, операция выбора имеет единственный операнд, который может быть файлом с исходными данными или файлом, полученным в результате преобразований реляционной алгебры. Синтаксис операции выбора таков:


sel условие (ИМЯФАЙЛА)


Итогом операции является совокупность записей ИМЯФАЙЛА, объединяющая лишь те из них, которые удовлетворяют заданному условию. Например, в результате операции


sel СТРАНАРОЖ='УАЙЛАНДИЯ' (МУЗЫКАНТЫ)


формируется следующий набор записей:


М1 ЭЙБИЙСКИЙ 19410609 УАЙЛАНДИЯ

М4 ЭЙБИЙСКИЙ 19360621 УАЙЛАНДИЯ

М7 ЭЙСИЙСКИЙ 19471104 УАЙЛАНДИЯ

М9 ЛИВИЙСКИЙ 19540130 УАЙЛАНДИЯ


Обратим внимание на то, что в приведенном примере название страны заключено в апострофы. Они указывают, что эта строка символов, называемая также литералом, является значением поля СТРАНАРОЖ. В то же время СТРАНАРОЖ записано без апострофов, поскольку это имя поля, а не его значение. Данное правило относится к любым одиночным символам и строкам, представляющим литералы. Их всегда помещают в апострофы, чтобы отличать от имен полей, переменных и др., которые, напротив, нельзя записывать в апострофах. Числовые константы также записываются без апострофов, за исключением тех случаев, когда они выступают как символьные строки. В частности, из файла МУЗЫКАНТЫ можно выбрать записи о музыкантах, родившихся ранее 1946 г., с помощью следующей операции:


sel ДАТАРОЖ > 19451231 (МУЗЫКАНТЫ)


Здесь 19451231 понимается как целая константа, а не как строка символов, и поэтому не заключается в апострофы.

Условие, определяющее результат выбора, представляет собой выражение, которое может включать операции сравнения <, =, >, <=, => и <>, а также логические операции and (<И>), ог (<ИЛИ>) и not (<НЕ>). В то же время запрещено использовать арифметические операции +,-, *,/. Любой операнд, входящий в условие, сам не может быть результатом преобразований реляционной алгебры. В остальном условия записываются согласно правилам стандартного Паскаля.

Предположим, например, что из файла МУЗЫКАНТЫ требуется выбрать данные обо всех музыкантах, родившихся в Уайландии не позже 1946 г. Это можно сделать, воспользовавшись операцией


sel (СТРАНАРОЖ='УАЙЛАНДИЯ') and (ДАТАРОЖ>19451231) (МУЗЫКАНТЫ)


которая дает следующие две записи:


М7 ЭЙСИЙСКИЙ 19471104 УАЙЛАНДИЯ

М9 ЛИВИЙСКИЙ 19540130 УАЙЛАНДИЯ


2.6. ПРОСТЕЙШИЕ ЗАПРОСЫ


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

Запрос: перечислить фамилии всех музыкантов, родившихся

не ранее 1946 г.

Задача решается с помощью операций

proj ИМЯМУЗ (sel ДАТАРОЖ>19451231 (МУЗЫКАНТЫ)).


Приведем еще один пример.

Запрос: перечислить номера всех музыкантов, играющих на фортепиано, кроме тех, игра которых оценивается как <скверно>.

Ответ дает следующая пара операций:

proj НОММУЗ (sel (ИНСТРУМЕНТ-ФОРТЕПИАНО')

and (ОЦЕНКА <> 'СКВЕРНО')

(ИСПОЛНИТЕЛИ)).

Результат включает единственный номер М7. Ответ, однако, может быть и <отрицательным>, т. е. не содержать никакой информации. Это демонстрирует следующий пример.

Запрос: указать все страны и города, в которых любые произведения исполнялись 22 июня 1986 г.

Этот запрос следует записать таким образом:

proj ГОРОД, СТРАНА (sel ДАТАИСП=19860622 (ИСПОЛНЕНИЯ)).

Ни одной записи, отвечающей заданному условию, не найдено.


2.7. СОЕДИНЕНИЕ

2.7.1. СОЕДИНЕНИЕ ПО ОДНОМУ ПОЛЮ


В реляционной алгебре определен целый ряд операций соединения. Ниже будет рассматриваться лишь одна разновидность соединения, именуемого естественным. Поэтому далее термином соединение будет обозначаться, если не оговорено иное,

именно этот вид операции.

Очевидно, любое поле записи, подобно переменной Паскаля, является объектом определенного типа - например, целым числом (INTEGER), вещественным числом (REAL) или строкой символов (STRING). В операции соединения участвуют два операнда, которые запишем как ИМЯФАЙЛА1 и ИМЯФАЙЛА2. Здесь и далее считается, что файлы могут содержать как исходные данные, так и полученные в результате преобразований реляционной алгебры. Для простоты предположим сначала, что в состав ИМЯФАЙЛА1 и ИМЯФАЙЛА2 входит ровно одно общее для них поле, имеющее в обоих файлах одинаковые имя и тип. Например, у файлов МУЗЫКАНТЫ и СОЧИНЕНИЯ таким общим полем является НОММУЗ. Что же касается полей, содержащих даты,

то у них разные имена: в первом файле ДАТАРОЖ, во втором - ДАТАСОЧ.

Рассмотрим еще один простой пример. Допустим, в ИМЯФАЙЛА1 присутствуют поля G1 и F1, содержащие следующую информацию:


G1

d

h

У

F1

3

7

4



В ИМЯФАЙЛА2 имеются поля F1 и G2, содержимое которых таково:


F1

3

3

7

4

4

G2

A

В

А

С

В


Результатом операции соединения


^ ИМЯФАЙЛА1 join ИМЯФАЙЛА2


является конкатенация каждой записи ИМЯФАЙЛА1 с каждой записью ИМЯФАЙЛА2, у которых совпадают данные в общем поле, причем само это поле в образующейся записи помещается лишь однажды. (Конкатенацией называется слияние двух или

нескольких строк в одну).


В обсуждаемом примере сливаются записи

G2

А

В

F1

3

3


из ИМЯФАЙЛА2 с записью


G1

D

F1

3


из ИМЯФАЙЛА1. Действительно, у них одинаковые значения (равные 3) общего поля F1. После выполнения операции


^ ИМЯФАЙЛА1 join ИМЯФАЙЛА2


из этих записей формируются две новые:


G1

d

d

F1

3

3

G2

А

В



Однако это лишь часть результата. В ИМЯФАЙЛА1 есть запись


G1

h

F1

7


которую можно cлить c запиcью


F1

7

G2

A


из ИМЯФАЙЛА2, поскольку у них совпадают значения (равные 7) общего поля F1. Наконец, результат операции должен содержать конкатенацию пары записей


F1

4

4

G2

C

B


из ИМЯФАЙЛА2 в запиcью


G1

y



F1

4


из ИМЯФАЙЛА1. У них в общем поле F1 помещается одно и то же число 4. В итоге операции

^ ИМЯФАЙЛА1 join ИМЯФАЙЛА2


даст cледующую совокупность записей:

G1

d

d

h

У

У

F1

3

3

7

4

4

G2

A

В

A

С

В



2.7.2. ИСПОЛЬЗОВАНИЕ СОЕДИНЕНИЯ ПРИ ОТВЕТАХ НА ЗАПРОСЫ


С помощью операции


proj НОММУЗ (СОЧИНЕНИЯ)


можно получить перечень номеров, присвоенных всем композиторам, т. е. музыкантам, создавшим хотя бы по одному произведению. Но чтобы узнать имена всех композиторов, c полями НОММУЗ в записях файла СОЧИНЕНИЯ нужно связать соответcтвующие поля ИМЯМУЗ. Для этого достаточно произвести соединение файлов СОЧИНЕНИЯ и МУЗЫКАНТЫ, в результате которого произойдет слияние каждой записи файла СОЧИНЕНИЯ с записью файла МУЗЫКАНТЫ, содержащей имя автора.

Таким образом, список имен композиторов сформирует пара операций


proj ИМЯМУЗ (СОЧИНЕНИЯ join МУЗЫКАНТЫ).


Рассмотрим еще один пример.

Запрос: указать имя и дату рождения каждого композитора, написавшего вещь под названием <Кейсонг>.

Ответ дает следующая последовательность операций:


proj ИМЯМУЗ, ДАТАРОЖ (sel НАЗВАНИЕ='КЕЙСОНГ' (СОЧИНЕНИЯ) join МУЗЫКАНТЫ).


С помощью операции выбора из файла СОЧИНЕНИЯ выделяются записи всех сочинений, названных <Кейсонг>. Эти записи соединяются затем с теми записями файла МУЗЫКАНТЫ, у которых совпадают значения поля НОММУЗ. Это означает, что

каждая отобранная запись файла СОЧИНЕНИЯ дополняется информацией об авторе данного произведения. Окончательным итогом описанной последовательности операций реляционной алгебры являются следующие данные:


СИДИЙСКИЙ 18980404

ЭЙЭФСКИЙ 19510919


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

Запрос: перечислить все инструменты, на которых играют в ансамбле <Эйз> из Зедландии.

Вот выражение реляционной алгебры, которое позволит получить ответ на этот запрос:


proj ИНСТРУМЕНТ

(proj НОМАНС

(sel (НАЗВАНИЕ='ЭЙЗ') and (СТРАНАНС='ЗЕДЛАНДИЯ') (АНСАМБЛИ))

join УЧАСТНИКИ_АНСАМБЛЕЙ join ИСПОЛНИТЕЛИ).


В результате первого (считая слева) соединения формируется набор номеров НОМИСП всех участников названного ансамбля. Второе соединение образует совокупность записей, содержащих названия инструментов, на которых играют исполнители.

Операции выбора в преобразованиях реляционной алгебры могут выполняться более чем над одним файлом. Проиллюстрируем это следующим примером.

Запрос: указать, когда в Эксландии исполнялось произведение под названием <Эмтьюн>.

Ответ на запрос получим с помощью такого выражения:


proj ДАТАИСП

(sel СТРАНАИСП='ЭКСЛАНДИЯ' (ИСПОЛНЕНИЯ)

join proj НОМСОЧ (sel НАЗВАНИЕ='ЭМТЬЮН' (СОЧИНЕНИЯ))).


Еще один пример развивает предыдущий. В нем потребуется вторая операция соединения.


Запрос: указать автора любого произведения, названного Эмтьюн, которое хотя бы однажды исполнялось в Эксландии.


На запрос отвечает следующее выражение:

proj ИМЯМУЗ

(proj НОМСОЧ

(sel СТРАНА='ЭКСЛАНДИЯ' (ИСПОЛНЕНИЯ)) join

sel НАЗВАНИЕ='ЭМТЬЮН' (СОЧИНЕНИЯ) join МУЗЫКАНТЫ).


В таком множестве операций нетрудно и запутаться. Недаром многие предпочитают конструировать преобразования реляционной алгебры, а не разбираться в них.


2.7.3. СОЕДИНЕНИЕ ПО НЕСКОЛЬКИМ

ПОЛЯМ


Соединением двух файлов, не имеющих ни одного общего поля, является пустое множество. Если же у файлов ИМЯФАЙЛА1 и ИМЯФАЙЛА2, наоборот, не одно, а несколько общих полей, то соединение включает конкатенацию каждой записи ИМЯФАЙЛА1 с каждой записью ИМЯФАЙЛА2, у которой совпадают с первой значения всех общих полей.

Предположим, например, что файл ИМЯФАЙЛА1 содержит три записи:


G1

d

h

У

F1

3

7

4

F2

H

N

H


а файл ИМЯФАЙЛА2 - пять:


F1

3

3

7

4

4

F2

H

H

N

H

H

G2

A

B

A

C

B


Операция соединения


^ ИМЯФАЙЛА1 join ИМЯФАЙЛА2


формирует следующий набор данных:


G1

d

d

h

У

Y

FI

3

3

7

4

4

F2

H

H

N

H

H

G2

A

В

A

С

В



Как и прежде, в полученных записях имеется лишь по одному общему полю.


Запрос: указать страну и название каждого ансамбля, руководитель которого выступает одновременно и как исполнитель.

Ответ дает последовательность операций


proj НАЗВАНС, СТРАНАНС

(АНСАМБЛИ join ИСПОЛНИТЕЛИ join УЧАСТНИКИ АНСАМБЛЕЙ).


Поясним написанное. В результате первого соединения номер исполнителя НОМИСП связывается с номером НОМАНС, если этот исполнитель руководит ансамблем. Таким образом, все руководители, не являющиеся исполнителями, после этого соединения удаляются из списка. Второе соединение осуществляется

на основе двух общих полей, НОМИСП и НОМАНС. После него из результата предшествующего соединения исключаются записи, содержащие пары НОМИСП и НОМАНС, отсутствующие в записях файла УЧАСТНИКИ_АНСАМБЛЕЙ. Тем самым отсеиваются ансамбли, в которых не играют их руководители.


2.8. УПРАЖНЕНИЯ


1. Составьте последовательность операций реляционной алгебры, с помощью которых можно получить ответы на следующие запросы:

а) назвать города Эксландии, в которых давались концерты любых ансамблей;

б) указать дату создания каждого произведения под названием <Кейсонг>;

в) перечислить имена исполнителей, играющих на саксофоне;

г) перечислить названия сочинений, написанных Эйэфским;

д) указать даты исполнения произведений, созданных композиторами - уроженцами Зедландии;

е) перечислить руководителей всех ансамблей, в составе которых есть саксофонисты.


3. Сконструируйте выражения, дающие ответы на запросы относительно содержимого музыкальных файлов:

а) перечислить названия всех эксландских ансамблей, среди участников которых есть саксофонисты;

б) назвать все города Эксландии, в которых исполнялись любые вещи, созданные не ранее 1947 г.;

в) перечислить страны, города и даты проведения концертов, на которых композиторы дирижировали исполнением собственных сочинений.


2.9. ОБЪЕДИНЕНИЕ


Наряду с выбором, проектированием и соединением в реляционной алгебре определены операции объединения, пересечения, вычитания, деления и умножения. Объединение, пересечение и вычитание применяются только к файлам с одинаковыми

именами и типами полей. Иными словами, у файлов-операндов должны совпадать типы записей.


Результатом операции объединения


^ ИМЯФАЙЛА1 union ИМЯФАЙЛА2


является совокупность записей, входящих хотя бы в один, а возможно, и в оба операнда. Пусть, например, ИМЯФАЙЛА1 включает записи


F1

a

b

c

G1

4

5

6


а ИМЯФАЙЛА2


F1

d

b

e

c

G1

2

5

4

6


В этом случае операция


^ ИМЯФАЙЛА1 union ИМЯФАЙЛА2


дает следующий набор записей:


F1

а

b

с

d

e

G1

4

5

6

2

4


При ответах на некоторые запросы вместо объединения предпочтительнее пользоваться выборов, включая в его условие операцию <ИЛИ>. Приведем пример подобной ситуации.

Запрос: назвать имена всех музыкантов, родившихся в Уайландии или Зедландии.

Ответ на этот запрос получим с помощью выражения:


proj ИМЯМУЗ

(sel (СТРАНАРОЖ = 'УАЙЛАНДИЯ') оr

(СТРАНАРОЖ = 'ЗЕДЛАНДИЯ') (МУЗЫКАНТЫ)).


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

Еще один пример.

Запрос: перечислить имена всех музыкантов, родившихся в Уайландии либо сочинивших вещь под названием <Кейсонг>.


Ответ на запрос даст следующая последовательность операций:


proj ИМЯМУЗ (sel СТРАНАРОЖ ='УАЙЛАНДИЯ' (МУЗЫКАНТЫ))

union

proj ИМЯМУЗ (МУЗЫКАНТЫ join sel НАЗВАНИЕ = 'КЕЙСОНГ' (СОЧИНЕНИЯ)).


Первым операндом в операции объединения служит набор имен музыкантов, родившихся в Уайландии, вторым - набор, объединяющий имена композиторов, которые написали произведения, названные <Кейсонг>.


2.10. ПЕРЕСЕЧЕНИЕ


В результате выполнения операции пересечения


^ ИМЯФАЙЛА1 intersection ИМЯФАЙЛА2


получается набор записей, входящих в состав обоих файлов. Если, например, в файле ИМЯФАЙЛА1 содержатся записи


F1

a

b

c

G1

4

5

6


а в ИМЯФАЙЛА2


F1

d

b

e

c

G1

2

5

4

6


то их пересечением является следующая совокупность записей.


F1

b

с

G1

5

6


Пример запроса, для ответа на который необходимо применить операцию пересечения.


Запрос: назвать имена всех композиторов, являющихся авторами по меньшей мере двух произведений - Кейсонг и Элпис.

Ответ можно получить с помощью такого выражения:


proj ИМЯМУЗ

(МУЗЫКАНТЫ join (proj НОММУЗ (sel НАЗВАНИЕ = 'КЕЙСОНГ' (СОЧИНЕНИЯ))

intersection

proj НОММУЗ (sel НАЗВАНИЕ = 'ЭЛПИС'(СОЧИНЕНИЯ)))).


А вот для ответа на следующий запрос операция пересечения не потребуется.

Запрос: перечислить всех композиторов, родившихся в Уайландии не позднее 1945 г.

Вместо пересечения здесь проще, воспользоваться логическим <И> в условии операции выбора (этого не удалось бы сделать в предыдущем случае).


proj ИМЯМУЗ

(sel (СТРАНАРОЖ='УАЙЛАНДИЯ') and (ДАТАРОЖ<19460101) (МУЗЫКАНТЫ)).


2.11. ВЫЧИТАНИЕ


Результатом операции вычитания


ИМЯФАЙЛА1 difference ИМЯФАЙЛА2


является совокупность записей, имеющихся в ИМЯФАЙЛА1, но отсутствующих в ИМЯФАЙЛА2. Если, например, ИМЯФАЙЛА1 содержит записи


F1

a

b

c

f

G1

4

5

6

5


а в ИМЯФАЙЛА2


F1

d

b

e

c

G1

1

5

4

6


то операция


^ ИМЯФАЙЛА1 difference ИМЯФАЙЛА2


формирует набор записей


F1

a

f

G1

4

5



Приведем пример запроса, для ответа на который приходится использовать вычитание.

^ Запрос: назвать имена всех музыкантов, не сочиняющих произведений.

Ответ даст последовательность операций


proj ИМЯМУЗ

(proj НОММУЗ (МУЗЫКАНТЫ)

difference

proj НОММУЗ (СОЧИНЕНИЯ) join МУЗЫКАНТЫ).


Интерес здесь представляет внутреннее выражение

proj НОММУЗ (МУЗЫКАНТЫ) difference proj НОММУЗ (СОЧИНЕНИЯ),

с помощью которого образуется совокупность НОММУЗ всех музыкантов, упомянутых в файле МУЗЫКАНТЫ, но не фигурирующих в файле СОЧИНЕНИЯ.


2.12. ДЕЛЕНИЕ


При выполнении операции деления


ИМЯФАЙЛА1 division ИМЯФАЙЛА2


требуется, чтобы каждое поле ИМЯФАЙЛА2 имело те же имя и тип, что и одно из полей ИМЯФАЙЛА1. В результате деления получается файл, поля которого содержатся в ИМЯФАЙЛА1, но отсутствуют в ИМЯФАЙЛА2. Запись включается в результат только при том условии, что в ИМЯФАЙЛА1 она сцеплена с каждой записью из ИМЯФАЙЛА2. Если, например, ИМЯФАЙЛА1 содержит записи


G2

A

С

В

В

А

A

В

С

Gl

d

h

h

У

У

h

d

У

Fl

3

7

7

4

4

7

3

4


а ИМЯФАЙЛА2


Gl

d

h

У

F1

3

7

4


то результат деления


^ ИМЯФАЙЛА1 division ИМЯФАЙЛА2


представляет собой файл


G2

А

В


В этом файле лишь одно поле - G2, которое входит в ИМЯФАЙЛА1 и не входит в ИМЯФАЙЛА2. Значение А поля G2 включено в результат деления по той причине, что в ИМЯФАЙЛА1 оно сцеплено с каждой записью ИМЯФАЙЛА2. Действительно,

в составе ИМЯФАЙЛА1 имеются все записи


G2

А

А

А

G1

d

h

У

F1

з

7

4


Значение С поля G2 не вошло в результат, поскольку в ИМЯФАЙЛА1 отсутствует запись


С d 3.


Рассмотрим пример, в котором используется операция деления.


Запрос: перечислить номера ансамблей, в каждом из которых играют все исполнители, составляющие ансамбль Е6.

Ответ сформируем о помощью соотношения


УЧАСТНИКИ_АНСАМБЛЕЙ division

proj НОМИСП (sel НОМАНС = 'Е6' (УЧАСТНИКИ АНСАМБЛЕЙ)).


Второй операнд операции деления дает здесь список номеров всех исполнителей из ансамбля Е6.


2.13. УМНОЖЕНИЕ


Результатом операции умножения (В некоторых работах эту операцию называют декартовым произведением.- Прим. ред.)


ИМЯФАЙЛА1 product ИМЯФАЙЛА2


является совокупность записей, представляющих конкатенацию каждой записи ИМЯФАЙЛА1 с каждой записью ИМЯФАЙЛА2.

Пусть, например, даны файлы-операнды ИМЯФАЙЛА1


F1

b

d

F2

4

7


и ИМЯФАЙЛА2


F3

A

C

F4

4

R


В этом случае результат содержит записи


ИМЯФАЙЛА1.Fl

b

b

d

d

ИМЯФАЙЛА1.F2

4

4

7

7

ИМЯФАЙЛА2.F3

A

C

A

C

ИМЯФАЙЛА2.F4

4

R

4

R


В образованном файле каждое поле сохраняет прежнее имя, но оно дополняется именем файла, из которого взято. Дополнительно имя предшествует имени поля и отделено от него точкой. Получающиеся при умножении составные имена, подобные ИМЯФАЙЛА1.F1, употребляются точно так же, как и простые.

Имя полю присваивается для того, чтобы однозначно идентифицировать определенный фрагмент записи, и поэтому в ней не должно быть двух полей с одинаковыми именами. Введение дополнительных имен обеспечивает однозначность идентификации полей в таких случаях, например, как при выполнении умножения


^ МУЗЫКАНТЫ product СОЧИНЕНИЯ.


Если бы не использовались дополнительные имена файлов, результат операции содержал бы два поля с одинаковым именем НОММУЗ.

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

Запрос: перечислить названия всех произведений, созданных после того, как родился Эйэфский.

Ответ получим с помощью выражения


proj СОЧИНЕНИЯ.НАЗВАНИЕ

(sel СОЧИНЕНИЯ.ДАТАСОЧ > МУЗЫКАНТЫ.ДАТАРОЖ

(СОЧИНЕНИЯ prodact sel ИМЯМУЗ = 'ЭЙЭФСКИЙ' (МУЗЫКАНТЫ))).


Еще один вариант использования операции умножения - формирование пар значений полей одного и того же файла, как это делается в приведенном ниже примере.


Запрос: назвать всевозможные пары имен музыкантов, родившихся в одной стране.


Если просто умножить файл МУЗЫКАНТЫ на самое себя, в результат войдут пары полей с одинаковыми составными именами. Это запрещено, поскольку имена полей файла должны быть уникальными. Разрешить проблему поможет введение альтернативного имени для файла МУЗЫКАНТЫ, которое принято называть псевдонимом или али асом. Чтобы задать это имя, перед последовательностью операций реляционной алгебры, формирующих ответ на запрос, необходимо поместить оператор aliases:


^ НОВЗЫКАНТЫ aliases МУЗЫКАНТЫ;


proj МУЗЫКАНТЫ.ИМЯМУЗ, НОВЗЫКАНТЫ.ИМЯМУЗ

(sel МУЗЫКАНТЫ.СТРАНАРОЖ = НОВЗЫКАНТЫ.СТРАНАРОЖ

(МУЗЫКАНТЫ product НОВЗЫКАНТЫ)).


Можно сделать и так, чтобы среди полученной совокупности пар имен не было повторяющихся, однако для этого выражение придется несколько усложнить:


НОВЗЫКАНТЫ aliases МУЗЫКАНТЫ;


proj МУЗЫКАНТЫ.ИМЯМУЗ, НОВЗЫКАНТЫ.ИМЯМУЗ

(sel (МУЗЫКАНТЫ.СТРАНАРОЖ = НОВЗЫКАНТЫ.СТРАНАРОЖ) and

(МУЗЫКАНТЫ.НОММУЗ < > НОВЗЫКАНТЫ.НОММУЗ)

(МУЗЫКАНТЫ product НОВЗЫКАНТЫ)).


2.14. УПРАЖНЕНИЯ


1. Составьте выражения реляционной алгебры, с помощью которых можно получить ответы на следующие запросы

относительно содержимого музыкальных файлов:

а) дать перечень номеров всех ансамблей, среди участников которых есть кларнетист или саксофонист (либо тот и другой);

б) дать перечень номеров всех ансамблей, среди участников которых есть и кларнетист, и саксофонист;

в) дать перечень номеров всех ансамблей, среди участников которых есть саксофонист, но пет кларнетистов;

г) перечислить имена всех музыкантов, не являющихся уроженцами Уайландии и родившихся не ранее 1946 г.;

д) перечислить имена всех музыкантов - уроженцев Уайландии, не играющих на саксофоне;

е) перечислить имена всех музыкантов, не являющихся уроженцами Уайландии и не играющих на саксофоне;

ж) перечислить имена всех музыкантов - уроженцев Уайландии, играющих на саксофоне;

з) назвать каждую страну, в которой исполнялись все сочинения Эйэфского;

и) назвать каждую страну, в которой не было исполнено ни одного сочинения Эйэфского;

к) перечислить названия ансамблей, дававших концерты во всех странах, в каждой из которых выступал любой из них;

л) перечислить названия ансамблей, среди участников которых есть кларнетист или саксофонист, но не оба одновременно.


2.15. ОПТИМИЗАЦИЯ ЗАПРОСОВ


Вопрос о вычислительных затратах, связанных с выдачей ответов на конкретный вопрос, пока не затрагивался, и при составлении выражений на языке реляционной алгебры никак не учитывалось, насколько они эффективны с этой точки зрения.

Между тем запросы необходимо оптимизировать, выбирая такую последовательность операций, которая сводила бы к минимальному объем вычислительной работы. Предположим, например, что V представляет одно из возможных значений поля F файла ИМЯФАЙЛА1. Если ответ на запрос формируется согласно соотношению


(sel F = V (ИМЯФАЙЛА1)) join ИМЯФАЙЛА2,


записи из ИМЯФАЙЛА1 выбираются до того, как будет выполнена операция соединения. Выражение


sel F = V (ИМЯФАЙЛА1 join ИМЯФАЙЛА2)

в принципе даст тот же самый ответ, но эффективность его может оказаться ниже, если результат соединения будет содержать больше записей, чем имеется в файле ИМЯФАЙЛА1. Выборка в этом случае будет идти дольше, поскольку придется просматривать большее число записей.

Если запрос формализуется на специализированном языке типа языка реляционной алгебры, нетрудно сделать так, чтобы компьютер оптимизировал последовательность операций автоматически. Однако при использовании расширенной версии Паскаля, обсуждаемой в гл. 4 и 5, автоматизировать процедуру оптимизации ответов на запросы гораздо сложнее, и это еще один довод в пользу применения специализированных языков.






оставить комментарий
страница1/4
Дата27.07.2012
Размер0,94 Mb.
ТипДокументы, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы:   1   2   3   4
отлично
  1
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Документы

наверх