Отчет по практике
Проектирование базы данных центра по продаже автомобилей
Введение
В рамках выполнения практики необходимо разработать WEB-интерфейс под базу центра по продаже автомобилей. Таким образом, целью работы было спроектировать базу данных, удобную для автоматизации учета транзакций и учета поведения пользователей и сделать возможным ее редактирование через интернет; база должна предоставлять пользователю наиболее полные данные об имеющихся в наличии автомобилях, отвечать специфике центра по продаже автомобилей в целом. Так же в рамках учебной работы база не перегружалась обилием данных.
Были поставлены следующие задачи:
· Анализ предметной области (выявление сущностей, связей, модели работы магазина и ее предпосылок);
· Построение модели базы данных;
· Разработка запросов, позволяющих осуществить поиск и вывод необходимой информации для пользователя;
· Разработка запросов, позволяющих добавлять, удалять и редактировать информацию;
· Разработка WEB-интерфейса для данной
БД
1. Описание предметной области
пользователь запрос продажа автомобиль
Описание модели работы центра по продажам и ее предпосылок
В центре по продажам существует каталог товаров - автомобилей; каждая модель может быть представлена в одном или нескольких экземплярах (одинаковых или различных) Покупатель регистрируется на сайте и делает заказ, после чего ему рассчитывается сумма заказа и заказанные автомобили удаляются из базы.
Описание сущностей
PK - Primary Key; FK - Foreign Key
Car
Поле
Описание поля
Тип данных
idCar(PK)
Идентификационный номер
INT
Model
Модель
VARCHAR(45)
Gearbox
Тип КПП
VARCHAR(2)
Colour
Цвет
VARCHAR(45)
Order_idOrder(FK)
Связующее поле
INT
Brand_BrandName(FK)
Связующее поле
VARCHAR(45)
VehicleType_idType(FK)
Связующее поле
VARCHAR(45)
Engine_idEngine(FK)
Связующее поле
VARCHAR(3)
Condition_Damaged(FK)
Связующее поле
VARCHAR(3)
Brand
ПолеОписание поляТип данных
BrandName(PK)
Название
VARCHAR(45)
Country
Страна-производитель
VARCHAR(45)
Customer
ПолеОписание поляТип данных
idCustomer
Идентификационный номер
INT
Name
Имя клиента
VARCHAR(45)
Surname
Фамилия клиента
VARCHAR(45)
E-mail
Электронный адрес
VARCHAR(45)
Adress
Адрес доставки
VARCHAR(45)
Phone
Телефон
VARCHAR(45)
Login
Логин
VARCHAR(45)
Passwd
Пароль
VARCHAR(45)
Condition
ПолеОписание поляТип данных
Damaged (PK)
Индикатор поврежденных автомобилей
VARCHAR(3)
Mileage
Пробег
VARCHAR(45)
Engine
Поле
Описание поля
Тип данных
idEngine
Идентификационный номер
INT
EngineType(PK)
Тип двигателя
VARCHAR(3)
CubicCapacity
Объем двигателя
INT
Horsepower
Мощность двигателя
INT
FuelType
Тип топлива
VARCHAR(45)
Поле
Описание поля
Тип данных
idType(PK)
Идентификационный номер
INT
Type
Тип автомобилей
VARCHAR(45)
DoorNum
Кол-во дверей
INT
Поле
Описание поля
Тип данных
IdOrder (PK)
Идентификационный номер
INT
Date
Дата покупки
DATE
Sum
Сумма к оплате
VARCHAR(45)
Customer_idCustomer(FK)
Связующее поле
VARCHAR(45)
Описание связей между
сущностями
Brand-Car - под брендом может выпускаться неограниченное количество разных
автомобилей, связь 1:М
Customer-Order - от одного покупателя может поступать неограниченное кол-во
заказов, связь 1:М
Order-Car - один заказ может содержать несколько машин, связь 1:М
VehicleType-Car - несколько машин могут быть одинакового типа, связь 1:М
Condition-Car - несколько машин могут быть одинакового состояния, связь 1:М
Engine-Car - несколько машин могут иметь одинаковые двигатели, связь 1:М
. Описание структуры БД
Модель базы данных
По имеющимся описаниям сущностей и
связей в редакторе MySQL Workbench была создана модель, проиллюстрированная нижеследующей
диаграммой:
Погружение в Mysql Workbench
Создание базы
Для создания базы было установлено
соединение по адресу 127.0.0.1 и именем пользователя root@localhost
На начальный момент база содержала
семь пустых таблиц, что подтверждали соответствующие запросы
Работа с запросами к
базе
1) SELECT * FROM
((mydb2. Car inner join mydb2. Engine on Car. Engine_idEngine =
Engine.idEngine)JOIN mydb2. VehicleType ON Car. VehicleType_idType =
VehicleType.idType)JOIN mydb2. Condition ON Car. Condition_Damaged = Condition.
Damaged
) SELECT mydb2. Customer.
Login, mydb2. Customer. Passwd FROM mydb2. Customer
) INSERT INTO
`mydb2`.`Customer` (`idCustomer`, `Name`, `Surname`, `E-mail`, `Adress`,
`PhoneNum`, `Login`, `Passwd`)(NULL, '$c1', '$c2', '$c3', NULL, '$c4', '$c5',
'$c6');
) DELETE FROM mydb2. Car
WHERE Car.idCar = $data['idCar']
3. Описание структуры и
функционирования сайта
Начальная страница авторизации, если
пользователь не авторизован, он не может зайти на другие страницы кроме
регистрации
Страница регистрации
Главная функциональная страница
сайта, с нее осуществляется доступ на все остальные страницы. Таблица
автомобилей появляется после нажатия на кнопку «Просмотреть базу автомобилей»
Главная страница после нажатия на
кнопку «Добавить в базу»
Страница обратной связи
Страница About
. Описание основной страницы
Основная страница позволяет
осуществлять просмотр, поиск, редактирование (добавление и удаление), а также
переадресация на страницы обратной связи, информации о сайте и выходить из
учетной записи
Просмотр базы
Удаление из базы производится
посредством установки галочки напротив нужного объекта и нажатия кнопки
«Удалить выбранные объекты». Добавление в базу
Поиск по базе производится после
ввода символов в запрос поиска.
Заключение
В результате прохождения учебной
практики был создан сайт, способный выполнять все поставленные задачи, а именно
просматривать и редактировать базу данных, загруженную на локальный сервер.
Несомненно, для реального
использования необходимо более детально и реалистично проработать модель работы
центра по продаже, учесть в ней возможные риски, динамику, взаимодействие
поставщиками и т.д.
Приложение
SQL-описание:
CREATE SCHEMA
`mydb2`;`mydb2`;
- -
Table `mydb2`.`Customer`
-TABLE
`mydb2`.`Customer` (
`idCustomer` INT NOT
NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NOT
NULL,
`Surname` VARCHAR(45)
NOT NULL,
`E-mail` VARCHAR(45) NOT
NULL,
`Adress` VARCHAR(45)
NULL,
`PhoneNum` VARCHAR(45)
NOT NULL,
`Login` VARCHAR(45) NOT
NULL,
`Passwd` VARCHAR(45) NOT
NULL,KEY (`idCustomer`))= InnoDB;
-
Table `mydb2`.`Order`
-TABLE IF NOT EXISTS
`mydb2`.`Order` (
`idOrder` INT NOT NULL,
`Date` DATE NULL,
`Sum` VARCHAR(45) NULL,
`Customer_idCustomer`
INT NULL,KEY (`idOrder`),`fk_Order_Customer1_idx` (`Customer_idCustomer`
ASC),`fk_Order_Customer1`KEY (`Customer_idCustomer`)`mydb2`.`Customer`
(`idCustomer`)
)= InnoDB;
-
Table `mydb2`.`Brand`
-TABLE `mydb2`.`Brand` (
`BrandName` VARCHAR(45)
NOT NULL,
`Country` VARCHAR(45)
NULL,KEY (`BrandName`))= InnoDB;
-
Table
`mydb2`.`Condition`
-TABLE
`mydb2`.`Condition` (
`Damaged` VARCHAR(3) NOT
NULL,
`Mileage` VARCHAR(45)
NULL,KEY (`Damaged`))= InnoDB;
- -
Table `mydb2`.`Engine`
-TABLE `mydb2`.`Engine`
(
`idEngine` INT NOT NULL
AUTO_INCREMENT,
`EngineType` VARCHAR(3)
NULL,
`CubicCapacity` INT NOT
NULL,
`Horsepower` INT NULL,
`FuelType` VARCHAR(45)
NULL,KEY (`idEngine`))= InnoDB;
-
Table
`mydb2`.`VehicleType`
-TABLE
`mydb2`.`VehicleType` (
`idType` INT NOT NULL
AUTO_INCREMENT,
`Type` VARCHAR(45) NOT
NULL,
`DoorNum` INT NULL,KEY
(`idType`))= InnoDB;
-
Table `mydb2`.`Car`
-TABLE `mydb2`.`Car` (
`idCar` INT NOT NULL
AUTO_INCREMENT,
`Brand_BrandName`
VARCHAR(45) NOT NULL,
`Model` VARCHAR(45) NOT
NULL,
`Gearbox` VARCHAR(2) NOT
NULL,
`Engine_idEngine` INT
NOT NULL,
`VehicleType_idType` INT
NOT NULL,
`Colour` VARCHAR(45) NOT
NULL,
`Order_idOrder` INT
NULL,
`Condition_Damaged`
VARCHAR(3) NOT NULL,KEY (`idCar`),`fk_Car_Order1_idx` (`Order_idOrder`
ASC),`fk_Car_Brand1_idx` (`Brand_BrandName` ASC),`fk_Car_Condition1_idx`
(`Condition_Damaged` ASC),`fk_Car_Engine1_idx` (`Engine_idEngine`
ASC),`fk_Car_VehicleType1_idx` (`VehicleType_idType` ASC),`fk_Car_Order1`KEY
(`Order_idOrder`)`mydb2`.`Order` (`idOrder`)
,`fk_Car_Brand1`KEY
(`Brand_BrandName`)`mydb2`.`Brand` (`BrandName`)
,`fk_Car_Condition1`KEY
(`Condition_Damaged`)`mydb2`.`Condition` (`Damaged`)
,`fk_Car_Engine1`KEY
(`Engine_idEngine`)`mydb2`.`Engine` (`idEngine`)
,`fk_Car_VehicleType1`KEY
(`VehicleType_idType`)`mydb2`.`VehicleType` (`idType`)
)= InnoDB;
Главная:
<? php_start();
?>
<html>
<head>
<title>Главная</title>
</head>
<body>
<form method=
«POST»>
<br>
<center><input
type= «text» name= «search» size= «50» placeholder= «Поиск по базе»></center>
<input type= «submit»
name= «show» value= «Просмотреть базу
автомобилей»><br>
<input type= «submit»
name= «del» value= «Удалить выбранные объекты»><br>
<input type= «submit»
name= «add» value= «Добавить в базу»><br>
<p align=
«right»><input type= «submit» name= «os» value= «Обратная связь»><br>
<input type= «submit»
name= «about» value= «О сайте»><br>
<input type= «submit»
name= «exit» value= «Выход»><br>
</p><center>
<? php(empty ($_SESSION['login']))
{'<script>location.replace
(«/denwer/aut.php»); </script>'; exit;();
}
$action1=$_POST['show'];($action1==
«Просмотреть базу автомобилей»)
{
$hostname = 'localhost';
$username = 'root';
$password = «;
$dbName = 'mydb2';
/* создать соединение */
$connect_to_db =
MYSQL_CONNECT ($hostname,$username,$password) OR DIE («Не могу создать соединение»);_select_db
($dbName,$connect_to_db);
/* Осуществляем определенные
операции с СУБД */
$qr_result = mysql_query
(«select * from ((mydb2. Car inner join mydb2. Engine on Car. Engine_idEngine =
Engine.idEngine)join mydb2. VehicleType on Car. VehicleType_idType =
VehicleType.idType)join mydb2. Condition on Car. Condition_Damaged = Condition.
Damaged») or die (mysql_error());
echo '<table border=
«1»>';'<thead>';'<tr>';'<th></th>';'<th>ID</th>';'<th>Марка</th>';'<th>Модель</th>';'<th>Тип КПП</th>';'<th>Объем двигателя</th>';'<th>Тип кузова</th>';'<th>Цвет</th>';'<th>Номер заказа</th>';'<th>Повреждения</th>';'</tr>';'</thead>';'<tbody>';
($data =
mysql_fetch_array ($qr_result))
{'<tr>';'<td><input
type= «checkbox» name= «check1» value= «off»/></td>';'<td>'.
$data['idCar']. '</td>';'<td>'. $data ['Brand_BrandName'].
'</td>';'<td>'. $data['Model']. '</td>';'<td>'. $data['Gearbox'].
'</td>';'<td>'. $data['CubicCapacity']. '</td>';'<td>'.
$data['Type']. '</td>';'<td>'. $data['Colour'].
'</td>';'<td>'. $data ['Order_idOrder'].
'</td>';'<td>'. $data['Damaged']. '</td>';'</tr>';
}
echo
'</tbody>';'</table>';
_CLOSE ($connect_to_db);
}
$action2 =
$_POST['del'];
$action3 =
$_POST['add'];
if ($action2 == «Удалить выбранный
объект»)
{($_POST['check1'] ==
'on')
{
$hostname = 'localhost';
$username = 'root';
$password = «;
$dbName = 'mydb2';
/* создать соединение */
$connect_to_db =
MYSQL_CONNECT ($hostname,$username,$password) OR DIE («Не могу создать соединение»);_select_db
($dbName,$connect_to_db);
/* Осуществляем определенные
операции с СУБД */
mysql_close
($connect_to_db);
}echo «Не выбран объект для
удаления»;
}
($action3 == «Добавить в базу»)
{'<p align =
«left»><input type= «text» name= «mark» size= «50» placeholder= «Марка»><br>';'<input
type= «text» name= «model» size= «50» placeholder= «Модель»><br>';'<input
type= «text» name= «gb» size= «50» placeholder= «Тип КПП»><br>';'<input type= «text» name= «cc» size= «50»
placeholder= «Объем
двигателя»><br>';'<input
type= «text» name= «body» size= «50» placeholder= «Тип кузова»><br>';'<input
type= «text» name= «colour» size= «50» placeholder= «Цвет»><br>';'<input
type= «text» name= «cond» size= «50» placeholder= «Повреждения»><br>';'<input
type= «submit» name= «add2» value= «Добавить»>';
$w1 = $_POST['mark'];
$w2 = $_POST['model'];
$w3 = $_POST['gb'];
$w4 = $_POST['cc'];
$w5 = $_POST['body'];
$w6 = $_POST['colour'];
$w7 = $_POST['cond'];
$add1=
$_POST['add2'];($add1 == «Добавить»)
{
$hostname = 'localhost';
$username = 'root';
$password = «;
$dbName = 'mydb2';
/* создать соединение */
$connect_to_db =
MYSQL_CONNECT ($hostname,$username,$password) OR DIE («Не могу создать соединение»);_select_db
($dbName,$connect_to_db);
/* Осуществляем определенные
операции с СУБД */
$qr2 = mysql_query
(«incert into mydb2. Condition (Damaged, Mileage) values ('$w7', NULL)»);
if ($qr2 == true)
{«Автомобиль успешно добавлен в
базу»;
}_close
($connect_to_db);
}
}
$act4 =
$_POST['os'];($act4 == «Обратная связь»)
{'<script>location.replace
(«/denwer/os.php»);</script>'; exit;();
}
$act5 =
$_POST['exit'];($act5 == «Выход»)
{($_SESSION['login']);'<script>location.replace
(«/denwer/aut.php»);</script>'; exit;();
}
$d2 =
$_POST['about'];($d2 == «О сайте»)
{'<script>location.replace
(«/denwer/about.php»);</script>'; exit;
exit();
}
?>
</form>
</body>
</html>
Авторизация:
<? php_start();
?>
<html>
<head>
<title>Авторизация</title>
</head>
<body>
<form method=
«POST»> <br>
</br>
Логин<br>
<p>
<input type= «text»
name= «login» size= «20»><br>
<p>
Пароль<br>
<p>
<input type=
«password» name= «passwd» size= «20»><br>
<p>
<input type= «submit»
name= «enter» value= «Вход»>
<input type= «submit»
name= «reg» value= «Регистрация»><br>
<? php
$action1 =
$_POST['enter'];
$action2 =
$_POST['reg'];($action1 == «Вход»)
{
$hostname = 'localhost';
$username = 'root';
$password = «;
$dbName = 'mydb2';
/* создать соединение */
$connect_to_db =
MYSQL_CONNECT ($hostname,$username,$password) OR DIE («Не могу создать соединение»);_select_db
($dbName,$connect_to_db);
$query1 = mysql_query
(«select mydb2. Customer. Login, mydb2. Customer. Passwd FROM mydb2.
Customer»);($t=mysql_fetch_array($query1))
{($t['Login']==$_POST['login']
AND $t['Passwd']==md5 ($_POST['passwd']))
{
$_SESSION['login']=$_POST['login'];'<script>location.replace
(«/denwer/start.php»);</script>'; exit;
exit();
}
}«Ошибка входа: неверный логин или
пароль»;
mysql_close
($connect_to_db);
}
($action2 == «Регистрация»)
{'<script>location.replace
(«/denwer/reg.php»);</script>'; exit;
exit();
}
?>
</form>
</body>
</html>
Регистрация:
<html>
<head>
<title>Регистрация</title>
</head>
<body>
<form method=
«POST»>
<center>
<br>
<table border=
«1»>
<thead>
<tr>
<th>Логин</th>
<th><input
type= «text» name= «login» size= «35»></th>
</tr>
<tr>
<th>Пароль</th>
<th><input
type= «text» name= «passwd» size= «35»></th>
</tr>
<tr>
<th>Имя</th>
<th><input
type= «text» name= «name1» size= «35»></th>
</tr>
<tr>
<th>Фамилия</th>
<th><input
type= «text» name= «surname» size= «35»></th>
</tr>
<tr>
<th>Email</th>
<th><input
type= «text» name= «email» size= «35»></th>
</tr>
<tr>
<th>Телефон</th>
<th><input
type= «text» name= «phonenum» size= «35»></th>
</tr>
</thead>
</tbody>
</table>
</br>
<input type= «submit»
name= «finish» value= «Зарегестрироваться»>
<input type= «submit»
name= «back» value= «Назад»>
<? php
$act1 =
$_POST['finish'];
$act2 =
$_POST['back'];($act1 == «Зарегестрироваться»)
{
$hostname = 'localhost';
$username = 'root';
$password = «;
$dbName = 'mydb2';
/* создать соединение */
$connect_to_db =
MYSQL_CONNECT ($hostname,$username,$password) OR DIE («Не могу создать соединение»);_select_db
($dbName,$connect_to_db);
$c1 = $_POST['name1'];
$c2 = $_POST['surname'];
$c3 = $_POST['email'];
$c4 =
$_POST['phonenum'];
$c5 = $_POST['login'];
$c6 = md5
($_POST['passwd']);
$q2 = mysql_query («INSERT
INTO `mydb2`.`Customer` (`idCustomer`, `Name`, `Surname`, `E-mail`, `Adress`,
`PhoneNum`, `Login`, `Passwd`)(NULL, '$c1', '$c2', '$c3', NULL, '$c4', '$c5',
'$c6');»);
if ($q2 == true)
{«Регистрация пройдена успешно»;
}
_close ($connect_to_db);
}($act2 == «Назад»)
{'<script>location.replace
(«/denwer/aut.php»);</script>'; exit;
exit();
}
?>
</form>
</body>
</html>
Обратная связь:
<? php_start();
?>
<html>
<head>
<title>Обратная связь</title>
</head>
<body>
<form method=
«POST»>
Имя<br>
<input type= «text»
name= «name2» size= «30»><br>
Телефон<br>
<input type= «text»
name= «phonenum» size= «30»><br><br>
<input type= «text»
name= «email» size= «30»><br>
Текст
сообщения<br>
<TEXTAREA name=
«message» wrap= «physical» cols= «50» rows= «10»>
</TEXTAREA><br>
<input type= «submit»
name= «ok» value= «Отправить»>
<input type= «submit»
name= «back» value= «На главную»>
<? php(empty
($_SESSION['login']))
{'<script>location.replace
(«/denwer/aut.php»); </script>'; exit;();
}
$act3 =
$_POST['ok'];($act3 == «Отправить»)
{
$nam = $_POST['name2'];
$ph =
$_POST['phonenum'];
$email =
$_POST['email'];
$message =
$_POST['message'];
$head = «Content-type:
text/html; charset=windows-1251 \r\n»;
$head.= «From: \r\n»;
$theme = «Тема письма»;
$msg = «Имя: $nam<br/>:
$email <br/>
Телефон: $ph <br/>
Сообщение: <br/>$message»;
$mail_to =
«ornik2010@gmail.com»;($mail_to, $theme, $msg, $head);
echo «Сообщение отправлено»;
}
$act6 = $_POST['back'];
if ($act6== «На главную»)
{'<script>location.replace
(«/denwer/start.php»);</script>'; exit;
exit();
}
?>
</form>
</body>
</html>
About:
<? php_start();
?>
<html>
<head>
<title></title>
</head>
<body>
<form method=
«POST»>
<br>
<center>
Автор и разработчик сайта<br>
<p>
студент 273 группы факультета
Бизнес-Информатики<br>
<p>
Орлов Н.
</center>
<? php(empty
($_SESSION['login']))
{'<script>location.replace
(«/denwer/aut.php»); </script>'; exit;
exit();
}
?>
</form>
</body>
</html>