
Итоговый отчет
.docx
|
||
МИНОБРНАУКИ РОССИИ |
||
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "МИРЭА — Российский технологический университет" РТУ МИРЭА
![]() |
ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ
|
||||
по дисциплине |
||||
«Разработка баз данных»
|
||||
Студент группы |
ИНБО-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. Результат работы процедуры представлен на Рисунке 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 — Процедура присвоения статуса
Количество всех питающихся (и ученики, и учителя). Код представлен в Листинге 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 — Процедура счета количества питающихся
Вывод имени и фамилии учеников, у которых возраст больше заданного. Код представлен в Листинге 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 — Процедура вывода информации об ученике
Вывод возраста по заданной фамилии. Код представлен в Листинге 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 — Процедура вывода возраста
Ввод номера питающегося, получаем 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
Вывод столбцов фамилии учеников и учителей в зависимости от номера питающегося. Код представлен в Листинге 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 — Процедура вывода информации о питающихся
Вывод фамилий питающихся у которых 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 — Процедура вывода информации о питающихся
Добавление нового 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
Удаление ученика по введенному 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
Функции
Счетчик общего числа питающихся учителей. Код представлен в Листинге 10. Результат работы процедуры представлен на Рисунке 69.