Table Of ContentФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»
Т.М. Болотская, Б.А. Щукин
Методическое пособие
по использованию кодов обработки
при выполнении лабораторных работ в СУБД D3
по курсу «Проектирование баз данных»
Москва 2010
УДК 004.065(07)
ББК 32.973-018.2я7
Б 79
Болотская Т.М., Щукин Б.А. Методическое пособие по использованию ко-
дов обработки при выполнении лабораторных работ в СУБД D3 по курсу
«Проектирование баз данных». М.: НИЯУ МИФИ, 2010. 28 с.
Рассмотрен один из основных вопросов проектирования баз данных в СУБД
D3: использование кодов обработки в словарях файлов. Особое внимание уделено
практическим моментам, связанным с инициализацией и сохранением результатов
отработки кодов. В предлагаемом пособии приведен необходимый материал с
примерами, что очень важно при практической работе на лабораторных занятиях.
Пособие предназначено для студентов НИЯУ МИФИ, изучающих курс «Про-
ектирование баз данных» в течение восьмого и девятого семестров факультета
«К».
Рецензент канд. техн. наук, доц. А.В. Кузовкин
Рекомендовано к изданию редсоветом НИЯУ МИФИ
ISBN 978-5-7262-1309-5 © Национальный исследовательский
ядерный университет «МИФИ», 2010
Редактор М.В. Макарова
Подписано в печать 07.07.2010. Формат 60х84 1/16
Уч.-изд.л. 1,75. Печ.л. 1,75. Тираж 100 экз.
Изд. № 054-1 Заказ № 224
Национальный исследовательский ядерный университет «МИФИ».
Типография НИЯУ МИФИ.
115409, Москва, Каширское ш., 31
О Г Л А В Л Е Н И Е
Введение................................................................................................4
1. Коды обработки, используемые в FDI............................................5
1.1. Коды обработки в атрибуте
«input conversion» FDI.............................................6
1.2. Коды обработки в атрибуте
«correlative» FDI.........................................................7
2. Коды обработки, используемые в ADI..........................................10
2.1. Коды обработки в атрибуте
«input conversion» ADI...........................................10
2.2. Коды обработки в атрибутах
«output conversion» и «correlative» ADI.......12
2.3. Особенности работы с кодами в процессорах ACCESS и
UPDATE...............................................................................14
Список рекомендуемой литературы..................................................16
Приложение 1......................................................................................17
Введение
В СУБД D3 для управления данными используются словари
файлов. При этом многие вопросы преобразования данных, пред-
ставления результатов, генерации ключей записей, поддержания
ссылочной целостности при использовании основных процессоров
СУБД D3 UPDATE и ACCESS решаются с помощью специальных
кодов обработки СУБД D3, таких, как a (algebraic),
t (translate), b (bridge), g (group extraction),
call и др.
Для использования всех возможностей этих кодов нужно четко
представлять порядок их отработки в основных процессорах СУБД
D3 UPDATE и ACCESS, т.е. понимать что:
1) инициализация процессов, вызываемых кодами, происходит в
разные моменты;
2) коды, используемые при определении атрибутов, т.е. в запи-
сях описания атрибутов (Attribute Defining Item - ADI),
влияют только на преобразование и представление данных перед
выводом, вывод может производиться на экран дисплея, печать, во
внешний (по отношению к базе данных) файл;
3) коды, используемые при определении файлов, т.е. в записях
описания файлов (File Defining Item - FDI), влияют на
сохранение записей в базе данных.
Рассмотрим более подробно особенности отработки кодов, по-
мещенных в словари файлов СУБД D3 на примере базы данных,
состоящей из двух связанных таблиц (файлов в терминологии D3):
«Студенты» и «Группы». Все описания базы данных в терминах
FDI и ADI и примеры запросов в UPDATE и ACCESS представлены
в прил. 1.
4
1. Коды обработки, используемые в FDI
В словаре любого файла базы данных, работающей под управ-
лением СУБД D3, для каждой области данных этого файла создает-
ся отдельная запись описания файла (File Defining Item -
FDI).
Если файл состоит из словаря и единственной области данных,
то запись описания файла будет одна. В этом случае принято, что
область данных файла носит имя файла. Например, если файл
«Студенты» состоит из словаря и одной области данных, то сло-
варь будет иметь имя «dict Студенты», а область данных –
«Студенты». В этом случае в словаре «dict Студенты» будет
создана запись описания файла с ключом «Студенты» (рис. 1).
DICT Студенты ‘Студенты’…
dictionary-code d
…
input-conversion call Home
Рис. 1. Фрагмент записи описания файла «Студенты»
Обращение к области данных (<file.reference>) осуществля-
ется по имени Студенты, Студенты или просто Студенты.
Под одним словарем можно создать несколько областей данных.
Например, пусть файл «Студенты» создан с несколькими облас-
тями данных: «Первокурсник», «Второкурсник», … В этом
случае в словаре «dict Студенты» для каждой области данных
будет создана собственная запись описания файла, каждая из кото-
рых будет иметь ключ, совпадающий с именем области, т.е. «Пер-
вокурсник», «Второкурсник», …
Обращение к областям данных осуществляется по именам
Студенты, Первокурсник, Студенты, Второкурсник …
Коды обработки, помещенные в FDI конкретной области дан-
ных, действуют только в этой области. На них реагирует только
процессор UPDATE, в процессоре ACCESS эти коды просто игно-
рируются. Коды обработки в записи FDI помещаются только в ат-
рибуты «input conversion» и «correlative».
5
1.1. Коды обработки
в атрибуте «input conversion» FDI
Код, помещенный в «input conversion» FDI, срабатывает
после вызова процессора UPDATE, т.е. непосредственно после вы-
полнения команды:
u <file.reference> <Item_ID> <Список атрибутов>
перед появлением вызываемой записи на экране монитора.
В атрибуте «input conversion» FDI можно использовать
только один код обработки, а именно «call», т.е. вызов подпро-
граммы. Рассмотрим использование этого кода на примере форми-
рования значения по умолчанию.
Например, в записях области данных файла «Студенты» в поле
№ 7 указывается место жительства студента. Предположим, что боль-
шая часть студентов живет в общежитии. Удобно, чтобы при форми-
ровании данных на студента значение «Общежитие» в поле № 7 за-
носилось автоматически, то есть форма с данными на студента долж-
на появляться на экране монитора с уже сформированным значением,
которое лишь в некоторых случаях нужно будет изменять.
Для этого в FDI файла «Студенты», в атрибут «input con-
version» (см. рис. 1) следует поставить код «call Home», где
«Home» – имя подпрограммы, которая заносит значение «Общежи-
тие» в поле № 7 (рис. 2).
001 sub Home(Item)
002 if access(16) then Item<7> = "Общежитие"
003 return
Рис. 2. Подпрограмма «Home»
Поясним текст этой подпрограммы. Она написана на языке
встроенных процедур СУБД D3 FlashBasic. У всех процедур, вы-
зываемых из FDI, единственный параметр – запись области данных
файла в формате динамического массива. В данном случае параметр
«Item» представляет запись области данных файла «Студенты».
Динамический массив СУБД D3 в общем случае предполагает
использование трех целочисленных индексов «Item<i,j,k>», где
6
i – номер поля записи; j – номер значения поля; k – номер подзна-
чения значения. Каждый из этих индексов априорно не ограничен
каким-либо максимальным числом, отсюда в названии слово «ди-
намический».
В тексте подпрограммы «Home» использована функция
«access(16)», которая проверяет, формируется ли новая запись и,
если «да», то полю № 7 динамического массива присваивается зна-
чение по умолчанию – «Общежитие».
Обратите внимание на атрибут «dictionary-code» (см.
рис. 1) со значением «d», которое соответствует записи описания
файла (FDI). Значение «a» соответствует записи описания атрибута
(ADI).
1.2. Коды обработки
в атрибуте «correlative» FDI
Код, помещенный в атрибут «correlative» FDI, срабатывает
непосредственно перед занесением записи, сформированной или
модифицированной UPDATE-процессором, в файл базы данных.
Если используется код обработки «call», который вызывает под-
программу, то в последней можно изменить любой элемент дина-
мического массива, представляющего запись, и именно с этими
изменениями запись будет помещена в файл базы данных.
Код обработки «call» срабатывает всегда, формируется ли но-
вая запись или модифицируется старая. В отличие от этого код об-
работки «id», с помощью которого автоматически создаются
идентификаторы (ключи) записей, срабатывает только при форми-
ровании новой записи.
Атрибут «correlative» FDI практически всегда нагружается
несколькими кодами обработки при создании баз данных, управ-
ляемых СУБД D3. В рамках выполнения лабораторных работ обя-
зательно должны быть использованы коды: «b», «id», «call».
На рис. 3 приведен фрагмент записи описания файла «Студен-
ты» для атрибута «correlative». Из рисунка видно, что атрибут
имеет несколько значений: сначала выполняется подпрограмма
7
«Проверка», затем присваивается ключ записи и только потом
осуществляется связь по «мосту» с файлом «Группы».
DICT Студенты ‘Студенты’ …
dictionary-code d
…
correlative call Проверка
ida1
bГруппы;6;3
Рис. 3. Фрагмент записи описания файла «Студенты»
Рассмотрим последовательно все эти коды.
Подпрограмма «Проверка» проверяет наличие значения в поле
№6, в котором помещается идентификатор группы. Необходимость
проверки вызвана тем, что в запись файла «Группы» по мосту пе-
редается идентификатор студента. Код подпрограммы представлен
на рис. 4.
mybp 'Проверка' size = 259
01 sub(Item)
02 if Item<6> = "" then
03 execute "cls"
04 crt @(10,3):"Не указан ItemID группы!"
05 crt @(10,4):"Студент будет помещен в группу с
ItemID <Резерв>"
06 crt @(10,5):"Нажмите <Enter>!"
07 inkey
08 Item<6> = "Резерв"
09 end
10 return
Рис. 4. Подпрограмма «Проверка»
В подпрограмме «Проверка»:
• оператор «execute» выполняет внешнюю программу, в
данном случае «cls» – очистку экрана;
• оператор «crt» выводит на экран заданные строки;
• оператор «inkey» останавливает подпрограмму и ждет на-
жатия клавиши «Enter».
8
Код «ida1» (см. рис. 3) формирует ключ записи из значения
поля № 1. Получение ключа записи из значения поля – не очень
удобная практика, так как при формировании записи пользователь
может ввести в поле № 1 значение, совпадающее с уже имеющимся
ключом. В этом случае автоматически сформируется уникальный
ключ, равный количеству секунд, начиная с полуночи. Более под-
робно о коде «id» можно узнать в электронном «help».
Код «bГруппы;6;3» (см. рис. 3) моделирует программный триг-
гер, который срабатывает при сохранении записи файла «Студен-
ты». Пользователи СУБД D3 называют его «мостом», с движением
от файла «Студенты» к файлу «Группы». Параметр «6» – номер
поля в записи файла «Студенты», в котором стоит идентификатор
группы. Параметр «3» – номер поля в записи файла «Группы», в
которое, в качестве текущего значения, будет введен идентифика-
тор студента. Заметим, что если говорится, например, о записи фай-
ла «Студенты», то речь всегда идет об области данных файла.
На рис. 5 представлен пример срабатывания «моста».
Запись файла Запись файла Запись файла «Группы»
«Студенты» «Группы» «ДО» «ПОСЛЕ»
000 127 000 К06-221 000 К06-221
001 127 001 К06-221 001 К06-221
002 Миненок 002 22 002 22
003 Александр 003 121]123]125 003 121]123]125]127
004 Евгеньевич
005 7834
…
Рис. 5. Состояние записи файла «Группы» до и после сохранения
записи файла «Студенты» с ItemID = 127
Код «b» (bridge) имеет несколько модификаций параметров.
Более подробно об этом коде можно узнать в электронном «help».
9
2. Коды обработки, используемые в ADI
В словаре любого файла базы данных, работающей под управ-
лением СУБД D3, для каждого атрибута, используемого при обра-
ботке области данных, создается отдельная запись описания атри-
бута (Attribute Defining Item - ADI).
Атрибут в модели данных СУБД D3 – это функциональное пре-
образование значения поля, к которому привязывается атрибут.
Запись описания атрибута как раз и определяет это функциональ-
ное преобразование с помощью кодов обработки. Так как поля за-
писей в файлах СУБД D3 в общем случае – многозначные, то и ат-
рибуты многозначны.
На большинство кодов обработки, помещенных в ADI, реагиру-
ет как процессор UPDATE, так и процессор ACCESS. Коды обра-
ботки в записи ADI помещаются в атрибуты «input conver-
sion», «output conversion» и «correlative».
2.1. Коды обработки
в атрибуте «input conversion» ADI
Код, помещенный в атрибут «input conversion» записи
описания атрибута, осуществляет преобразования значений, вво-
димых в поле области данных файла. Так как речь идет о вводе, то
на эти коды непосредственно реагирует процессор UPDATE. Про-
цессор ACCESS реагирует опосредованно.
Рассмотрим пример. В СУБД D3 «дата» имеет стандартное
внутреннее и несколько внешних представлений. Во внутреннем
представлении даты сохраняются в записях файлов базы данных, в
полях динамических массивов. Во внешнем представлении даты
вводятся в отведенное для них место на экране монитора, а выво-
дятся в отчетах. Во внутреннем представлении дата – это строка
цифр, представляющее десятичное число, причем нулю (0) соот-
ветствует дата 31 декабря 1967 года.
Пусть в поле № 5 записи области данных файла «Студенты»
указывается день рождения студента. На рис. 6 видно, что в атри-
бут «input conversion» помещен код «d». Этот код инициали-
зирует преобразование, пример которого представлен на рис. 7.
10