Отчет по СУБД
.docxМинистерство науки и образования Российской Федерации
ФГБОУ ВО Ивановский государственный химико-технологический университет
Кафедра технической кибернетики и автоматики
ЛАБОРАТОРНАЯ РАБОТА
По дисциплине: «СУБД»
Выполнил: ст. гр. 2/61 АТП и П Хавари П.А.
Проверил: ст. препод.
Чешинский М.А.
Иваново 2017
Содержание
Содержание |
2 |
Введение |
3 |
|
4 |
|
5 |
|
|
|
|
Заключение |
|
Введение
Для выполнения отчета был выбран следующий набор технологий: Apache сервер с PHP для создания веб-форм для работы с таблицей и визуализации ее данных, сервер MySQL ver. 15.1 (MariaDB). Для того, чтобы было проще реализовать связку между данными 3 технологиями была выбрана система XAMPP, которая в своем составе включает все 3 необходимых элемента. XAMPP мы устанавливаем на виртуальную машину с Ubuntu 16.04 LTS и запускаем сервер для работы с ним.
Для работы с БД используем среду управления MySQL – phpMyAdmin. Это готовый продукт, который имеет весь необходимый функционал для создания, редактирования и работы с MySQL.
Для написания форм и внешнего вида сайта для БД используется стек следующих технологий: HTML, CSS, JavaScript и PHP.
Постановка задачи
Есть алгоритм, который анализирует видео, выделяет в нем пиццы, оценивает качество их приготовления и вносит полученные результаты и картинки в БД.
Требуется реализовать следующее:
-
вывод последней распознанной пиццы;
-
вывод времени последней распознанной пиццы;
-
вывод последних 5 пицц в виде таблицы;
-
вывод списка ресторанов с указанием города, партнера, менеджера, средней статистике по оценке пиццы за 2, 4 часа, 1 день, 1 неделю;
-
вывод отчета по последним 30 пиццам по ресторану.
Список таблиц:
-
города;
-
регионы;
-
менеджеры;
-
партнеры;
-
фото;
-
пиццы;
-
виды пицц;
-
рестораны;
Перечень таблиц, их структуры
Представим вид таблиц и примеры данных в них:
Города:
Структура
Пример
Регионы:
Структура
Пример
Менеджеры:
Структура
Пример
Партнеры:
Структура
Пример
Фото
Структура
Пример
Пиццы:
Структура
Пример
Виды пицц:
Структура
Пример
Рестораны:
Структура
Пример
Примеры запросов к БД
-
Запрос на SQL для получения последних 10 пицц для определенного ресторана:
SELECT pizzas1.`id`,
`product_id`,
(`capture_dt` + INTERVAL 3 HOUR) as capture_dt,
(`razmer`+`bort`)AS testo,
(`cheezlok`+`cheezgot`+`cheezvnesh`+`cheezvnutr`) AS cheese,
(`kvadrvnesh`+`kvadrvnutr`) AS topping,
(`cvetverh`+`cvetnijn`) AS korzh, (`razmer`+`bort`+`cheezlok`+`cheezgot`+`cheezvnesh`+`cheezvnutr`+`kvadrvnesh`+`kvadrvnutr`+`cvetverh`+`cvetnijn`) AS itog ,
products.name_ru
FROM pizzas1
JOIN products ON products.id=pizzas1.PRODUCT_ID
WHERE pizzas1.RESTAURANT_ID =<ID ресторана>
ORDER BY pizzas1.CAPTURE_DT DESC LIMIT 10
Результат:
-
Запрос на SQL для даты последней пиццы для определенного ресторана, с поправкой на временя по GMT+3:
SELECT (`capture_dt` + INTERVAL 3 HOUR) as CAPTURE_DT
FROM pizzas1
WHERE pizzas1.restaurant_id = <ID ресторана>
ORDER BY pizzas1.capture_dt DESC LIMIT 1
Результат:
-
Запрос на SQL для получения id последней пиццы для определенного ресторана:
SELECT id
FROM pizzas1
WHERE pizzas1.restaurant_id = <ID ресторана>
ORDER BY pizzas1.capture_dt DESC LIMIT 1
Результат:
-
Запрос на SQL для получения списка всех ресторанов с нумерацией их по их id:
SELECT CONCAT(name,' ',id) as nm
FROM restaurants
Результат:
-
Запрос на SQL для получения списка ресторанов с указанием города, партнера, менеджера, средней статистике по оценке пиццы за 2, 4 часа, 1 день, 1 неделю:
SELECT rs.id, CONCAT(rs.name,' ',rs.id) AS rsname, pr.part_name_ru, mg.mng_name_ru, ct.city_name_ru, lst_h2.2hours, lst_h4.4hours, lst_d1.1day, lst_d7.1week
FROM restaurants rs
JOIN partners pr ON pr.id = rs.part_id
JOIN managers mg ON mg.id = rs.mng_id
JOIN citys ct ON ct.id = rs.city_id
LEFT OUTER JOIN (
SELECT pz.restaurant_id, round(avg(razmer+bort+cheezlok+cheezgot+cheezvnesh+cheezvnutr+kvadrvnesh+kvadrvnutr+cvetverh+cvetnijn), 2) 2hours
FROM pizzas1 pz WHERE addtime(pz.capture_dt, '3:0:0') between addtime(SYSDATE(), '-2:0:0') AND SYSDATE()
GROUP BY pz.restaurant_id
) lst_h2 ON lst_h2.restaurant_id = rs.id
LEFT OUTER JOIN (
SELECT pz.restaurant_id, round(avg(razmer+bort+cheezlok+cheezgot+cheezvnesh+cheezvnutr+kvadrvnesh+kvadrvnutr+cvetverh+cvetnijn), 2) 4hours
FROM pizzas1 pz WHERE addtime(pz.capture_dt, '3:0:0') between addtime(SYSDATE(), '-4:0:0') AND SYSDATE()
GROUP BY pz.restaurant_id
) lst_h4 ON lst_h4.restaurant_id = rs.id
LEFT OUTER JOIN (
SELECT pz.restaurant_id, round(avg(razmer+bort+cheezlok+cheezgot+cheezvnesh+cheezvnutr+kvadrvnesh+kvadrvnutr+cvetverh+cvetnijn), 2) 1day
FROM pizzas1 pz WHERE addtime(pz.capture_dt, '3:0:0') between adddate(SYSDATE(), -1) AND SYSDATE()
GROUP BY pz.restaurant_id
) lst_d1 ON lst_d1.restaurant_id = rs.id
LEFT OUTER JOIN (
SELECT pz.restaurant_id, round(avg(razmer+bort+cheezlok+cheezgot+cheezvnesh+cheezvnutr+kvadrvnesh+kvadrvnutr+cvetverh+cvetnijn), 2) 1week
FROM pizzas1 pz WHERE addtime(pz.capture_dt, '3:0:0') between adddate(SYSDATE(), -7) AND SYSDATE()
GROUP BY pz.restaurant_id
) lst_d7 ON lst_d7.restaurant_id = rs.id
order by rs.id
Результат:
-
Запрос на SQL для получения картинки пиццы по id:
SELECT photo_src
FROM photos
WHERE photos.id = 55600
Результат:
-
Запрос для добавления новых данных по оценке пицц в БД (данные берутся случайные):
INSERT INTO `pizzas1` (`id`, `product_id`, `restaurant_id`, `capture_dt`, `razmer`, `bort`, `cheezlok`, `cheezgot`, `cheezvnesh`, `cheezvnutr`, `kvadrvnesh`, `kvadrvnutr`, `cvetverh`, `cvetnijn`, `itogo`, `ver`, `params`, `upload_dt`, `filename`)
VALUES ('99999', '1', '1', 'SYSDATE()', '35', '0.6', '0.6', '1', '1', '1', '0.6', '0.6', '0.6', '0.6','0', '', NULL, CURRENT_TIMESTAMP, '".$filename."')
-
Запрос для создания новой таблицы городов в БД:
CREATE TABLE `citys` (
`id` int(10) UNSIGNED NOT NULL,
`loc_id` int(10) UNSIGNED NOT NULL,
`city_name` varchar(64) NOT NULL COMMENT 'город/населенный пункт ресторана',
`city_name_ru` varchar(64) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
Запрос для создания новой таблицы пицц в БД:
CREATE TABLE `pizzas1` (
`id` int(10) UNSIGNED NOT NULL,
`product_id` int(10) UNSIGNED NOT NULL,
`restaurant_id` int(10) UNSIGNED NOT NULL,
`capture_dt` datetime NOT NULL,
`razmer` decimal(3,2) DEFAULT NULL,
`bort` decimal(3,2) DEFAULT NULL,
`cheezlok` decimal(3,2) DEFAULT NULL,
`cheezgot` decimal(3,2) DEFAULT NULL,
`cheezvnesh` decimal(3,2) DEFAULT NULL,
`cheezvnutr` decimal(3,2) DEFAULT NULL,
`kvadrvnesh` decimal(3,2) DEFAULT NULL,
`kvadrvnutr` decimal(3,2) DEFAULT NULL,
`cvetverh` decimal(3,2) DEFAULT NULL,
`cvetnijn` decimal(3,2) DEFAULT NULL,
`itogo` decimal(4,2) DEFAULT NULL,
`ver` varchar(32) NOT NULL,
`params` varchar(32) DEFAULT NULL,
`upload_dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`filename` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Запрос на добавления внешних ключей для таблицы restaurants:
ALTER TABLE `restaurants`
ADD CONSTRAINT `restaurants_ibfk_1` FOREIGN KEY (`city_id`) REFERENCES `citys` (`id`) ON UPDATE CASCADE,
ADD CONSTRAINT `restaurants_ibfk_2` FOREIGN KEY (`mng_id`) REFERENCES `managers` (`id`) ON UPDATE CASCADE,
ADD CONSTRAINT `restaurants_ibfk_3` FOREIGN KEY (`part_id`) REFERENCES `partners` (`id`) ON UPDATE CASCADE,
ADD CONSTRAINT `restaurants_ibfk_4` FOREIGN KEY (`restt_id`) REFERENCES `resttypes` (`id`) ON UPDATE CASCADE;