ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ» Т.М. Болотская, Б.А. Щукин Методическое пособие по использованию кодов обработки при выполнении лабораторных работ в СУБД 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