Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SC_sem6_2012_BD_w1.doc
Скачиваний:
0
Добавлен:
25.09.2019
Размер:
1.46 Mб
Скачать

3.3 Итоговый запрос

Особенностью итоговых запросов, как ни странно, является возможность подведения каких-то итогов. В рамках технического задания, создадим один итоговый запрос, данные которого понадобятся нам в дальнейшем.

Данный запрос должен выводить средний результат по данной сессии успевающих студентов. Запрос создается как обычный запрос. Затем на ленте в блоке «Показать или скрыть» раздела «Конструктор» необходимо нажать на кнопку «Итоги». При этом в нижней части рабочей области появится новая строка «Групповая операция».

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

Рисунок 3.17 Итоговый запрос по успевающим студентам

Рисунок 3.18 Успевающие студенты

3.4 Запросы на обновление базы данных

Так как студенты имеют тенденцию к отчислению, переводу на курс старше и завершению своего образования, база данных должна иметь возможность обновлять себя. В рамках данной главы мы организуем следующие операции с данными:

  • Перевод студентов на курс старше;

  • Отчисление неуспевающих студентов;

  • Удаление выпустившихся студентов.

Перевод студентов на следующий курс с точки зрения СУБД состоит из двух этапов: обновление таблицы «Успеваемость» результатами текущей сессии и увеличение на единицу года обучения группы (так как все студенты привязаны к таблице «Группы факультета»). Условимся делать так: сначала переводить всех студентов подряд, а уже потом решать вопросы об отчислении.

В СУБД Access задачи по обновлению данных лежат на запросах следующих типов: «Запрос на обновление», «Запрос на добавление» и «Запрос на удаление».

Чтобы добавить новые записи в существующую таблицу, необходимо применять «Запросы на добавление». Создадим такой запрос, чтобы добавлять студентов в таблицу «Успеваемость». Для этого откроем конструктор запросов и в блоке тип запроса нажмем на «Добавление». Тут же мастер предложит таблицу, в которую будут добавляться записи. Выбираем таблицу «Успеваемость». В рабочую область добавим итоговый запрос «Средний результат успевающих студентов» и перетащим поля, из которых будут данные извлекаться. В нашем случае это номер зачетки, год обучения и средний результат.

Затем в строке «Добавление» укажем поля таблицы «Успеваемость», в которые извлеченные данные будут записаны. Например, для номера зачетки это атрибут «Студент» таблицы «Успеваемость». На рисунке 3.19 показан конструктор данного запроса. Тестирование запросов данной главы будут проводиться в следующем разделе, поэтому пока следует принять на веру, что запрос рабочий.

Рисунок 3.19 Запрос на добавление данных в таблицу «Успеваемость»

Чтобы увеличить на единицу год обучения, создадим «Запрос на обновление» таблицы «Группы факультета». Для этого создадим запрос и в блоке «Тип запроса» нажмем на «Обновление». Перетащим в рабочую область таблицу «Группы факультета» и нажмем дважды на атрибут «Год обучения». В колонке «Год обучения» в строке «Обновление» необходимо записать правила обновления данного домена. В нашем случае это увеличение его текущего значения на единицу.

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

Таким образом, чтобы перевести студентов на следующий курс необходимо последовательно выполнить два запроса: запрос на добавление записей в таблицу «Успеваемость» и запрос на увеличение года обучения на единицу.

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

Рисунок 3.20 Построитель выражений

Рисунок 3.21 Запрос на перевод студентов

С точки зрения СУБД удаление ссылок это присвоение полям значения NULL, что делают «Запросы на обновление». Данный запрос подобен запросу на перевод студентов на следующий курс (отличие только в появлении условия), поэтому не будем заострять на нем внимание (рисунок 3.22).

Следующим шагом является удаление записей о студентах. Так как мы защитили базу каскадным удалением связанных записей, то можно удалить запись о студенте из таблицы «Студенты», а удаление остальных ссылок и записей ложится на СУБД. Создадим «Запрос на удаление», для этого в конструкторе в блоке «Тип запроса» нажмем на «Удаление». Перенесем в рабочее пространство таблицу «Студенту» и дважды нажмем по звездочке (это автоматически вставит все атрибуты). Далее поставим условие удалять записи, имеющее значение NULL в столбце «Номер группы». На рисунке 3.23 показан конструктор такого запроса. Таким образом, чтобы отчислить студента, нужно вызвать запрос на обновление записей о принадлежности к группе, а затем вызвать запрос на удаление записей из таблицы.

Рисунок 3.22 Запрос на отчисление студентов из группы

Рисунок 3.23 Удаление записей об отчисленных студентах

Удаление выпустившихся студентов для нашей схемы заключается в удалении групп, к которым они принадлежали, а дальше последует каскадное удаление. На рисунке 3.24 показан запрос на удаление выпустившихся групп. Условие удаления составлено так, что удаляются такие группы, чей год больше года положенного обучения из таблицы «Специальности».

Рисунок 3.24 Запрос на удаление выпустившихся студентов

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]