Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Ульман Дж. Базы данных на Паскале
(главы 2, 3)
ББК 32.973.2-01
У51
УДК [[681.3.016: 519.682] +681.3-181.4])- 03 == 20
Ульман Дж.
У51 Базы данных на Паскале/Пер, с англ. -
ского, ; Под ред. .-М.:
Машиностроение, 1990.-368.: ил.
ISBN -5
В книге английского автора процесс создания баз данных впервые описывается с позиций инженера-программиста. Многочисленные примеры структур данных и запросов дают возможность читателю быстро овладеть мощными языковыми средствами и могут быть легко обобщены на ситуациях, возникающих в технических областях. Основное внимание автор уделяет широко распространенным реляционным базам данных, реализуемых на мини - и микроЭВМ, в частности на персональных компьютерах.
Для инженеров-разработчиков и пользователей баз данных во всех областях техники.
Оригинал книги опубликован на английском языке
издательством Оксфорд Юниверсити Пресс, г. Оксфорд, Англия
ПРОИЗВОДСТВЕННОЕ ИЗДАНИЕ
ДЖУЛИАН УЛЬМАН
БАЗЫ ДАННЫХ НА ПАСКАЛЕ
Ордена Трудового Красного Знамени издательство <Машиностроение>
Москва, Стромынский пер., 4
Типография № 6 ордена Трудового Красного Знамени
издательства <Машиностроение> при Государственном комитете СССР по печати.
Ленинград, ул. Моисеенко, 10.
ISBN -5 (СССР) @ Julian Ullmann, 1985
ISBN -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. МУЗЫКАЛЬНЫЕ ФАЙЛЫ
Воспользуемся набором намеренно упрощенных файлов, которые в дальнейшем будут именоваться музыкальными.
Музыкальные файлы содержат информацию о музыкантах, музыкальных произведениях и обстоятельствах их исполнения. Нескольких музыкантов, образующих единый коллектив, назовем ансамблем - это может быть классический оркестр, джазовая группа, квартет, квинтет и т. д. К музыкантам причислим исполнителей (играющих на одном или нескольких инструментах), композиторов, дирижеров и руководителей ансамблей.
Все даты в файлах будут представлены восьмизначными числами, в которых первая слева четверка цифр указывает год, следующая пара - номер месяца, а две последние цифры - число месяца. В частности, обозначает <7 мая 1991 г.>
Достоинство такой непривычной записи дат в том, что их можно использовать непосредственно как операнды в операциях сравнения. Если, например, d = , можно утверждать, что справедливо неравенство > 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 |
ИМЯМУЗ ЭЙБИЙСКИЙ БИСИЙСКИЙ СИДИЙСКИЙ ЭЙБИЙСКИЙ ЭЙЭФСКИЙ БИДИЙСКИЙ ЭЙСИЙСКИЙ СИДИЙСКИЙ ДИБИЙСКИЙ |
ДАТАРОЖ |
СТРАНАРОЖ УДЙЛАНДИЯ ЗЕДЛАНДИЯ ЭКСЛАНДИЯ УАЙЛАНДИЯ ЗЕДЛАНДИЯ ТИЛАНДИЯ УАЙЛАНДИЯ ТИЛАНДИЯ УАЙЛАНДИЯ |
СОЧИНЕНИЯ
|
номсоч С1 С2 СЗ С4 С5 С6 |
НАЗВАНИЕ ЭЛПИС ЭМТЬЮН КЕЙСОНГ ЭЙЧТЬЮН ЭЛПИС КЕЙСОНГ |
НОММУЗ М5 М9 МЗ М5 МЗ М5 |
ДАТАСОЧ |
АНСАМБЛИ
|
HOMAHC Е1 E2 E3 E4 E5 E6 E7 |
НАЗВАНС ЭЙЗ ВИЗ сиз АЙЗ ДИЗ ЭФС ВИЗ |
СТРАНАНС ЭКСЛАНДИЯ ЭКСЛАНДИЯ ТИЛАНДИЯ ЗЕДЛАНДИЯ ЭКСЛАНДИЯ ЭКСЛАНДИЯ ЗЕДЛАНДИЯ |
НОММУЗ М7 М5 М7 М4 М5 М5 М4 |
ИСПОЛНЕНИЯ
|
НОМСОЧ С5 С1 С5 СЗ С5 С6 Cl С4 |
ДАТАИСП |
ГОРОД ТИТОН АРБИ ЭСТОН ЭСФИЛД ЭСТОН АРБИ ТИБИ АРБИ |
СТРАНА ТИЛАНДИЯ ЭКСЛАНДИЯ ЭКСЛАНДИЯ ЭКСЛАНДИЯ ТИЛАНДИЯ ЗЕДЛАНДИЯ ЭКСЛАНДИЯ УАЙЛАНДИЯ |
НОММУЗ М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 ЭЙБИЙСКИЙ УАЙЛАНДИЯ
М4 ЭЙБИЙСКИЙ УАЙЛАНДИЯ
М7 ЭЙСИЙСКИЙ УАЙЛАНДИЯ
М9 ЛИВИЙСКИЙ УАЙЛАНДИЯ
Обратим внимание на то, что в приведенном примере название страны заключено в апострофы. Они указывают, что эта строка символов, называемая также литералом, является значением поля СТРАНАРОЖ. В то же время СТРАНАРОЖ записано без апострофов, поскольку это имя поля, а не его значение. Данное правило относится к любым одиночным символам и строкам, представляющим литералы. Их всегда помещают в апострофы, чтобы отличать от имен полей, переменных и др., которые, напротив, нельзя записывать в апострофах. Числовые константы также записываются без апострофов, за исключением тех случаев, когда они выступают как символьные строки. В частности, из файла МУЗЫКАНТЫ можно выбрать записи о музыкантах, родившихся ранее 1946 г., с помощью следующей операции:
sel ДАТАРОЖ > (МУЗЫКАНТЫ)
Здесь понимается как целая константа, а не как строка символов, и поэтому не заключается в апострофы.
Условие, определяющее результат выбора, представляет собой выражение, которое может включать операции сравнения <, =, >, <=, => и <>, а также логические операции and (<И>), ог (<ИЛИ>) и not (<НЕ>). В то же время запрещено использовать арифметические операции +,-, *,/. Любой операнд, входящий в условие, сам не может быть результатом преобразований реляционной алгебры. В остальном условия записываются согласно правилам стандартного Паскаля.
Предположим, например, что из файла МУЗЫКАНТЫ требуется выбрать данные обо всех музыкантах, родившихся в Уайландии не позже 1946 г. Это можно сделать, воспользовавшись операцией
sel (СТРАНАРОЖ='УАЙЛАНДИЯ') and (ДАТАРОЖ>) (МУЗЫКАНТЫ)
которая дает следующие две записи:
М7 ЭЙСИЙСКИЙ УАЙЛАНДИЯ
М9 ЛИВИЙСКИЙ УАЙЛАНДИЯ
2.6. ПРОСТЕЙШИЕ ЗАПРОСЫ
Применив операцию проектирования к результату ранее выполненного выбора, из файла можно извлечь информацию, содержащую ответ на вполне практический, хотя и очень простой вопрос. Рассмотрим следующий пример.
Запрос: перечислить фамилии всех музыкантов, родившихся
не ранее 1946 г.
Задача решается с помощью операций
proj ИМЯМУЗ (sel ДАТАРОЖ> (МУЗЫКАНТЫ)).
Приведем еще один пример.
Запрос: перечислить номера всех музыкантов, играющих на фортепиано, кроме тех, игра которых оценивается как <скверно>.
Ответ дает следующая пара операций:
proj НОММУЗ (sel (ИНСТРУМЕНТ-ФОРТЕПИАНО')
and (ОЦЕНКА <> 'СКВЕРНО')
(ИСПОЛНИТЕЛИ)).
Результат включает единственный номер М7. Ответ, однако, может быть и <отрицательным>, т. е. не содержать никакой информации. Это демонстрирует следующий пример.
Запрос: указать все страны и города, в которых любые произведения исполнялись 22 июня 1986 г.
Этот запрос следует записать таким образом:
proj ГОРОД, СТРАНА (sel ДАТАИСП= (ИСПОЛНЕНИЯ)).
Ни одной записи, отвечающей заданному условию, не найдено.
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. ИСПОЛЬЗОВАНИЕ СОЕДИНЕНИЯ ПРИ ОТВЕТАХ НА ЗАПРОСЫ
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


