База данных автомагазина
ВВЕДЕНИЕ
База данных (БД) – это хранилище для некоторого набора занесенных в компьютер данных.
SQL – это сокращенное
название структурированного
Компьютерная программа, которая управляет БД, называется системой управления базой данных, или СУБД. Основное назначение этой системы – хранить данные и предоставлять их по требованию.
Если пользователю необходимо получить информацию из базы данных, он запрашивает её у СУБД с помощью SQL. СУБД находит требуемые данные и отправляет их пользователю. Процесс запрашивания данных называется запросом к БД.
Рисунок 1 – использование SQL для доступа к БД
Организация данных и способы доступа к ним, обеспечиваемые СУБД, называются моделью данных (иерархическая, сетевая, реляционная, постреляционная, многомерная, объектно-ориентированная). Модель данных определяет «лицо» СУБД и круг приложений, для которых она подходит наилучшим образом.
Реляционной называется база данных, в которой все данные, доступные пользователю, организованы в виде таблиц, а все операции над данными сводятся к операциям над этими таблицами. Таким образом, в реляционной базе данных информация организована в виде таблиц. У каждой таблицы есть уникальное имя. На пересечении каждой строки с каждым столбцом содержится в точности одно значение данных.
В каждой таблице есть один или несколько столбцов, упорядоченных слева направо. Все значения данных в одном столбце имеют одинаковый тип и входят в набор допустимых значений, который называется доменом этого столбца. У каждого столбца в таблице есть уникальное имя. Столбцам, расположенным в разных таблицах разрешается присваивать одинаковые имена. В каждой таблице есть ноль или более строк, которые в таблице не упорядочены.
Отношения между таблицами
реализуются с помощью
Первичным ключом называется столбец или группа столбцов таблицы, значения которых уникальным образом идентифицируют каждую строку таблицы. У таблицы есть только один первичный ключ.
Внешним ключом называется столбец или группа столбцов таблицы, значения которых совпадают со значениями первичного ключа другой таблицы. Таблица может содержать несколько внешних ключей, связывающих её с одной или несколькими другими таблицами.
Пара «первичный ключ
– внешний ключ» создает
1 АНАЛИТИЧЕСКИЙ ОБЗОР
Основная задача курсового проекта – проектирование БД «Автосалона», а также последующая разработка программного обеспечения, пользователь смотеж получить доступ к информации, хранящейся в БД, а так же совершить необходимые действия, скрывая при этом внутреннюю организацию базы данных.
Основными требования к разрабатываемому программному обеспечению являются:
- Осуществить связь с БД для получения нужной информции;
- Простой и понятный интерфейс для пользователя;
- Легкий доступ к информации, находящейся в БД;
- Возможность добавления и удаления в БД;
- Скрытность внутренней организации БД;
Для организации базы данных в курсовой работе была использована система управления базами данных MySQL. Этот выбор был сделан в связи с тем что MySQL имеет ряд достоинств:
- MySQL - бесплатная СУБД;
- Хорошо работает с PHP, на котором разрабатывалось ПО;
- Имеет гибкую систему привилегий и паролей;
- Все операции работы со строками не обращают внимания на регистр символов в обрабатываемых строках;
- Имеет легкость управления таблицей, включая добавление и удаление ключей и полей.
- Для реализации поставленной задачи курсового проекта использован пакет Denwer.
Проект AppServ включает в себя:
- Apache 2.2.8.
- PHP 6.0-dev GD и MySQL.
- MySQL 5.0.51b
- phpMyAdmin — систему управления MySQL через Web-интерфейс.
Главное достоинство и преимущество AppServ является то что это ПО бесплатное, а так же легко устанавливается и удобно в работе.
2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ
В программном обеспечении кусового проэкта будет реализована база автосалона. В которой содержатся автомобили с возможным их добвлением и удалением,при покупе автомобиля, он автоматически удалеяется из общей таблици с авто.Так же в базе есть информация о производителе и сотрудниках автосалона.
3 ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
3.1 Структура базы данных
Данная база данных создается для обслуживания автосалона. Она будет
состоять из 5 таблиц связанных между собой:
- Sotrudniki - Сотрудники:
id_ sotrud –уникальный номер сотрудника (первичный ключ)
neme –имя
post –должность
adress -адресс
phone -телефон;
- Avto – Автомобили:
id_avto -уникальный номер авто (первичный ключ)
num_korpusa –номер кузова
num_motor –номер двигателя
cena –цена
data_proizvodstva –дата выпуска
cvet –цвет авто
komplekt –комплектация авто;
- Prodazha – Продажа:
id_prodazh -уникальный номер продажи (первичный ключ)
id_avto –уникальный номер авто
name_pokupatel –имя покупателя
num_pasport -номер паспорта
adress -адресс
phone -телефон;
- Dolzhnosti -Должности
post –должность сотрудника (первичный ключ)
name –имя сотрудника
adress –адрес сотрудника
phone –телефон сотрудника;
- Proizvoditel - Производитель
id_avto- уникальный номер авто (первичный ключ)
marka –марка
num_kuzov –номер кузова
nim_dvig -номер двигателя
cvet -цвет
data_vypusk –дата выпуска авто
data_prihoda –дата поступления авто
komplekt –комплектация
cena –цена авто;
Таблица «Автомобили (в наличии)» связанна первичным ключом с таблицей «Продажа» через вторичный ключ «№ автомобиля».
Таблица «Производитель» связанна первичным ключом с таблицей «Автомобили (в наличии)» через через вторичный ключ «Производитель».
Таблица «Должности» связанна первичным ключом с таблицей «Сотрудники» через через вторичный ключ «Должность содтрудника».
3.2 Концептуальная модель
Фундаментальными реалиями в концептуальном моделированием являются данные с их свойствами и связи между ними. Главными элементами модели данных являются типы объектов, их атрибуты и типы связей (Рисунок 3.2.1). Типы объектов часто представляют в виде существительных, а типы связей – в виде глаголов.
Рисунок 3.2.1 - обозначения элементов диаграммы
На основании этих данных выделим основные объекты базы данных и связи между ними (Рисунок 3.2.2).
Рисунок 3.2.2 - концептуальная модель
3.3 Реляционная модель базы данных
Реляционный подход обозначает определенную идеологию создания баз данных. Настойчивое желание пользователей оперировать более крупными объектами, чем элементы данных ТГ-моделей (макрообъектами), предопределило ее появление и способствовало тому, что эта идеология довольно быстро завоевала мир. На скорость распространения идей реляционного подхода значительное влияние в основном оказали два фактора.
Во-первых, БД представляется на внешнем, не зависящем от структуры ЭВМ уровне в виде совокупности двумерных таблиц, повседневно встречающихся в человеческой практике. Работа с таблицами привычна и понятна каждому пользователю. При этом весьма важно, что поиск и обработка информации, хранящейся в таблицах, не зависит от организации хранения данных в памяти
ЭВМ, что значительно упрощает взаимодействие пользователя с банком данных и существенно повышает производительность его труда.
Во-вторых, манипулирование данными реляционной базы данных, которая с математической точки зрения представляет собой конечный набор конечных отношений различной арности между заранее определенным множеством элементарных данных, осуществляется в соответствии со специально разработанной для этой цели реляционной теорией. Над отношениями модели
можно осуществлять различные алгебраические операции. Теория РБД как раз и определяет, какие операции и каким образом необходимо выполнять над отношениями, чтобы достичь заданной цели.
В настоящее время реляционный подход к построению информационных систем является наиболее распространенным. К числу достоинств реляционного подхода можно отнести:
- Наличие небольшого набора абстракций, которые позволяют сравнительно просто моделировать большую часть распространенных предметных областей и допускают точные формальные определения, оставаясь интуитивно понятными;
- Наличие простого и в то же время мощного математического аппарата, опирающегося главным образом на теорию множеств и математическую логику и обеспечивающего теоретический базис реляционного подхода к организации БД;
- Возможность ненавигационного манипулирования данными без необходимости знания конкретной физической организации баз данных во внешней памяти.
В результате преобразования концептуальной модели была построена следующая реляционная модель базы данных (Рисунок 3.3.1).
Рисунок 3.3.1 - реляционная модель базы данных
3.4 Процесс нормализации базы данных
Данный процесс - это формальный метод анализа отношений на основе их первичных или потенциальных ключей и существующих функциональных зависимостей, являющийся одним из наиболее строгих способов улучшения характеристик БД. Существует пять нормальных форм (НФ) баз данных.
Первая нормальная форма:
Отношение находится в первой нормальной форме, если все его атрибуты имеют простые (атомарные) значения. Другими словами, значения в домене каждого атрибута отношения не являются ни списками, ни множествами простых или сложных значений. Одним словом, в отношении не должно быть повторяющихся групп. В противном случае отношение считается ненормализованным и ему соответствует многоуровневая таблица (иерархия) в отличие от однородной табличной структуры нормализованного отношения.
Условие атомарности значений неукоснительно должно выполняться для всех отношений схемы реляционной базы данных. Схема всей базы данных находится в 1НФ, если каждая схема отношения находится в 1НФ.
Нормальные формы более
высокой степени, чем рассмотренные,
связаны с понятиями
Вторая нормальная форма:
Применяется к отношениям с составными ключами, т. е. к таким отношениям, первичный ключ которых состоит из двух или более атрибутов. Отношение, у которого первичный ключ включает только один атрибут, всегда находится во 2НФ.
Третья нормальная форма:
Говорит от том, что не ключевые атрибуты не должны зависеть друг от друга.
Четвертая нормальная форма:
Многозначные зависимости
Пятая нормальная форма:
Это такое отношение называется термином "n-декомпозитируемое отношение" для некоторого п > 2. Это значит, что для данного отношения возможна декомпозиция без потерь на п проекций, а на меньшее число проекций декомпозиция без потерь невозможна. Пятая нормальная форма - это последняя нормальная форма, которую можно получить путем декомпозиции, и на практике 5НФ почти не используется. Заметим, что зависимость соединения является обобщением как многозначной зависимости, так и функциональной зависимости.
3.5 Обоснование наличия НФ
Рассмотрим три нормальных формы, которые применяются при проектировании баз данных и служат для оптимизации базы и приведения ее к согласованному виду:
- Атомарность ключа – значения ключа должны быть атомарные. Не должно быть составных ключей типа ФИО, адрес и т.д.
- Составной ключ – если ключ состоит из двух и более атрибутов – все не ключевые атрибуты таблицы должны зависеть от ключа в целом, а не от его отдельных атрибутов.
- Не ключевые атрибуты должны зависеть только от ключа и не зависеть друг от друга.
Как можно видеть из реляционной схемы базы данных, все таблицы находятся в третьей нормальной форме: ключи во всех таблицах атомарные, если ключ составной – единственный не ключевой атрибут полностью зависит от него, все не ключевые атрибуты зависят только от ключевых и не зависят друг от друга.
3.6 Используемые триггеры и процедуры
Для упрощения работы с базой данных будут задействованы триггер :
При покупке автомобиля, авто автоматически будет удаленно из таблицы автомобилей в наличии
delimiter |
create trigger t1
after insert on prodazha for each row
begin
delete from avto where id_auto = new.id_auto;
end;|
delimiter ;
Процедура с помощью которой можно посмотреть чек по проданной машине
delimiter |
create procedure ch(id int)
begin
select p.id_auto, name_pokupatel, cena from prodazha p, proizvoditel where p.id_auto = id;
end|
delimiter ;
4 ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Для написания программного обеспечения был выбран язык PHP.
PHP - это язык обработки гипертекста (HTML), используемый на стороне сервера, конструкции которого вставляются в HTML-текст. Его основные преимущества: широкая поддержка различных технологий, совместимость с серверами, базами данных, простота и бесплатность.
4.1Интерфейс программного обеспечения
Рисунок 4.1.1-Внешний вид
На глвной странице есть 5 кнопок каждая из каторы отвечает за отображение соотвецтвующей таблице. При нажатии на на кнопки будут отражатся таблици БД.
Рисунок 4.1.2-Таблица автомобилей
В таблице автомобилей находятся авто те, которе есть в наличии. С лева красная кнопка для удаления записей, а зеленый плюс для внесения в базу автомобилей. Ниже всего списка есть поля с знаком «%» с помощью которых можно отсортировать список по любомому из столбцов или значей. По умолчанию «%» это все значения для отображения.
Рисунок 4.1.3-Таблица продажа
В таблице продаже отображаются автомобиле которые уже были проданы. Проданные автомобили атоматически удаляются из таблици имеющихся авто в наличии. С лева есть кнопка и зображеним листка, при нажатии которой отображается чек покупателя. Изображение и чеком покупателя видно на рисунке 4.1.4.
Рисунок 4.1.4-Чек покупателя
Рисунок 4.1.5-Таблица сотрудников
Рисунок 4.1.6-Таблица производителя
ЗАКЛЮЧЕНИЕ
В результате выполнения данного курсового проекта была разработана база данных «Автосалона», средствами СУБД MySQL. Для обеспечения удобного и легкого доступа к информации, хранимой в БД, был создан интерфейс на языке PHP, который дает возможность работать с базой данных при этом скрывая ее внутреннее устройство.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- Справочное руководство по MySQL версии 5.0.3-alpha.
- Т. Конверс, Д. Парк и К. Морган. PHP 5 и MySQL.
3. Паэранд Ю.Э. , Охрименко П.В. Методические указания по оформлению курсовых проектов и работ /Алчевск: ДГМИ, 2002. – 50 с.
4. Конспект лекций по дисциплине «Организация баз данных».
ПРИЛОЖЕНИЕ А
Создание базы данных:
create database automag;
use automag;
set names cp1251;
Создание таблици «Avto»
CREATE TABLE `Auto` (
`id_auto` varchar(50) NOT NULL,
`id_korpus` int(11) NOT NULL,
`id_motor` int(11) NOT NULL,
`cena` int(11) NOT NULL,
`data_proizvodstva` date NOT NULL,
`cvet` varchar(50) NOT NULL,
`komplekt` varchar(99) NOT NULL,
PRIMARY KEY (`id_auto`));
Создание таблици « Dolzhnosti »
CREATE TABLE `Dolzhnosti` (
`post` varchar(50) NOT NULL,
`name` varchar(50) NOT NULL,
`adress` varchar(50) NOT NULL,
`phone` int(11) NOT NULL,
PRIMARY KEY (`post`));
Создание таблици « Prodazha »
CREATE TABLE `Prodazha` (
`id_prodazh` int(11) NOT NULL,
`id_auto` int(11) NOT NULL,
`name_pokupatel` varchar(50) NOT NULL,
`num_pasport` int(11) NOT NULL,
`adress` varchar(50) NOT NULL,
`phone` int(11) NOT NULL,
PRIMARY KEY (`id_prodazh`));
Создание таблици « Proizvoditel »
CREATE TABLE `Proizvoditel` (
`id_auto` int(11) NOT NULL,
`marka` varchar(50) NOT NULL,
`id_korpus` int(11) NOT NULL,
`id_motor` int(11) NOT NULL,
`cvet` varchar(50) NOT NULL,
`data_proizvodstva` date NOT NULL,
`data_prihoda` date NOT NULL,
`komplekt` varchar(50) NOT NULL,
`cena` int(11) NOT NULL,
PRIMARY KEY (`id_auto`));
Создание таблици «Sotrudnik»
CREATE TABLE `Sotrudniki` (
`id_sotrud` varchar(50) NOT NULL default '',
`name` varchar(50) NOT NULL,
`post` varchar(50) NOT NULL,
`adress` varchar(50) NOT NULL,
`phone` varchar(50) NOT NULL,
PRIMARY KEY (`id_sotrud`));
Заполнение таблиц Автомобили
INSERT INTO `Auto` ( `id_auto`
VALUES ('1', '2345', '98765',
INSERT INTO `Auto` ( `id_auto`
VALUES ('2', '5678', '678934',
INSERT INTO `Auto` ( `id_auto`
VALUES ('3', '1344', '254798',
INSERT INTO `Auto` ( `id_auto`
VALUES ('4', '1234', '543298',
Заполнение таблиц Должности
INSERT INTO `Dolzhnosti` ( `
VALUES ('Консультант', 'Нейман Андрей', 'пр-кт
Ленина 6\5', '066846325');
Заполнение таблиц Производитель
INSERT INTO `Proizvoditel` ( `
VALUES ('1', 'ВАЗ2112', '3245'
INSERT INTO `Proizvoditel` ( `
VALUES ('2', 'ВАЗ2114', '5678'
Заполнение таблици сотрудники
INSERT INTO `Sotrudniki` ( `
VALUES ('1', 'Нейман Андрей Олегович, 'Консультант', 'пр-
ПРИЛОЖЕНИЕ Б
Структура проекта
action.php – файл обработчик действий.
add.jpg – изображения добаления информации.
ch.jpg– маленька изображение чека чека.
ch.php– файл обработчик вывода чека.
ch1.png– изображение верхней части чека.
ch1.png – изображение нижней части чека.
del.jpg – изобржаение удаления информации.
fil.jpg – изображение фильтра (поиска).
iframe.php – файл вывода информации чека.
include.php – файл рабты с БД.
index.php – файл главной таблици.
phpinfo.php– служебный файл.
script.js – скрипт обработки кликов.
style.css – таблица стилей.
table.php – файл обработки вывода таблиц.
ПРИЛОЖЕНИЕ В
Скрипты сайта
Начальная страница:
<?php
require_once("include.php");
echo "
<html>
<head>
<title>Автосалон" . (!isset($_GET["table"]) ? "" : " : : " . $values[$_GET["table"]]) . "</title>
<script type = 'text/javascript' src = 'script.js'></script>
<link rel = 'stylesheet' type = 'text/css' href = 'style.css' />
<meta http-equiv = 'content-type' content = 'text/html; charset = windows-1251'>
</head>
<body>
<table style = 'width: 100%; height: 100%' cellpadding = '0' cellspacing = '0'>
<tr>
<td> </td>
<td style = 'width: 1200px;' valign = 'top'>
";
if (!isset($_GET["table"]))
{
echo "<center>";
for ($i = 0; $i < count($ids); $i++)
echo "<input type = 'submit' class = 'selection' value = '" . $values[$i] . "' onMouseOver = 'mouseOver(\"" . $i . "\")' onClick = 'mouseClick(\"" . $i . "\")' />";
echo "
<input type = 'hidden' id = 'table' name = 'table' />
</center>";
}
else
{
$length = count($cols[$ids[$_GET["table"
$width = 1020 / $length;
$filter = "%";
for ($i = 1; $i < $length; $i++)
$filter .= "~%";
echo "<br />" . $values[$_GET["table"]] . "<br /><br />
<center><table class = 'header'>
<tr>
";
for ($i = 0; $i < $length; $i++)
echo "<td style = 'width: "
. $width . "'>" . $cols[$ids[$_GET["table"]]][$
echo "
</tr>
</table></center>
<iframe src = 'table.php?table=" . $ids[$_GET["table"]] . "&filter=" . $filter . "' allowTransparency = 'true' frameBorder = '0'></iframe>
<a href = '.'>К выбору таблицы</a>
";
}
echo "
</td>
<td> </td>
</tr>
</table>
</body>
</html>
";
?>
Файл обработчик действий
<?php
require_once("include.php");
function redirect($path)
{ echo "<meta http-equiv = 'refresh' content = '0; " . $path . "'>"; }
if (isset($_GET["action"], $_GET["table"]))
{
$c = mysql_connect("localhost", "root", "1234");
mysql_query("use automag");
mysql_query("set names cp1251");
$prims = array("avto" => "id_auto", "dolzhnosti" => "post", "prodazha" => "id_prodazh", "proizvoditel" => "id_prodazh", "proizvoditel" => "id_auto", "sotrudniki" => "id_sotrud");
if (isset($_GET["id"]) && $_GET["action"] == "delete")
mysql_query("delete from " . $_GET["table"] . " where " . $myss[$_GET["table"]][0] . " = " . $_GET["id"]);
elseif (isset($_GET["val"]) && $_GET["action"] == "add")
{
$exp = explode("~", $_GET["val"]);
if ($exp[0] == "")
{
$q = mysql_query("select max(" . $myss[$_GET["table"]][0] . ") from " . $_GET["table"]);
$f = mysql_fetch_array($q);
$exp[0] = $f[0] + 1;
}
$q = "insert into " . $_GET["table"] . " values(";
for ($i = 0; $i < count($exp); $i++)
$q .= "'" . $exp[$i] . "', ";
$q = substr($q, 0, strlen($q) - 2) . ")";
mysql_query($q);
}
$length = count($cols[$_GET["table"]]);
$filter = "%";
for ($i = 1; $i < $length; $i++)
$filter .= "~%";
redirect("table.php?table=" . $_GET["table"] . "&count=" . $length . "&filter=" . $filter);
mysql_close($c);
}
?>
Файл обработчик вывода чека.
<?php
if (isset($_GET["id_auto"]) && isset($_GET["name_pokupatel"]) && isset($_GET["cena"]))
{
echo "<html><head>
<meta http-equiv = 'content-type' content = 'text/html; charset = windows-1251'>
<title>Сертификат</title>
</head>
<body>
<center><table>
<tr><td><img src = 'ch1.png' /></td></tr>
<tr><td style = 'height: 300px; padding: 20px;'>
<table><tr>
<td valign = 'top'>
<table style = 'font-size: 20px; font-weight: bold; margin-top: 8px;'>
<tr><td align = 'right'>ID Автомобиля:</td></tr>
<tr><td align = 'right'>Имя покупателя:</td></
<tr><td align = 'right'>Стоимость:</td></tr>
</table>
</td>
<td valign = 'top'>
<iframe src = 'iframe.php?id_auto=" . $_GET["id_auto"] . "&name_pokupatel=" . $_GET["name_pokupatel"] . "&cena=" . $_GET["cena"] . "' allowTransparency = 'true' frameBorder = '0'></iframe>
</td>
</tr></table>
</td></tr>
<tr><td><img src = 'ch2.png' /></td></tr>
</table>
";
}
echo "<br /><br /><a href = '.'>К
выбору таблицы</a></center></
?>
Файл вывода информации чека.
<?php
echo "
<html>
<head>
<meta http-equiv = 'content-type' content = 'text/html; charset = ibm866'>
</head>
<body>
<table style = 'font-size: 20px; font-weight: bold;'>
<tr><td style = 'color: navy;'>" . $_GET["id_auto"] . "</td></tr>
<tr><td style = 'color: navy;'>" . $_GET["name_pokupatel"] . "</td></tr>
<tr><td style = 'color: navy;'>" . $_GET["cena"] . "</td></tr>
</table>
</body>
</html>
";
?>
Файл работы с БД
<?php
$ids = array("avto", "prodazha", "dolzhnosti", "proizvoditel", "sotrudniki");
$values = array("Автомобили", "Продажа", "Должности", "Производитель", "Сотрудники");
$cols = array(

- База данных Автопрокат
- База данных. Автосалон
- База Данных "Автосалон" MSSQL
- База данных автосервиса
- База данных автотранспортного предприятия
- База данных (Аптека)
- База данных «Аптека»
- База данных
- База данных
- База данных
- База данных
- База Данных
- База данных Accsess
- База данных Delphi «Краснохолмский водоканал и теплосети»