Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Итоговый отчет

.docx
Скачиваний:
39
Добавлен:
30.07.2024
Размер:
3.07 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

"МИРЭА — Российский технологический университет"

РТУ МИРЭА

Институт информационных технологий (ИТ)

Кафедра промышленной информатики (ПИ)

ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ

по дисциплине

«Разработка баз данных»

Студент группы

ИНБО-06-20

(учебная группа, фамилия, имя, отчество студента)

(подпись студента)

Преподаватель

Ассистент Киселев Д.С.

(должность, ученая степень, звание, фамилия, имя, отчество преподавателя) (подпись преподавателя)

Работа выполнена

«17» декабря 2022 г.

«Зачтено»

«17» декабря 2022 г.


Москва 2022

Содержание

Описание предметной области 3

Логическая и физическая модели базы данных 4

Результата выполнения практических работ в SQL Command Line 8

Результат выполнения практической работы по использованию СУБД 23

Процедуры 23

Функции 29

Триггеры 32

Заключение 34

Список использованных источников 35

Описание предметной области

В данной работе была рассмотрена деятельность школьной столовой.

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

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

Логическая и физическая модели базы данных

На Рисунке 1 представлена логическая модель рассматриваемой предметной области, сделанная в SQL DESIGNER.

Рисунок 1 — Логическая модель предметной области

На Рисунке 2 представлена физическая модель рассматриваемой предметной области.

Рисунок 2 — Физическая модель предметной области

Данные модели соотносятся с нотацией DFD и диаграммой классов. На Рисунках 3 — 7 представлена работа из прошлого семестра.

Рисунок 3 — Модель нотации DFD

Рисунок 4 — Модель нотации DFD

Рисунок 5 — Модель нотации DFD

Рисунок 6 — Модель нотации DFD

Рисунок 7 — Диаграмма классов

Результата выполнения практических работ в SQL Command Line

Создадим базу данных с названием canteen (столовая). В ней будут содержаться шесть таблиц: combine (комбинат), menu (меню), kitchen (кухня), students (студенты), teachers (учителя), school_table (раздаточный стол). На Рисунке 9 «заходим» в созданную базу данных.

Рисунок 8 — Создание и использование базы данных с названием canteen

Заполним таблицу «combine» необходимыми полями: id_combine, feeders_num (номер питающегося – последняя строка является итоговым количеством питающихся), school_name (название школы), products (список продуктов). Каждый из столбцов имеет свой тип данных и ограничение.

Рисунок 9 — Создание таблицы combine

Заполним таблицу «menu» необходимыми полями: id_menu, hot_dish (горячее блюдо), cold_dish (холодное блюдо), snack (закуска), drink (напиток). Каждый из столбцов имеет свой тип данных и ограничение.

Рисунок 10 — Создание таблицы menu

Заполним таблицу «kitchen» необходимыми полями: id_kitchen, id_combine, feeders_num (номер питающегося), eat_time (время раздачи), id_menu. Каждый из столбцов имеет свой тип данных и ограничение. Таблица имеет два внешних ключа – «id_combine» и «id_menu».

Рисунок 11 — Создание таблицы kitchen

Заполним таблицу «students» необходимыми полями: id_student, st_last_name (фамилия ученика), st_first_name (имя ученика), st_patronymic (отчество ученика). Каждый из столбцов имеет свой тип данных и ограничение.

Рисунок 12 — Создание таблицы students

Заполним таблицу «students» необходимыми полями: id_student, tch_last_name (фамилия учителя), tch_first_name (имя учителя), tch_patronymic (отчество учителя). Каждый из столбцов имеет свой тип данных и ограничение.

Рисунок 13 — Создание таблицы teachers

Заполним таблицу «school_table» необходимыми полями: id_table, id_kitchen, feeders_num (номер питающегося), eat_time (время раздачи), id_student, id_teacher. Каждый из столбцов имеет свой тип данных и ограничение. Таблица имеет три внешних ключа – «id_kitchen», «id_student» и «id_teacher».

Рисунок 14 — Создание таблицы kitchen

Произведем просмотр созданных таблиц в базе данных.

Рисунок 15 — Просмотр таблиц базы данных canteen

Просмотрим структуру таблиц combine, kitchen и student.

Рисунок 16 — Просмотр структуры таблиц

Внесем данные в таблицу combine. Для этого введем команду

