- •Методические указания
- •Общие сведения о лабораторных работах
- •Использование литературы для подготовки к лабораторным работам
- •Концептуальная схема учебной бд в виде er-диаграммы
- •Лабораторная работа n 1
- •Вариант 1:
- •Логическая схема учебной бд на реляционном языке sql
- •Лабораторная работа n 2
- •1 Разработка и реализация запросов на обновление учебной базы данных (бд) на основе реляционного языка запросов sql;
- •2 Практическое освоение языка sql.
- •Вариант 1:
- •Вариант 1:
- •Вариант 1:
- •Лабораторная работа n 3
- •Вариант 1:
- •Структурная диаграмма учебной бд
- •Логическая схема учебной бд для сетевой субд db_vista
- •Лабораторная работа n 4
- •1 Разработка и реализация запросов на обновление учебной базы данных (бд) на основе сетевого языка манипулирования данными;
- •2 Практическое освоение языков описания и манипулирования данными на основе предложений codasyl.
- •Рекомендуемая литература
- •Основные функции интерактивной обработки базы данных сетевой субд 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 ;
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 ;
}
/* Компоненты Н И Р */
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 ;
}
При подготовке к лабораторной работе по литературе следует иметь ввиду, что терминология, принятая в 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
Содержание отчета: для каждого запроса: исходная формулировка запроса; текст запроса: операции над сетевой БД включаются в текст программы обработки БД на некотором универсальном языке программирования или псевдоязыке; для наиболее сложных запросов - блок-схема программы обработки БД; фрагмент информации, полученной в ответ на запрос.