Курсовая ПрБД, 2 курс 3 семестр (для ИВТ и т.п.) / Курсовая ПБД готовая
.pdfЗаполним таблицу «Технические заявки». Список вставленных элементов в таблицу изображен на рисунке 36:
INSERT INTO `Технические заявки` (`idЗаявки`,`idДоговора`,`idМенеджера`,
`Дата заявки`,`Описание проблемы`,`Статус`) VALUES
(1,1,3,'2024-02-20','Протечка крана на кухне','В
работе'), (2,2,6,'2024-01-15','Не работает замок входной
двери','Выполнено'), (3,3,2,'2024-03-10','Проблемы с
электричеством','Открыта'), (4,4,8,'2024-04-18','Шум вентиляции','В работе'),
(5,5,9,'2023-12-15','Замена уплотнителей окон','Выполнено'),
(6,6,11,'2024-04-20','Неисправность плиты','Открыта'),
(7,7,4,'2022-06-20','Замена лампы в коридоре','Выполнено'),
(8,8,5,'2021-05-18','Проблема с отоплением','Выполнено'),
(9,9,14,'2020-09-10','Плесень в ванной','Открыта'), (10,10,7,'2023-06-05','Замена краски в
прихожей','Выполнено');
61
Рис. 36 – Вставленные элементы в таблицу «Технические заявки»
Заполним таблицу «Платежи». Список вставленных элементов в таблицу изображен на рисунке 37:
INSERT INTO `Платежи`
(`idПлатежа`,`idДоговора`,`Дата платежа`,`Тип платежа`,
`Сумма`,`Способ оплаты`,`Статус`) VALUES
(1,1,'2024-02-01','Аренда',45000,'Карта','Проведён'), (2,1,'2024-03-01','Аренда',45000,'Карта','Проведён'), (3,2,'2024-01-
01','Аренда',60000,'Наличные','Проведён'), (4,2,'2024-02-
01','Аренда',60000,'Перевод','Проведён'), (5,3,'2024-03-01','Аренда',75000,'Карта','Проведён'), (6,4,'2024-04-
15','Аренда',52000,'Перевод','Проведён'), (7,5,'2024-01-01','Аренда',68000,'Карта','Проведён'), (8,6,'2024-05-10','Аренда',59000,'Карта','Проведён'),
62
(9,7,'2022-06-
10','Аренда',42000,'Наличные','Завершён'), (10,8,'2021-06-
10','Аренда',55000,'Перевод','Завершён'), (11,9,'2020-09-
01','Аренда',60000,'Карта','Завершён'), (12,10,'2023-06-
01','Аренда',50000,'Карта','Завершён'), (13,3,'2024-04-
01','Залог',35000,'Перевод','Проведён'), (14,1,'2024-02-01','Залог',20000,'Карта','Проведён'), (15,5,'2023-12-
01','Залог',30000,'Перевод','Проведён');
Рис. 37 – Вставленные элементы в таблицу «Платежи»
Заполним таблицу «Штрафы». Список вставленных элементов в таблицу изображен на рисунке 38:
INSERT INTO `Штрафы`
63
(`idШтрафа`,`idДоговора`,`Тип нарушения`,`Описание`, `Сумма штрафа`,`Дата начисления`,`Статус`) VALUES (1,1,'Просрочка платежа','Опоздание на 5
дней',3000,'2024-02-06','Оплачен'), (2,2,'Повреждение имущества','Царапины на
дверях',5000,'2024-01-12','Не оплачен'), (3,3,'Нарушение тишины','Шум после 23:00',2000,'2024-
03-12','Оплачен'), (4,4,'Просрочка платежа','Опоздание на 10
дней',4500,'2024-04-20','Не оплачен'), (5,5,'Несогласованная перепланировка','Перенос
мебели',6000,'2023-12-20','Оплачен'), (6,6,'Курение в квартире','Нарушение
правил',3500,'2024-04-22','Не оплачен'), (7,7,'Порча мебели','Сломана ручка шкафа',1500,'2022-
06-21','Оплачен'), (8,8,'Просрочка платежа','Опоздание на 3
дня',2000,'2021-05-19','Оплачен'), (9,9,'Ущерб отделке','Повреждение плитки',8000,'2020-
09-11','Не оплачен'), (10,10,'Шум','Жалобы соседей',2500,'2023-06-
06','Оплачен');
64
Рис. 38 – Вставленные элементы в таблицу «Штрафы»
В рамках данного этапа в среде phpMyAdmin были созданы таблицы базы данных в соответствии с логической моделью, настроены первичные и внешние ключи, а также индексы для обеспечения целостности данных. После этого таблицы были заполнены тестовыми записями, что подтвердило корректность структуры и связей между сущностями. Реализованная физическая модель полностью соответствует требованиям предметной области и готова к дальнейшему использованию.
65
5 Запросы к БД
1) Получение сведений о договоре аренды: ФИО арендатора, адрес квартиры и дата заключения договора (рис. 39)
SELECT
`Арендаторы`.`ФИО / название организации`, `Квартиры`.`Адрес`, `Договоры аренды`.`Дата заключения`
FROM `Договоры аренды`
INNER JOIN `Арендаторы`
ON `Договоры аренды`.`idАрендатора` = `Арендаторы`.`idАрендатора`
INNER JOIN `Квартиры`
ON `Договоры аренды`.`idКвартиры` = `Квартиры`.`idКвартиры`;
Рис. 39 – Внутреннее соединение по одному полю — INNER JOIN
Запрос использует INNER JOIN по одному полю и позволяет получить самые важные сведения — кто арендует квартиру, где она находится и когда был заключён договор. Полезно сотрудникам агентства.
2)Получение списка квартир, осматриваемых владельцами напрямую (рис. 40)
SELECT
66
`Владельцы`.`ФИО / название организации`, `Квартиры`.`Адрес`, `Осмотры квартиры`.`Дата осмотра`,
`Осмотры квартиры`.`Состояние` FROM `Владельцы`
INNER JOIN `Квартиры`
ON `Владельцы`.`idВладельца` = `Квартиры`.`idВладельца`
INNER JOIN `Осмотры квартиры`
ON `Квартиры`.`idКвартиры` = `Осмотры квартиры`.`idКвартиры`;
Рис. 40 – Косвенно связанные таблицы: Владельцы → Квартиры → Осмотры квартиры
Цепочка из трёх таблиц позволяет определить, какие квартиры принадлежат каким владельцам и когда они были осмотрены. Практический инструмент контроля состояния объектов.
3) Получение информации о платежах с указанием арендатора и адреса квартиры
(рис. 41)
SELECT
`Платежи`.`idПлатежа`, `Платежи`.`Тип платежа`,
67
`Платежи`.`Сумма`, `Арендаторы`.`ФИО / название организации`, `Квартиры`.`Адрес`
FROM `Платежи`
INNER JOIN `Договоры аренды`
ON `Платежи`.`idДоговора` = `Договоры аренды`.`idДоговора`
INNER JOIN `Арендаторы`
ON `Договоры аренды`.`idАрендатора` = `Арендаторы`.`idАрендатора`
INNER JOIN `Квартиры`
ON `Договоры аренды`.`idКвартиры` = `Квартиры`.`idКвартиры`;
Рис. 41 – Соединение более чем по одному полю
Запрос одновременно соединяет четыре таблицы, что позволяет получить полный финансовый контекст по каждому платежу.
4) Вывод всех квартир, включая свободные и без договоров аренды (рис. 42)
68
SELECT
`Квартиры`.`Адрес`, `Квартиры`.`Статус`, `Договоры аренды`.`Статус договора`
FROM `Квартиры`
LEFT JOIN `Договоры аренды`
ON `Квартиры`.`idКвартиры` = `Договоры аренды`.`idКвартиры`;
Рис. 42 – Внешнее соединение LEFT JOIN
LEFTJOINгарантирует,чтобудутотображеныдажеквартиры,покоторымещё нет заключённых договоров. Полезно для анализа свободного фонда.
5)Разбор адреса филиала на уровни с использованием псевдорекурсивного соединения (рис. 43)
SELECT
69
`idФилиала` AS `ID филиала`,
`Адрес регистрации` AS `Полный адрес`, TRIM(SUBSTRING_INDEX(`Адрес регистрации`, ',', 1)) AS
`Часть адреса`, 1 AS `Уровень`
FROM `Филиалы агентства`
UNION ALL SELECT
`idФилиала`,
`Адрес регистрации`,
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(`Адрес регистрации`, ',', 2), ',', -1)) AS `Часть адреса`,
2 AS `Уровень`
FROM `Филиалы агентства`
WHERE TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(`Адрес регистрации`, ',', 2), ',', -1)) <> ''
UNION ALL SELECT
`idФилиала`,
`Адрес регистрации`,
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(`Адрес регистрации`, ',', 3), ',', -1)) AS `Часть адреса`,
3 AS `Уровень`
FROM `Филиалы агентства`
WHERE TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(`Адрес регистрации`, ',', 3), ',', -1)) <> ''
ORDER BY `ID филиала`, `Уровень`;
70