INSERT INTO combine VALUES ('1', '1', 'School num 1034', 'standart menu num 1'), ('2', '2', 'School num 1034', 'standart menu num 1'), ('3', '3', 'School num 1034', 'hypoallergic menu');

Рисунок 17 — Заполнение таблицы combine

Внесем данные в таблицу menu. Для этого введем команду:

INSERT INTO menu VALUES ('1', 'soup with pasta', 'salade with carrow', 'cookies', 'apple juice'), ('2', 'vegetable soup', 'salade with corn', 'sandwitch', 'black tea'), ('3', 'rice and chicken', 'grated cabbage', 'chocolate', 'cherry compote');

Рисунок 18 — Заполнение таблицы menu

Внесем данные в таблицу kitchen. Для этого введем команду

INSERT INTO kitchen VALUES ('1', '1', '1', '14:05:00', '1');

Рисунок 19 — Заполнение таблицы kitchen

Внесем данные в таблицу menu. Для этого введем команду:

INSERT INTO menu VALUES ('1', '1', '1', '14:05:00', '1', '1'), ('2', '1', '2', '14:05:00', '2', '3'), ('3', '1', '3', '14:05:00', '3', '2');

Рисунок 20 — Заполнение таблицы school_table

Внесем данные в таблицу students. Для этого введем команду:

INSERT INTO students VALUES ('1', 'Ivanov', 'Kirill', 'Maksimovich'), ('2', 'Smirnova', 'Lidiya', 'Alekseevna'), ('3', 'Burlay', 'Maksim', 'Leonidovich');

Рисунок 21 — Заполнение таблицы students

Внесем данные в таблицу students. Для этого введем команду:

INSERT INTO teachers VALUES ('1', 'Butunina', 'Irina', 'Aleksandrovna'), ('2', 'Kuzmina', 'Olga', 'Borisovna'), ('3', 'Habibulin', 'Ildar', 'Evgenevich');

Рисунок 22 — Заполнение таблицы teachers

Просмотрим все таблицы после заполнения при помощи команды SELECT * FROM «название таблицы»;

Рисунок 23 — Содержание таблицы combine

Рисунок 24 — Содержание таблицы menu

Рисунок 25 — Содержание таблицы kitchen

Рисунок 26 — Содержание таблицы school_table

Рисунок 27 — Содержание таблицы students

Рисунок 28 — Содержание таблицы teachers

Просмотр столбца из таблицы при помощи команды SELECT «имя» FROM «имя»;

SELECT st_last_name FROM students;

Рисунок 29 — Просмотр столбца таблицы students

Просмотр несколько столбцов из таблицы при помощи команды SELECT «имя», «имя» FROM «имя»; SELECT Фамилия, Должность FROM Сотрудник;

Рисунок 30 — Просмотр столбцов ФИО в таблице students

Сортировка столбца по фамилиям по возрастанию при помощи команды SELECT * FROM имя_таблицы ORDER BY имя_столбца_сортировки;

SELECT * FROM students ORDER BY st_last_name;

Рисунок 31 — Просмотр столбцов ФИО, сортировка по алфавиту по фамилии в таблице students

Сортировка в обратном алфавитном порядке при помощи добавления DESC.

SELECT * FROM students ORDER BY st_last_name DESC;

Рисунок 32 — Просмотр столбцов ФИО, сортировка по алфавиту в обратном порядке по фамилии в таблице students

Очень часто бывает, что все информация из таблицы не нужна. Необходимо узнать, какой человек записан под третьим номером (id = 3).

SELECT * FROM students WHERE id_student=3;

Рисунок 33 — Просмотр строк, которые соответствуют столбцу со значением id=4

Использование ключевого слова Where. Отсортируем значения в столбцах по заданному условию. Выведем из таблицы combine строчки, где выбрано гипоаллергенное меню.

Рисунок 34 — Отбираются значения равные указанному

Выведем из таблицы Должность все строчки, кроме первой (id != 1).

SELECT * FROM students WHERE id_student != 1;

Рисунок 35 — Отбираются значения, не равные указанному

Выведем из таблицы students строчки, где id меньше 3.

SELECT * FROM student WHERE id_student < 3;

Рисунок 36 — Отбираются значения меньше указанного

Выведем из таблицы students строчки, где id больше или равен 2.

SELECT * FROM students WHERE id_student >= 2;

Рисунок 37 — Отбираются значения большие и равные указанному

