Лабораторные работы по дисциплине «Б А З Ы Д А Н Н Ы Х»
Методические указания предназначены для подготовки студентов по специальности 22.02 «Автоматизированные системы обработки информации и управления» и включают в себя описание четырех лабораторных работ, направленных на практическое освоение языков запросов и определения данных реляционных и сетевых систем баз данных. Настоящие лабораторные работы целесообразно использовать в качестве начального цикла работ по дисциплине, предшествующего работам по концептуальному, логическому и физическому проектированию систем баз данных.
Лабораторные работы рассчитаны на выполнение на персональных ЭВМ типа IBM PC/XT, /AT в среде операционной системы MS DOS; использованы программные средства реляционной СУБД типа ORACLE и сетевой СУБД db_VISTA.
СВЕДЕНИЯ О ЛАБОРАТОРНЫХ РАБОТАХ
Настоящие лабораторные работы предназначены для практического освоения языков запросов и описания данных, а также технологии обработки информации в системах баз данных (БД), основанных на реляционном и сетевом подходах. Для обработки реляционной БД используется язык SQL, являющийся стандартом de facto среди реляционных языков запросов; для обработки сетевой БД используются языки манипулирования и описания данных на основе предложений CODASYL. Используемые языки допускают применение как в интерактивном режиме, так и в среде включающего языка программирования. SQL более удобен для диалоговой обработки, ориентирован на высокоуровневую спецификацию запроса и не требует высокой квалификации пользователя; язык сетевой БД более пригоден для использования в среде языка программирования, ориентирован на навигацию в БД и требует от программиста знания тонкостей организации данных и манипулирования ими.
Для реализации лабораторных работ на персональной ЭВМ типа IBM PC в среде операционной системы MS DOS используются две системы управления базами данных (СУБД): реляционная с языком SQL - СУБД ORACLE; сетевая на основе модели CODASYL - СУБД db_VISTA. Данные СУБД широко используются не только на персональных компьютерах, но и на больших ЭВМ, рабочих станциях и супермини-ЭВМ типа VAX.
Лабораторные работы рассчитаны на использование двух заранее спроектированных и заполненных БД - реляционной и сетевой. Предметная область и содержание БД одинаковы; способы организации и обработки данных - различны. Ниже приведена неформальная спецификация требований к информационному сод
Рис.3
г) для преподавателя с индивидуальным номером 70013 найти и выдать перечень должностей, занимаемых им при участии в НИРах;
д) найти и выдать фамилии и ученые звания нескольких преподавателей, имеющих лекционную нагрузку по какому-либо предмету более 80 часов;
е) найти и выдать нагрузку преподавателя с индивидуальным номером 70013: названия предметов, объемы проводимых им занятий; найти и выдать преподавателей, работающих с ним по какому-либо одному из предметов;
ж) найти и выдать фамилии и номера групп студентов, которые получали какие-либо оценки по предметам, лектором по которым был преподаватель с индивидуальным номером 70013.
Вариант 2:
а) см. запрос а) для Варианта 1;(0:259)
б) найти и выдать информацию о предметах, шифры которых изменяются в пределах «ВТ01» - «ВТ99»;
в) найти и выдать всю имеющуюся в БД информацию о предметах в алфавитном порядке по названиям предметов;
г) для предмета с шифром «ВТ07» найти и выдать все известные БД даты контроля успеваемости;
д) найти и выдать названия какого-либо предмета, лекции по которому читаются преподавателем, ведущим также лабораторные и практические занятия;
е) найти и выдать фамилии и ученые степени преподавателей, ведущих занятия по предмету с шифром «ВТ07»; найти и выдать названия предметов, лекции по которым читаются тем же преподавателем, что и лекции по «ВТ07»;
ж) найти и выдать названия НИР, в проведении которых принимают участие преподаватели, ведущие лабораторные занятия по предмету «ВТ07».
Вариант 3:
а) см. запрос а) для Варианта 1;(0:4)
б) найти и выдать информацию о студентах, номера студенческих билетов которых изменяются в пределах «833А001» - «833А999»;
в) найти и выдать всю имеющуюся в БД информацию о студентах группы 933;
г) для студента с номером студенческого билета «833А002» найти и выдать все известные БД даты контроля успеваемости и полученные оценки;
д) для какого-либо студента, участвующего в проведении НИР, выдать название и сроки ее проведения;
е) найти и выдать названия предметов, по которым студентом с номером студенческого билета «833А002» получены какие-либо оценки; найти и выдать фамилии студентов, получивших такие же оценки по тем же предметам;
ж) найти и выдать названия предметов, в проведении занятий по которым участвует преподаватель, являющийся руководителем НИР, в которой принимает участие студент с номером студенческого билета «833А002».
Вариант 4:
а) см. запрос а) для Варианта 1;(0:13)
б) найти и выдать информацию о НИРах, шифры которых изменяются в пределах «АСОИУ-01» - «АСОИУ-99»;
в) найти и выдать всю имеющуюся в БД информацию о НИРах, упорядоченную по возрастанию стоимости работ;
г) для НИР с шифром «АСОИУ-70» найти и выдать фамилии и номера групп всех студентов, участвующих в ее проведении;
д) для какой-либо НИР, являющейся работой-компонентой, найти и выдать название комплексной НИР;
е) найти и выдать фамилии, ученые степени, должности и месячные оклады преподавателей, участвующих в проведении НИР с шифром «АСОИУ-14»; найти и выдать названия НИР, в которых участвует кто-либо из преподавателей, участвующих в НИР «АСОИУ-14»;
ж) найти и выдать названия предметов, лабораторные занятия по которым проводят преподаватели, участвующие в проведении НИР с шифром «АСОИУ-14».
Рекомендации по выполнению.
Вызовите утилиту интерактивного доступа IDA СУБД db_VISTA. Установите необходимые параметры обработки (однопользовательский режим работы, максимальное число одновременно открытых файлов - по необходимости) и откройте БД для доступа. Последовательно выполните в интерактивном режиме запросы по вариантам, зафиксируйте корректную последовательность операций обработки и используемые структуры управления, а также фрагменты информации, полученной в ответ на запрос из БД.
Логическая схема учебной БД для сетевой СУБД db_VISTA
database example{
data file «example.d01» contains system,subject,student,teacher, research,stage;
data file «example.d02» contains advancement,teaching, participation;
key file «example.k01» contains sb_shfp,curd_num,group_num, course,tch_id,degree,rs_shfp;
key file «example.k02» contains dept,customer,job;
/* Предмет */
record subject{
unique key char sb_shfp[4] ; /* шифр */
char sb_name[160] ; /* название */
int lect_vol ; /* объем лекций */
int lab_vol ; /* объем лабораторных */
int pract_vol ; /* объем практ./занятий */
}
/* Студент */
record student{
unique key char card_num[8] ; /* номер студ. Билета */
key char group_name[5] ; /* номер группы */
key int course ; /* курс */
char std_name[30] ; /* фамилия */
char std_surname[20] ; /* имя */
char std_patr_name[30] ; /* отчество */
}
/* Преподаватель */
record teacher{
unique key long tch_id ; /* личный номер */
char tch_name[30] ; /* фамилия */
char tch_surname[20] ; /* имя */
char tch_patr_name[30] ; /* отчество */
key char degree[30]; /* ученая степень */
key char dept[160] ; /* кафедра */
}
/* Н И Р */
record research{
unique key char rs_shfp[20] ; /* шифр */
char rs_name[160] ; /* название */
long rs_start_date ; /* даты начала и конца */
long rs_finish_date ; /* формат: ГГММДД */
long rs_price ; /* стоимость */
key char customer[80] ; /* заказчик */
}
Рис.4 ( Начало )
Логическая схема учебной БД для сетевой СУБД db_VISTA ( продолжение )
/* Этап */
record stage{
char sg_name[80] ; /* название */
long sg_start_date ; /* даты начала и конца */
long sg_finish_date ; /* формат: ГГММДД */
long sg_price ; /* стоимость */
}
/* Успеваемость */
record advancement{
int mark ; /* оценка */
long exam_date ; /* дата контроля: ГГММДД */
char exam_kind[40] ; /* вид контроля */
}
/* Проведение занятий */
record teaching{
int tch_lect_vol ; /* объем лекций */
int tch_lab_vol ; /* объем лабораторных */
int tch_pract_vol ; /* объем практ.занятий */
}
/* Участие */
record participation{
char job[80] ; /* научная должность */
long prt_start_date ; /* даты включения и завер- */
long prt_finish_date ; /* шения: ГГММДД */
int month_salary ; /* месячный оклад */
}
/* Перечень предметов */
set subject_list{
order ascending ;
owner system ;
member subject by sb_name ;
}
/* Перечень студентов */
set student_list{
order ascending ;
owner system ;
member student by group_num ;
}
/* Перечень преподавателей */
set teacher_list{
order ascending ;
owner system ;
Рис.4 ( Продолжение )
Логическая схема учебной БД для сетевой СУБД db_VISTA ( продолжение )
member teacher by dept ;
}
/* Перечень Н И Р */
set research_list{
order descending ;
owner system ;
member research by rs_price ;
}
/* По предмету студенты */
set subject_to_students{
order last ;
owner subject ;
member advancement ;
}
/* Студент по предметам */
set student_to_subjects{
order last ;
owner student ;
member advancement ;
}
/* По предмету преподаватели */
set subject_to_teachers{
order descending ;
owner subject ;
member teaching by tch_lect_vol;
}
/* Преподаватель по предметам */
set teacher_to_subjects{
order descending ;
owner teacher ;
member teaching by tch_lect_vol;
}
/* Участники студенты */
set students_in_research{
order last ;
owner research ;
member student ;
}
Рис.4 ( Продолжение )
Логическая схема учебной БД для сетевой СУБД db_VISTA ( окончание )
/* Компоненты Н И Р */
set parts_of_research{
order descending ;
owner research ;
member research by rs_price ;
}
/* Этапы Н И Р */
set stages_of_research{
order ascending ;
owner research ; ;
member stage by sg_start_date ;
}
/* Руководство */
set management{
order last ;
owner teacher ;
member research ;
}
/* Преподаватель в НИРах */
set teacher_in_researches{
order last ;
owner teacher ;
member participation ;
}
/* Преподаватели в НИР */
set research_to_teacher{
order last ;
owner research ;
member participation ;
}
ис.4 ( Окончание )
При подготовке к лабораторной работе по литературе следует иметь ввиду, что терминология, принятая в db_VISTA, несколько отличается от терминов, используемых CODASYL. Ниже приведены наиболее важные термины-синонимы: структурная диаграмма (диаграмма Бахмана, сетевая диаграмма), сингулярный набор (системный набор, SYSTEM-набор), ключ БД (адрес БД).
Пример: найти и выдать фамилии преподавателей, читающих лекции по предметам, по которым студент с номером студенческого билета 833А002 получил отличные оценки.
/* Булевские переменные faili принимают значение «истина» в случае
завершения поиска в БД неудачей */
/* Поиск и получение сведений о студенте с номером билета 833А002 */
Record_find( STUDENT , student.card_num=’833А002’ );
Record_get;
print( student.card_num , student.std_name );
/* Назначение найденной записи о студенте текущим владельцем типа
набора СТУДЕНТ ПО ПРЕДМЕТАМ*/
Currency_owner_record( STUDENT_TO_SUBJECTS );
/* Поиск первого члена типа набора СТУДЕНТ ПО ПРЕДМЕТАМ текущего владельца */
Set_first( STUDENT_TO_SUBJECTS );
while not( fail1 ) begin
Record_get;
if advancement.mark=5 then begin
/* Назначение текущей записи текущим членом типа набора
ПО ПРЕДМЕТУ СТУДЕНТЫ*/
Currency_member_record( SUBJECT_TO_STUDENTS );
/* Поиск владельца текущего члена типа набора ПО ПРЕДМЕТУ СТУДЕНТЫ */
Set_owner( SUBJECT_TO_STUDENTS );
/* Назначение текущей записи текущим владельцем типа набора
ПО ПРЕДМЕТУ ПРЕПОДАВАТЕЛИ */
Currency_owner_record( SUBJECT_TO_TEACHERS );
/* Поиск первого члена типа набора ПО ПРЕДМЕТУ ПРЕПОДАВАТЕЛИ
текущего владельца*/
Set_first( SUBJECT_TO_TEACHERS );
while not( fail2 ) begin
Record_get;
if teaching.tch_lect_vol > 0 then begin
/* Назначение текущей записи текущим членом типа набора
ПРЕПОДАВАТЕЛЬ ПО ПРЕДМЕТАМ */
Currency_member_record( TEACHER_TO_SUBJECTS );
/* Поиск владельца текущего члена типа набора ПРЕПОДАВАТЕЛЬ ПО ПРЕДМЕТАМ */
Set_owner( TEACHER_TO_SUBJECTS );
Record_get;
print( teacher.tch_name )
end
/* Поиск следующего члена типа набора ПО ПРЕДМЕТУ ПРЕПОДАВАТЕЛИ
текущего владельца */
Set_next( SUBJECT_TO_TEACHERS )
end
end
/* Поиск следующего члена типа набора СТУДЕНТ ПО ПРЕДМЕТАМ текущего
владельца */
Set_next( STUDENT_TO_SUBJECTS )
end
Содержание отчета: для каждого запроса: исходная формулировка запроса; текст запроса: операции над сетевой БД включаются в текст программы обработки БД на некотором универсальном языке программирования или псевдоязыке; для наиболее сложных запросов - блок-схема программы обработки БД; фрагмент информации, полученной в ответ на запрос.
Лабораторная работа N 4
ОБНОВЛЕНИЕ СЕТЕВОЙ БАЗЫ ДАННЫХ C O D A S Y L
Цель работы:
1 Разработка и реализация запросов на обновление учебной базы данных (БД) на основе сетевого языка манипулирования данными;
2 Практическое освоение языков описания и манипулирования данными на основе предложений CODASYL.
Задание:
Для всех вариантов: выполнить операции добавления, модификации и удаления информации, указанной в пп. 1-а, 2-а и 3-а соответствующего варианта лабораторной работы N 2.
Рекомендации по выполнению и содержание отчета: см. соответствующий материал по лабораторной работе N 3.
Рекомендуемая литература
1. Грей П. Логика, алгебра и базы данных. - М., Машиностроение, 1989. - 359с.
2. Дейт К. Руководство по реляционной СУБД DB2. - М., Финансы и статистика, 1988. - 320с.
3. Уэйт М., Прата С., Мартин Д. Язык Си: руководство для начинающих. М., Мир, 1988. - 512с.
4. Олле Т.В. Предложения КОДАСИЛ по управлению базами данных. - М., Финансы и статистика, 1981. - 286с.
5. Ульман Дж. Основы систем баз данных. - М., Финансы и статистика,1983. - 334с.
6. Цехановский В.В., Яковлев С.А. Автоматизированные банки данных. Л., ЛЭТИ, 1984.
7. Цикритзис Д., Лоховски Ф. Модели данных. - М., Финансы и статистика, 1985. - 344с.
Приложение
Основные функции интерактивной обработки базы данных сетевой СУБД db_VISTA
Последовательность команд меню |
Название функции |
Краткое описание |
|
Администрирование БД |
|||
Open |
Открытие БД |
Открывается выбранная БД с одним из возможных типов доступа: · разделяемый (многопользовательский); · привилегированный; · однопользовательский. |
|
Access |
Доступ к открытой БД |
Вызывается меню команд доступа к БД (см.далее). |
|
Initialize |
Инициализация БД |
Инициализируется БД, открытая для привилегированного доступа; разрушается содержимое БД. |
|
Close |
Закрытие БД |
Закрывается открытая БД. |
|
Parameters |
Назначение параметров обработки |
Назначаются параметры, в т.ч. путь к файлам БД, максимальное число открытых файлов и пр. |
|
Quit |
Выход |
Выход из утилиты интерактивной обработки БД. |
|
Манипулирование записями |
|||
Access Record |
|
Вызывается меню команд обработки записи. |
|
Доступ по ключевому полю |
|||
Scan |
Просмотр записей по ключу |
Для указанного ключа просматриваются и отображаются значения экземпляров соотв. типа записи. |
|
Find |
Поиск записей по ключу |
Для указанного ключа и его значения отыскивается и отображается соотв. запись. |
|
Next |
Поиск следующей записи по ключу |
Для указанного ключа отыскивается и отображается запись, ассоциированная со следующим значением ключа. |
|
Prev |
Поиск предыдущей записи по ключу |
Для указанного ключа отыскивается и отображается запись, ассоциированная с предыдущим значением ключа. |
|
Доступ по адресу БД |
|||
Get |
Получение записи по адресу БД |
Отображается запись, расположенная по указанному адресу БД. |
|
Обработка записи |
|||
Enter |
Ввод записи |
Вводится запись с помощью команд меню Отображение/Ввод. |
|
Modify |
Модификация текущей записи |
Модифицируется текущая запись с помощью команд меню Отображение/Ввод. |
|
Delete |
Удаление текущей записи |
Удаляется текущая запись с помощью команд меню Отображение/Ввод. |
|
Последовательность команд меню |
Название функции |
Краткое описание |
Манипулирование набором |
||
Set |
|
Вызывается меню команд обработки набора |
Навигация с использованием наборов |
||
Scan |
Просмотр набора |
Для указанного типа набора просматриваются и отображаются все записи-члены, связанные с текущим владельцем набора |
Owner |
Просмотр текущего владельца |
Для указанного типа набора отыскивается владелец текущей записи |
First |
Поиск первого члена |
Для указанного типа набора отыскивается первый член, связанный с текущим владельцем |
Next |
Поиск следующего члена |
Отыскивается следующий член набора, если ранее использовался поиск первого или предыдущего членов. |
Last |
Поиск последнего члена |
Для указанного типа набора отыскивается последний член, связанный с текущим владельцем |
Prev |
Поиск предыдущего члена |
Отыскивается предыдущий член набора, если ранее использовался поиск последнего или следующего членов. |
Обработка набора |
||
Connect |
Включение записи в набор |
Текущая запись включается в набор текущего владельца указанного типа набора. |
Discon |
Исключение записи из набора |
Текущая запись исключается из набора текущего владельца указанного типа набора. |
Total |
Отображение числа членов набора |
Отображается число членов, входящих в набор текущего владельца указанного типа набора. |
Обработка таблицы текущих |
||
Currency |
|
Вызывается меню команд обработки таблицы текущих |
Изменение текущего владельца |
||
Owner Record |
на текущую запись |
БД-адрес текущего владельца указанного типа набора заменяется на БД-адрес текущей записи |
Owner Owner |
на текущего владельца |
БД-адрес текущего владельца предварительно указанного типа набора заменяется на БД-адрес текущего владельца указываемого типа набора. |
Owner Member |
на текущего члена |
БД-адрес текущего владельца предварительно указанного типа набора заменяется на БД-адрес текущего члена указываемого типа набора. |
Последовательность команд меню |
Название функции |
Краткое описание |
Owner Change |
на адрес БД |
БД-адрес текущего владельца указанного типа набора заменяется на непосредственно указываемый БД-адрес. |
Изменение текущего члена |
||
Member Record |
на текущую запись |
БД-адрес текущего члена указанного типа набора заменяется на БД-адрес текущей записи. |
Member Owner |
на текущего владельца |
БД-адрес текущего члена предварительно указанного типа набора заменяется на БД-адрес текущего владельца указываемого типа набора. |
Member Member |
на текущего члена |
БД-адрес текущего члена предварительно указанного типа набора заменяется на БД-адрес текущего члена указываемого типа набора. |
Member Change |
на адрес БД |
БД-адрес текущего члена указанного типа набора заменяется на непосредственно указываемый БД-адрес. |
Изменение текущей записи |
||
Record Owner |
на текущего владельца |
БД-адрес текущей записи заменяется на БД-адрес текущего владельца указываемого типа набора. |
Record Member |
на текущего члена |
БД-адрес текущей записи заменяется на БД-адрес текущего члена указываемого типа набора. |
Record Change |
на адрес БД |
БД-адрес текущей записи заменяется на непосредственно указываемый БД-адрес. |
Прочие операции с текущими |
||
Auto_set |
Переключение автоматического включения |
Включается/выключается режим автоматического включения нового вводимого экземпляра записи во все возможные типы наборов всех текущих владельцев. |
Display |
Отображение таблицы текущих |
Отображаются сведения из таблицы текущих: для текущей записи тип записи и БД-адрес; для каждого набора - БД-адреса текущего владельца и текущего члена. |
C О Д Е Р Ж А Н И Е
Общие сведения о лабораторных работах 3
Лабораторная работа N 1. Поиск в реляционной базе данных с использованием языка SQL 5
Лабораторная работа N 2. Обновление реляционной базы данных с использованием языка SQL 11
Лабораторная работа N 3. Поиск в сетевой базе данных на основе модели CODASYL 13
Лабораторная работа N 4. Обновление сетевой базы данных на основе модели CODASYL 21
Библиографический список 21
Приложение. Основные функции интерактивной обработки базы данных сетевой СУБД db_VISTA 22