3. Обоснование выбора субд
Для реализации курсовой работы выбрана СУБД MySQL – реляционная БД подходит для данных, с которыми идет работа.
Администрирование СУБД происходит с помощью веб-приложения с открытым исходным кодом PhpMyAdmin. PhpMyAdmin позволяет через браузер и не только осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Удобство выбранного приложения для администрирования СУБД состоит в том, что позволяет управлять СУБД MySQL без непосредственного ввода SQL команд. PhpMyAdmin является полностью бесплатным, запускается в любом браузере и не требует дополнительного ПО, кроме сервера.
4. Описание групп пользовАтелеЙ
Для СУБД потребуется несколько видов пользователя – администратор и обычный пользователь, так как с программой работать будут работники автосервиса и администратор. Работники автосервиса смогут использовать приложение для вывода каких-либо сведенных данных, т.е. просматривать базу данных, искать нужную информацию, администратор сверх этого функционала может добавлять, удалять и редактировать данные в БД.
Для наглядности прав доступа представим их в таблице 1.
Таблица 1 – Распределение прав доступа
Объект |
Пользователь |
Администратор |
Таблица «car» |
SU |
SUID |
Таблица «masters» |
SU |
SUID |
Таблица «owners» |
SU |
SUID |
Таблица «services» |
SU |
SUID |
Таблица «cars_services» |
SU |
SUID |
Таблица «masters_cars» |
SU |
SUID |
Таблица «owners_cars» |
SU |
SUID |
Таблица «services_masters» |
SU |
SUID |
5. Описание функций управление данными
В данном разделе описаны функции управления данными и создании таблиц.
Запрос для создания таблицы car:
CREATE TABLE `car` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Number` varchar(20) NOT NULL,
`RequestDate` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Запрос для создания таблицы masters:
CREATE TABLE `masters` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
Запрос для создания таблицы owners:
CREATE TABLE `owners` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Запрос для создания таблицы services:
CREATE TABLE `services` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(100) NOT NULL,
`Price` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
Запрос для создания таблицы cars_services:
CREATE TABLE `cars_services` (
`id_car` int(11) NOT NULL,
`id_service` int(11) NOT NULL,
KEY `id_car` (`id_car`),
KEY `id_service` (`id_service`),
CONSTRAINT `cars_services_ibfk_2` FOREIGN KEY (`id_service`) REFERENCES `services` (`id`),
CONSTRAINT `cars_services_ibfk_1` FOREIGN KEY (`id_car`) REFERENCES `car` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Запрос для создания таблицы masters_cars:
CREATE TABLE `masters_cars` (
`id_master` int(11) NOT NULL,
`id_car` int(11) NOT NULL,
KEY `id_master` (`id_master`),
KEY `id_car` (`id_car`), CONSTRAINT `masters_cars_ibfk_2` FOREIGN KEY (`id_car`) REFERENCES `car` (`id`),
CONSTRAINT `masters_cars_ibfk_1` FOREIGN KEY (`id_master`) REFERENCES `masters` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Запрос для создания таблицы owners_cars:
CREATE TABLE `owners_cars` (
`id_owner` int(11) NOT NULL,
`id_car` int(11) NOT NULL,
UNIQUE KEY `id_car` (`id_car`), KEY `id_owner` (`id_owner`),
CONSTRAINT `owners_cars_ibfk_2` FOREIGN KEY (`id_car`) REFERENCES `car` (`id`),
CONSTRAINT `owners_cars_ibfk_1` FOREIGN KEY (`id_owner`) REFERENCES `owners` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Запрос для создания таблицы services_masters:
CREATE TABLE `services_masters` (
`id_service` int(11) NOT NULL,
`id_master` int(11) NOT NULL,
KEY `id_service` (`id_service`),
KEY `is_master` (`id_master`),
CONSTRAINT `services_masters_ibfk_2` FOREIGN KEY (`id_master`) REFERENCES `masters` (`id`),
CONSTRAINT `services_masters_ibfk_1` FOREIGN KEY (`id_service`) REFERENCES `services` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Запрос для добавления записи в car:
INSERT INTO `carservice`.`car` (
`id` ,
`Number` ,
`RequestDate` ,
`OnService`
)
VALUES (
NULL , 'Р 711 ХФ', '2022-11-20', '0'
);
Запрос для создания записи в промежуточной таблице cars_services, где указываются проблемы машин, связывая идентификатор машины с идентификатором услуги автосалона:
INSERT INTO `carservice`.`cars_services` (
`id` ,
`id_car` ,
`id_service`
)
VALUES (
NULL , '27', '7'
);
Запрос для формирования списка услуг, предлагаемых автосервисом, с указанием их цены:
SELECT Name, Price
FROM services
ORDER BY `services`.`Price` ASC
Запрос для формирования списка машин, в данный момент обслуживаемых автосервисом, с указанием их цены:
SELECT Number, RequestDate
FROM `car`
WHERE `onService`=1
ORDER BY `car`.`RequestDate` DESC
Выдача информации о данной машине (оказываемые услуги):
SELECT
car.Number AS 'Номер машины',
services.Name AS 'Услуга',
services.Price AS 'Стоимость'
FROM cars_services
LEFT JOIN car ON (car.id = cars_services.id_car)
LEFT JOIN services ON (services.id = cars_services.id_service)
WHERE car.Number = ' /* НОМЕР МАШИНЫ, О КОТОРОЙ ПРЕДОСТАВЛЯЕТСЯ ИНФОРМАЦИЯ */ '
Запрос для формирования строки со списком машин одного владельца:
SELECT
owners.Name AS 'Хозяин',
(SELECT GROUP_CONCAT(car.Number SEPARATOR ', ') FROM car, owners_cars WHERE
car.id = owners_cars.id_car and
owners_cars.id_owner = owners.id) AS 'Номер машины'
FROM owners
WHERE owners.id = /* id хозяина*/
Запрос для формирования списка машин и общей стоимости ремонтных услуг для каждой машины для владельца авто:
SELECT
owners.Name AS 'Хозяин',
car.Number AS 'Машины',
(SELECT SUM(services.Price) FROM services, cars_services
WHERE services.id = cars_services.id_service and cars_services.id_car = car.id) AS 'Цены на услуги'
FROM owners_cars
LEFT JOIN car ON ( car.id = owners_cars.id_car )
LEFT JOIN owners ON ( owners.id = owners_cars.id_owner )
WHERE owners.id = /* id хозяина*/