Выведем из таблицы students строчки, где st_first_name не пустой.

SELECT * FROM students WHERE st_first_name IS NOT NULL;

Так как в таблице отсутствую пустые значения, выводится исходная таблица.

Рисунок 38 — Отбираются строки, имеющие значения в указанном поле

Выведем из таблицы students строчки, где есть пустые значения фамилий.

SELECT * FROM students WHERE st_last_name IS NULL;

Рисунок 39 — Отбираются строки, не имеющие значения в указанном поле

Выведем из таблицы students строчки, где id между 2 и 4.

SELECT * FROM students WHERE id_student BETWEEN 2 AND 4;

Рисунок 40 — Отбираются значения, находящиеся между указанными

Выведем из таблицы students строчки, где id равен 1 и 3.

SELECT * FROM students WHERE id_student IN (1, 3);

Рисунок 41 — Отбираются значения, соответствующие указанным

Выведем из таблицы Должность строчки, где Отдел не равен 1 и 3.

SELECT * FROM students WHERE id_student NOT IN (1, 4);

Рисунок 42 — Отбираются значения, кроме указанных

Выведем из таблицы combine строчки, где в списке продуктов встречается «hypo».

SELECT * FROM combine WHERE products LIKE '%hypo%';

Рисунок 43 — Отбираются значения, соответствующие образцу

Выведем из таблицы combine строчки, где products не начинается с «hypo».

SELECT * FROM combine WHERE products NOT LIKE 'hypo%';

Рисунок 44 — Отбираются значения, не соответствующие образцу

Выведем из таблицы combine строчки, где products со второго символа начинается с «tan».

SELECT * FROM combine WHERE products LIKE '_tan%';

Рисунок 45 — Метасимвол _

Изменение данных в таблице.

Для добавления столбцов в таблицу используется оператор ALTER TABLE — ADD COLUMN. Добавим столбец age (возраст) в таблицу students.

ALTER TABLE students ADD COLUMN age int(2);

Рисунок 46 — Добавление нового столбца в таблицу

Запишем значения в новый столбец.

UPDATE students SET age=12 WHERE id_student=1;

UPDATE students SET age=12 WHERE id_student=2;

UPDATE students SET age=17 WHERE id_student=3;

Рисунок 47 — Замена информации столбца

Переименовать столбец командой ALTER TABLE combine CHANGE products prod_list varchar(60);

Рисунок 48 — Замена названия столбца

Операция соединения. Выведем фамилии ученика, который первый в списке, и все фамилии учителей кроме первого.

Рисунок 49 — Вывод информации по двум критериям

Операция объединения. Выведем фамилии всех учеников кроме первого и их время обеда.

Рисунок 50 — Вывод фамилии ученика по критерию

Операция группировки. Выведем столбец с фамилией студента, все строчки с возрастом, где фамилия = Бурлай.

Рисунок 51 — Вывод фамилии ученика по критерию

Операция деления. Вывести всю информацию таблиц students и school_table, соединенных INNER JOIN.

Рисунок 52 — INNER JOIN с повторением

Вывод всех столбцов таблицы students и school_table без дубликатов.

Рисунок 53 — INNER JOIN без повторения

Вывод всех столбцов таблиц students и school_table, где возраст меньше 15 и не принадлежащий Фамилии «Иванов».

Рисунок 54 — INNER JOIN без повторения

Вывод всех столбцов таблицы students и school_table без повторения через LEFT JOIN.

Рисунок 55 — LEFT JOIN без повторения

Вывести необходимые столбцы из таблиц students и school_table по LEFT JOIN, где id = 3.

Рисунок 56 — LEFT JOIN без повторения

Вывести все столбцы таблиц Сотрудник и Должность посредством RIGHT JOIN.

Рисунок 57 — RIGHT JOIN без повторения

Вывести st_last_name, id_student из таблицы students.

Рисунок 58 — Вывод столбцов из разных таблиц

Результат выполнения практической работы по использованию СУБД

На Рисунке 59 представлена диаграмма базы данных, сделанная в dbForge.

Рисунок 59 — Диаграмма в dbForge

Процедуры

  1. Процедура присваивания статуса на основании выбранного меню. Код представлен в Листинге 1. Результат работы процедуры представлен на Рисунке 60.

Листинг 1 — Процедура присваивания статуса

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.feeder(in menu_type INT, out Stat VARCHAR(45))

