Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Структурный подход к организации баз данных

..pdf
Скачиваний:
4
Добавлен:
12.11.2023
Размер:
14.79 Mб
Скачать

полнить всего одну операцию ввода-вывода. Следовательно, до тех пор, пока группирование У1А ЗЕТ моделируется с помощью способа ОЩЕСТ скорость обработки будет низкой.

Создается впечатление, что способ ОЩЕСТ внедрен в некоторых СУБД вследствие того, что он описан в спецификациях РГБД КОДАСИЛ 1971 г. Однако в более позднем отчете КОДАСИЛ (1978 г.) описания способа размещения ОЩЕСТ нет (см. список литературы в конце гла­ вы). Вместо термина 1осаБоп тос1е употребляется термин р1асетеп1 тойе* и допускаются три варианта размещения (р1асетеп1):

. САЬС;

У1А ЗЕТ;

5Е(ЗиЕ1ЧТ1АЬ... (при этом способе осуществляется упорядоченное группирование записей в заданном диапазоне страниц).

3. У1А ЗЕТ

КЕСОНО ЫАМЕ 15 — имя-зайиси ЬОСАТЮЫ МСЮЕ 15 У1А имя-набора 5ЕТ

„Имя-записи» является именем члена набора, идентифицируемого «именем-набора». В наборе «имя-набора» могут участвовать другие чле­ ны, а «имя-записи» может быть членом или владельцем других наборов. Выбор способа размещения У1А ЗЕТ приводит к тому, что физически записи хранятся рядом с другими членами набора.

В примере из гл. 4 (рис. 4.22, который для удобства приводится еще раз под номером 8.21) определим, что

КЕССНШ ЫАМЕ 15 ДАТА-ОПЕРАЦИИ-И-ОПЕРАЦИЯ ЬОСАТЮЫ МСЮЕ 15 У1А ОПЕРАЦИЯ-ПАЦИЕНТ 5ЕТ

На рис. 8.21 показаны типы наборов. Экземпляры наборов приведены на рис. 8.21а (рис. 4.23 в гл. 4).

Вданном случае членство записи ДАТА-ОПЕРАЦИИ-И-ОПЕРАЦИЯ

внаборе ОПЕРАЦИЯ-ПАЦИЕНТ должно означать нечто большее, чем

ее членство в наборе ПАЦИЕНТ-ОПЕРАЦИЯ. При хранении записи-связ­ ки типа ДАТА-ОПЕРАЦИИ-И-ОПЕРАЦИЯ она войдет как в набор ОПЕРАЦИЯ-ПАЦИЕНТ, так и в набор ПАЦИЕНТ-ОПЕРАЦИЯ. Однако будет сделана попытка обеспечить физическое следование владельца и членов в экземпляре набора ОПЕРАЦИЯ-ПАЦИЕНТ. Таков смысл, вкла­ дываемый в понятие способа размещения У1А ЗЕТ в большинстве суще­ ствующих СУБД. Если способ размещения не определен, по умолчанию используется способ 5У8ТЕМ.

4. 5УЗТЕМ

При этом способе СУБД полностью берет на себя размещение нового экземпляра записи. Программист здесь не принимает непосредственного участия в размещении, как при способе ОЩЕСТ , значения первичного ключа не используются, как при способе САЬС, и, наконец, в отличие от способа У1А ЗЕТ, не обеспечивается физическое следование записей в наборе. Тем не менее в большинстве коммерческих систем этот способ не реализован.

Теперь необходимо ввести еще три понятия: ИНДИКАТОР ТЕКУ­ ЩЕГО СОСТОЯНИЯ, ВЫБОР ЭКЗЕМПЛЯРА НАБОРА И ПОИСК В

* На русский язык термины 1осаИоп т ойе и р1асетеп1 т ойе переводятся одинаково — «способ размещения».— Примеч. ред.

ОТСОРТИРОВАННОМ НАБОРЕ (СИККЕМСУ, ЗЕТ ОСШКЕМСУ 5ЕЬЕСПСЖ, ЗОКТЕЭ ЗЕТ Р1Ш ).

Рис. 8.21. Представление данных с использованием сетевой модели (как на рис. 4.22). Взаимосвязь «многие ко многим» вводится двумя типами наборов:

1.ПАЦИЕНТ-ОПЕРАЦИЯ;

2.ОПЕРАЦИЯ-ПАЦИЕНТ

СЦККЕЫСУ

При всей сложности понятия индикатора текущего состояния в основе его лежит простая идея. Не вдаваясь в подробности, можно считать, что это индикация записи, только что задействованной в определенном классе взаимосвязей. Сложность состоит в возможности одновременного задей­ ствования большого числа индикаторов текущего состояния. Например, в системе управления базами данных ЭВМЗ-10/20 фирмы ОЕС определе­ ны следующие классы индикаторюв текущего состояния:

индикатор

текущего состояния области;

индикатор

текущего состояния типа записи;

индикатор

текущего состояния процесса;

индикатор

текущего состояния набора.

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

Рис. 8.21а. Экземпляры наборов ПАЦИЕНТ-ОПЕРАЦИЯ (ПО) и ОПЕРАЦИЯ-ПАЦИЕНТ (ОП) сетевой модели данных, показанной на рис. 4.23

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

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

При обработке такой древовидной структуры необходимо точно отсле­ живать текущее положение. Напри-мер, типичная процедура поиска может быть такой:

1.Найти экземпляр А.

2.Найти все экземпляры В, связанные с А.

3.Найти все экземпляры С, связанные с В.

При выполнении такого рода обработки желательно сохранять все экземпляры записей-владельцев при обнаружении экземпляров записейчленов. Упрощенное представление программы на языке ПЛ/1 для этого вида обработки:

РШО РЩЗТ А НЕСОНО ОР ЗУЗ_А ЗЕТ,

индикатора текущего состояния */

0 0

/ * Задается начальное значение

№Н1ЬЕ (N01 ЕЫО__ОР_ЗЕТ ЗУЗ_А);

 

 

Обработка;

 

РШО РЩЗТ В КЕСОКО ОР А _В ЗЕТ;

 

0 0

/* Это первый экземпляр записи

В, связанный с текущей записью А */

ШН1ЬЕ (ЫОТ ЕЫО__ОР__ЗЕТ А _В);

 

 

Обработка;

 

 

РШО РЩЗТ С НЕСОРО ОР В_С ЗЕТ;

 

/* Это первый экземпляр записи С, связанный с текущей записью В* ЭО ШН1ЬЕ(Ж)Т ЕЫЭ__ОР__ЗЕТ В_С);

Обработка; РШО ЫЕХТ С КЕСОКО ОР В _С ЗЕТ;

/* Теперь индикаторы текущего состояния установлены, обрабатываются

записи С*/

ЕЫО;

РШО ЫЕХТ В КЕСОКР ОР А _В ЗЕТ; /* После того, как все записи С обработаны, выйти из цикла и обрабо­

тать следующую запись В */

ЕЫО;

РШО ЫЕХТ А НЕСОКО ОР ЗУ5_А ЗЕТ; / * После того, как все записи В экземпляра набора обработаны, задать

новый индикатор текущего состояния и повторить обработку */

ЕЫО;

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

Чем сложнее структура данных, тем важнее роль индикатора текущего состояния.

Далее рассмотрим ВЫБОР ЭКЗЕМПЛЯРА НАБОРА (ЗЕТ ОССиККЕГМСЕ ЗЕБЕСТКЖ).

ЗЕТ ОССЦКРЕЫСЕ 5ЕБЕСТЮЫ

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

ВЫБОР ЭКЗЕМПЛЯРА НАБОРА ПО ИНДИКАТОРУ ТЕКУЩЕГО СОСТОЯНИЯ НАБОРА

(ЗЕТ ОССИККЕЫСЕ 5ЕБЕСТ1СЖ 13 ТН1Ш СИККЕМТ ОР ЗЕТ)

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

ВЫБОР ЭКЗЕМПЛЯРА НАБОРА ПО СПОСОБУ РАЗМЕЩЕНИЯ ВЛАДЕЛЬЦА

(ЗЕТ ОСС1ЖКЕМСЕ БЕЬЕСПСЖ ТН1Ш ЬОСАТКЖ МСГОЕ ОР (ЖЫЕН)

При таком методе СУБД должна установить индикатор текущего состояния для записи-владельца. С помощью этого индикатора текущего состояния она затем может установить индикатор текущего состояния для записи-члена. Возможны три варианта, соответствующие трем спо­ собам размещения записи-владельца:

1. Если способ размещения записи-владельца — САБС, то програм­

мист обязан представить ключ функции САБС. Программа не должна определять адрес размещения записи-владельца.

2.Если способ размещения записи-владельца — ЭШЕСТ, то програм­ мист обязан представить ключ функции ОЩЕСТ. Аналогично первому варианту программа не должна определять адрес размещения записивладельца.

3.Если способ размещения записи-владельца — У1А 5ЕТ, то программист обязан обеспечить передачу СУБД информации о том, какой экземпляр записи-владельца она должна использовать. В этом случае запись-владе­ лец будет частью упорядоченного набора. Таким образом, необходимо обеспечить наличие только ключа упорядочения. По мере поиска экземпля­ ров СУБД анализирует способ размещения владельца данного владельца. Единственным ограничением является необходимость завершения цепочки ВЫБОР ЭКЗЕМПЛЯРА НАБОРА ПО СПОСОБУ РАЗМЕЩЕНИЯ ВЛА­ ДЕЛЬЦА при обнаружении записи с опцией САБС, ОЩЕСТ или 5У5ТЕМ.

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

и Э1КЕСТ. Кроме того, при множественных связях между типами записей программисту достаточно обеспечить наличие ключей и предо­ ставить выполнение операций СУБД. В результате логика прикладной программы упрощается.

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

ЗОКТЕР ЗЕТ РШР

В большинстве баз данных, основанных на модели КОДАСИЛ, су­ ществуют определенные типы записей, к которым желателен прямой до­ ступ, например к записям, содержащим данные о служащих. Однако бывают случаи, когда программисту необходимо обработать такие записи последовательно. Естественным решением этой проблемы было бы исполь­ зовать для размещения записей способ САЬС и, кроме того, обеспечить участие записей в упорядоченном наборе. Это решение тем не менее имеет серьезный недостаток: последовательная обработка записей потре­ бует в среднем выполнения одной операции ввода-вывода для каждой записи*.

5. 1ЫРЕХ

КОДАСИЛ предоставляет возможность обойти эти трудности. Если запись представлена в упорядоченном наборе, может быть использована одна из форм команды РШЭ (НАЙТИ), называемая «гзе 6» (выраже­ ние 6 для выбора записи), предназначенная исключительно для поиска отсортированных записей. При задании гзе 6 СУБД определяет разме­ щение записи с помощью индексной структуры упорядоченного набора. В результате можно быстро найти местоположение записи, хотя и не столь быстро, как при способе САЬС, но значительно быстрее, чем при последо­ вательной обработке.

В системе РВМЗ-Ш/20 фирмы ЭЕС Имеется дополнительная воз­ можность. Индексная структура и записи могут размещаться в различных буферах. В результате такого разделения обеспечивается высокая скорость обращения к индексной структуре (буферы с индексами могут длительное время находиться в оперативной памяти). Это в значительной степени ускоряет последовательную обработку. Поскольку способом раз­ мещения записей может быть У1А ЗЕТ разрешается размещение запи­ сей со сходными ключами на одной странице. Таким образом, хотя скорость доступа к первой записи и снижается (однако не настолько, чтобы это было неприемлемо), к остальным записям она остается весьма высокой.

Итак, методы доступа внутренней модели, используемые системой управления базами данных РГБД, таковы:

произвольный (САЬС);

.

Ш'КЕСТ;

.

У1А ЗЕТ;

ЗУЗТЕМ (по умолчанию);

.

ШРЕХ.

* Это не совсем верно, так как на странице,, как правило, размещается более одной записи, и поскольку единицей физического обмена БД—СУБД служит именно страница, это число будет меньше единицы.— Примеч. ред.

Для выполнения каких-либо операций с хранимой записью прежде всего необходимо эту запись найти. Предложение ЕШЭ — основной конструктивный блок при любом манипулировании данными. По этой причине предложения РШЭ в том виде, в котором они применяются

впредлагаемой РГБД модели, могут быть очень сложны. В списке лите­ ратуры в конце главы указана работа [3], в которой читатель найдет под­ робное изложение вопросов, касающихся предложения РШО.

Мы закончили обзор методов доступа внутренней модели для модели данных РГБД. Теперь рассмотрим методы доступа внешней модели.

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

внескольких типах наборов. В каждом типе набора имеется свой путь доступа к записи. В крайнем случае можно сказать, что необходимость определения каких:либо типов наборов отсутствует; требуется определить лишь типы записей. В этом случае способ размещения У1А ЗЕТ не может быть задан ни для одного типа записи.

РГБД специфицировала два способа установления взаимосвязей

Между типами записей: с помощью цепи и с помощью массива указателей. Це п ь д л я т и п а на б о р а . Простейшее применение цепи — сцепление со СЛЕДУЮЩИМ (ЫЕХТ). На рис. 8.22 тип набора — ПАЦИЕНТ-ОПЕРАЦИЯ- Имеются два экземпляра записи-члена. Включе­ ние в цепь состоит в том, что в запись-владельца «Джон Уайт» помещается указатель на «первый» член в набора Ключ «первого» члена, т. е. записи «Удаление камней из желчного пузыря» как бы помещается в запись-

Рис. 8.22. Цепь для экземпляра набора. Используется указатель ЫЕХТ

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

Если записи ПАЦИЕНТ назначен способ размещения САЬС^ то возможен независимый от набора доступ к записи «Джон Уайт», а за­ тем — последовательный доступ к записям-членам с помощью указателей ЫЕХТ (СЛЕДУЮЩИЙ). Однако если записи ОПЕРАЦИЯ назначен способ размещения САЬС, то возможен также независимый доступ к каж­ дой записи-члену набора и обработка ее вместе *с другими членами набора.

Для цепной структуры применение указателя ЫЕХТ (СЛЕДУЮ­ ЩИЙ) обязательно. Часто оказывается целесообразным ограничивать длину цепи с указателем NЕXТ. Если число записей-членов в наборе велико, операция исключения записи-члена может потребовать много времени. После удаления записи-члена необходимо обращение к предыду­ щей записи-члену для обновления указателя ЫЕХТ. Единственный способ добраться до предыдущей записи — обойти всю цепь, хотя в некоторых СУБД предусмотрено хранение адреса предыдущей записи, если она ис­ пользовалась для поиска.

С другой стороны, при сцеплении со СЛЕДУЮЩИМ (ЫЕХТ) нужно иметь в виду, применяется ли способ размещения У1А 5ЕТ для запи­ сей-членов. Если да, то вполне вероятно нахождение этих записей на той же странице области. АБД должен определить соотношение размера страницы, размера набора и частоты удаления.

В большинстве реализаций наличие набора однозначно определяет необходимость наличия указателя ЫЕХТ.

ЫЕХТ и РКЮК

При использовании цепной структуры указатель РКЮК позволяет существенно ускорить удаление записи-члена. Наличие двух указателей ЫЕХТ и РКЮК аналогично заданию в каждой записи двух значений ключей соседних записей, В результате при удалении записи из большого набора весьма просто осуществить доступ и к ее соседним записям (рис. 8.23).

Указатель РЩОК (ПРЕДЫДУЩИЙ) расширяет возможности, пре­ доставляемые указателем NЕXТ. С его помощью легко обновить указа­ тель после исключения записи-члена. Однако проблема обращения от запи­ сей-членов к владельцу остается. Положим, записи-члену ОПЕРАЦИЯ назначен способ размещения САЬС. Если потребуется,идентификация всех пациентов, которым сделана операция «удаление камней из желчного пузыря», единственным способом найти записи-владельцы является цик­ лический поиск по цепи с помощью указателей ЫЕХТ или РКЮР. Если АБД предвидит возможность частого обращения к владельцу от членов, необходимо обеспечить включение указателя ОАУЫЕК (ВЛАДЕЛЕЦ, рис. 8.24). Это целесообразно и в том случае, когда для члена, с которым ассоциируется владелец, не объявлено «ШСАТ1СЖ МСЮЕ 15 У1А ЗЕТ ЫАМЕ». В некоторых реализациях записи индекса для упорядоченных наборов содержат также указатели ОАУЫЕК.

Наличие указателя 0\УЫЕК повышает эффективность доступа к вла­ дельцу набора, если доступ к записи-члену осуществляется через другие экземпляры набора или с применением одного из основных методов доступа. Поиск владельца может также осуществляться с помощью ука­ зателей МЕХТ или РЩОК, но при этом появляется вероятность выборки большого числа ненужных записей при прохождении по набору.

Тип записи-

 

 

Владельца

 

 

 

 

 

Тип

 

 

 

 

 

записи-

 

 

 

 

 

члена

 

 

Г

^

1111

Джон Уайт

Нью Стрит15

 

Нью-Йорк, ,

 

 

 

штат Нью-Йорк

 

РИТОК

1

 

 

РР10Рреп

1

т т

 

 

МЕХТ

 

\1

1янв. 1977

Удалениекам­

Пенициллин

Жар

 

ней из желчн.

 

 

 

пузыря

 

 

/1/ЕХТ

 

 

РК10К

 

 

 

и

12июня 1917

Удаление

 

камней из

 

 

 

почек

 

Р ис. 8.23. Цепь для экземпляра набора.

Используются указатели ЫЕХТ

и РРЮН

 

 

 

Тип

записи

Владельца

Тип записи-•

 

 

 

члена

 

 

 

 

 

 

 

 

 

Экземпляр

 

 

1111

 

Джон Уайт Нью Стрит 15

записи-

РН/ОРСг

 

 

 

 

Нью-Йорк

Владельца

 

 

 

 

штат Нью-Йоок

 

 

 

 

 

\

НЕХТ

 

 

 

ОШЕН

ОШЕН

ЕХ7

 

 

 

 

 

1

 

 

 

 

РП10Н

Удчленив кань Пенициллин жар

 

 

1яиВ. 1977

 

 

 

ней из желчн.

 

 

 

 

 

пузыря

— 1-----------

 

 

 

 

 

 

 

 

ЕМОК

 

НЕХТ

Г

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и

12июня 1977

Удаление

 

— -

 

 

 

камней из

 

 

 

почек

 

 

Р ис 8.24. Цепь для экземпляра набора. Используются указатели ЫЕХТ, РК1-

ОК и 0 \УЫЕК

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

Массивы указателей. Владелец содержит указатели на все записичлены, и каждая запись-член содержит указатель на владельца (рис. 8.25).

 

 

 

ПАЦИЕНТ

 

 

 

 

 

 

ОПЕРАЦИЯ

 

 

 

 

_1111

 

 

^

1ян8.

Удаление

 

 

 

 

камней

 

Жар

 

 

1377

из желч­ Пеницил­

 

 

 

ного пу­

лин

 

 

 

 

зыря

 

 

Джон Уайт

Нью Стрит 15

 

 

 

 

Нью-Йорк-,,

 

 

 

 

 

 

штат Нью-Йорк

 

 

 

 

 

 

Ч

12июня

Удаление

 

 

 

 

камней

 

 

 

 

1977

из почек

 

Рис. 8.25. Массив указателей. Запись-владелец содержит указатель на каждую запись-член, а каждая запись-член указывает на запись-владельца

Физически записи-члены могут не располагаться близко к владельцу. Где и как хранить массив указателей, определяет разработчик СУБД. Массивы указателей применяются лишь в немногих СУБД.

Включение и сохранение. Возможны четыре комбинации способов включения и сохранения экземпляров записи-члена в наборе:

Включение в набор

Сохранение в наборе

(Класс хранения)

(Класс исключения)

1.

Автоматическое

Обязательное

2.

Автоматическое

Необязательное

3.

Ручное

Обязательное

4.

Ручное

Необязательное

1. Включение в набор автоматическое; сохранение в наборе обязательное. Запись-член связывается с набором автоматически при запоминании и сохраняется в данном наборе до удаления ее или владельца. (Замеча­ ние. Эта комбинация используется очень часто.)

2.Включение в набор автоматическое; сохранение в наборе необязатель­ ное. Включение в набор осуществляется так же, как и в предыдущем случае. Однако, что касается сохранения, то запись-член может быть ис­ ключена из набора, удалять ее из базы данных или других наборов нет необходимости. (Замечание. Эта комбинация используется очень часто.)

3.Включение в набор ручное; сохранение в наборе обязательное. Записьчлен не включается в набор автоматически. Это должна выполнить про­ грамма пользователя. Однако включенная в набор запись-член сохраня­ ется в данном наборе* до тех пор, пока он или его владелец не будет удален. (Замечание. Эта комбинация используется весьма редко.)

4.Включение в набор ручное; сохранение в наборе необязательное. Запись-член не включается в набор автоматически. Это должна выпол-

Автор, очевидно, имеет в виду экземпляр набора.— Примеч. ред.

Соседние файлы в папке книги