BEGIN

IF menu_type BETWEEN 1 AND 2 THEN

SET Stat='Ordinary student';

ELSE SET Stat='Allergic student';

END IF;

END

Рисунок 60 — Процедура присвоения статуса

  1. Количество всех питающихся (и ученики, и учителя). Код представлен в Листинге 2. Результат работы процедуры представлен на Рисунке 61.

Листинг 2 — Процедура счета количества питающихся

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.kol(in id_student int, in id_teacher int)

BEGIN

SELECT COUNT(id_student) AS col_s, COUNT(id_teacher) AS col_t

FROM students

JOIN teachers ON students.id_student = teachers.id_teacher;

END

Рисунок 61 — Процедура счета количества питающихся

  1. Вывод имени и фамилии учеников, у которых возраст больше заданного. Код представлен в Листинге 3. Результат работы процедуры представлен на Рисунке 62.

Листинг 3 — Процедура вывода информации об ученике

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.pr3(in kol int)

BEGIN

SELECT st_last_name, st_first_name

FROM students

WHERE age > kol;

END

Рисунок 62 — Процедура вывода информации об ученике

  1. Вывод возраста по заданной фамилии. Код представлен в Листинге 4. Результат работы процедуры представлен на Рисунке 63.

Листинг 4 — Процедура вывода возраста

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.vosrast(in Fam varchar(50))

BEGIN

SELECT age

FROM students

WHERE st_last_name = Fam

ORDER BY st_last_name;

END

Рисунок 63 — Процедура вывода возраста

  1. Ввод номера питающегося, получаем id выбранного меню. Код представлен в Листинге 5. Результат работы процедуры представлен на Рисунке 64.

Листинг 5 — Процедура вывода id_menu

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.aidishnik(IN feeders_nomer int)

BEGIN

SELECT id_menu

FROM kitchen

WHERE feeders_num = feeders_nomer;

END

Рисунок 64 — Процедура вывода id_menu

  1. Вывод столбцов фамилии учеников и учителей в зависимости от номера питающегося. Код представлен в Листинге 6. Результат работы процедуры представлен на Рисунке 65.

Листинг 6 — Процедура вывода информации о питающихся

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.nomerok(IN feeders_nomer int)

BEGIN

SELECT st_last_name, tch_last_name

FROM school_table

JOIN students ON school_table.id_student = students.id_student

JOIN teachers ON school_table.id_teacher = teachers.id_teacher

WHERE feeders_num = feeders_nomer;

END

Рисунок 65 — Процедура вывода информации о питающихся

  1. Вывод фамилий питающихся у которых id меню равен вводимому числу. Код представлен в Листинге 7. Результат работы процедуры представлен на Рисунке 66.

Листинг 7 — Процедура вывода информации о питающихся

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.kakoemenu(IN idm int)

BEGIN

SELECT st_last_name, tch_last_name

FROM school_table

JOIN kitchen ON school_table.feeders_num = kitchen. feeders_num

JOIN students ON school_table.id_student = students.id_student

JOIN teachers ON school_table.id_teacher = teachers.id_teacher

WHERE id_menu = idm;

END

Рисунок 66 — Процедура вывода информации о питающихся

  1. Добавление нового id в таблицу students с пустыми полями, готовыми для заполнения. Код представлен в Листинге 8. Результат работы процедуры представлен на Рисунке 67.

Листинг 8 — Процедура добавления нового ученика с новым id

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.newstudent()

BEGIN

DECLARE AIDI int;

set aidi = (SELECT incrofun());

INSERT INTO students (id_student, st_last_name, st_first_name, st_patronymic, age)

VALUES (aidi, 'NewLastName', 'NewFirstName', 'NewPatronymic', 0);

END

Рисунок 67 — Процедура добавление нового id в таблицу students

  1. Удаление ученика по введенному id. Код представлен в Листинге 9. Результат работы процедуры представлен на Рисунке 68.

Листинг 9 — Процедура удаления ученика по id

CREATE DEFINER = 'root'@'localhost'

PROCEDURE canteen.deletestudent(IN uyt int)

BEGIN

DELETE FROM students WHERE id_student=uyt;

END

Рисунок 68 — Процедура удаления ученика по id

Функции

  1. Счетчик общего числа питающихся учителей. Код представлен в Листинге 10. Результат работы процедуры представлен на Рисунке 69.