Professional Documents
Culture Documents
ПЗ В5
ПЗ В5
КУРСОВА РОБОТА
з дисципліни «Організація баз даних»
на тему:
« Інформаційна система «Будівельна фірма» »
м. Ужгород — 2023 р.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД
«УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ»
Інженерно-технічний факультет
Кафедра комп’ютерних систем та мереж
Спеціальності 123 – «Комп’ютерна інженерія»
3
ЗМІСТ
ВСТУП......................................................................................................................5
1 ТЕОРЕТИЧНІ ВІДОМОСТІ................................................................................7
1.1 База даних.......................................................................................................7
1.2 Призначення БД.............................................................................................8
1.3 Розподілені бази даних.................................................................................9
1.4 Система управління базами даних.............................................................10
2 ПРОЕКТУВАННЯ БАЗИ ДАНИХ...................................................................12
2.1 Мовні засоби, використані при створенні бази даних.............................12
2.2 Визначення та опис структури таблиць....................................................14
2.3 Опис роботи програми................................................................................17
2.4 Приведення відношення бази даних до третьої нормальної форми.......19
3 ІНСТРУКЦІЯ КОРИСТУВАЧА........................................................................22
ВИСНОВКИ...........................................................................................................25
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ.......................................................26
ДОДАТКИ..............................................................................................................27
Додаток А. ER-діаграма........................................................................................27
Додаток Б. Лістинг Бази даних............................................................................28
Додаток В. Лістинг коду сторінок “Вхід” і “Реєстрація”..................................36
4
ВСТУП
Вплив баз даних на сучасний світ важко переоцінити. Їх
використовують стало повсемістно повсюди, до такої степені, що можна
навіть сказати що в кожній сфері, так чи інакше використовується та чи інша
форма БД. І це обумовлено не просто якимись трендом, чи іншим
тимчасовим фактором, а вже підтверджену часом, її безумовною
ефективністю, універсальністю і ситуаційністю.
Але що таке База даних (БД)? У базовому розумінні, дані - це факти та
цифри про будь-що. Наприклад, якщо зібрані дані про людину, то ці дані
можуть включати її ім'я, вік, електронну пошту та дату народження. Або дані
можуть бути фактами та цифрами, пов'язаними з покупкою в Інтернеті. Це
може бути номер замовлення, опис, кількість і дата замовлення, і навіть
електронна пошта клієнта.
В нашому світі, дані мають вирішальне значення як для приватних осіб,
так і для організацій. Але де зберігаються всі ці дані? У нашому цифровому
світі дані більше не зберігаються в ручних файлах, чи як в давні часи на
папірусах чи глиняних табличках. Замість цього, їм на заміну, прийшли так
звані бази даних, які активно застосовуються все можливими розробники.
Так, База даних - це форма електронного сховища, в якому дані
організовані систематично. Вона зберігає та маніпулює даними в
електронному вигляді, щоб зробити їх більш керованими, ефективними та
безпечними. Існує багато реальних прикладів використання баз даних.
Виникає питання, а як насправді виглядає база даних? Ну, база даних -
це дані, організовані в систематизованому вигляді. Ця організація зазвичай
виглядає як електронна таблиця або таблиця. Що саме означає термін
"систематично"? Всі дані містять елементи або ознаки та атрибути, за якими
їх можна ідентифікувати. Наприклад, людину можна ідентифікувати за
такими атрибутами, як вік, зріст або колір волосся. Ці дані відокремлюються
і зберігаються в так званих сутностях, які представляють ці елементи.
І так метою даної курсової є створення бази даних для будівельної
компанії, яка б забезпечила зручний та швидкий доступ до даних, базовий
графічний інтерфейс, а також можливість додавання, редагування та
видалення інформації. Для виконання завдання використане наступне
програмне забезпечення: Microsoft Visual Сode, PhpMyAdmin.
5
1 ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1 База даних
База даних — це певний набір даних, які пов'язані між собою
спільною ознакою або властивістю, та впорядковані, наприклад, за
алфавітом.
Об'єднання великої кількості даних в єдину базу дає змогу для
формування безлічі варіації групування інформації — особисті дані
клієнта, історія замовлень, каталог товарів та будь-що інше.
В нас час База даних є просто незамінним інструментом для
зберігання, організації і управління великим обсягом даних.
Вона дозволяє ефективно зберігати дані різного типу, включаючи
текст, числа, зображення, відео та інші формати. Вона може бути
організована у вигляді таблиць, файлів, графів або інших структур,
залежно від потреб і характеру даних.
Одна з основних переваг бази даних полягає у швидкому доступі до
необхідної інформації. СУБД використовують різні оптимізаційні
техніки, такі як індексація та кешування, що дозволяють швидко
виконувати запити і отримувати результати. Це особливо важливо в
сучасному швидкотемповому середовищі, де великі обсяги даних
потребують ефективного управління.
База даних також забезпечує зв'язок між різними елементами
інформації. Зміни в одній частині бази даних можуть вплинути на інші
частини, що дозволяє зберігати цілісність та узгодженість даних.
Наприклад, якщо змінити контактні дані клієнта в базі даних, ці зміни
автоматично відобразяться в усіх пов'язаних записах та звітах.
База даних також дозволяє проводити різноманітний аналіз і
обробку даних. За допомогою запитів і звітів можна отримувати
структуровану інформацію з бази даних, робити аналітичні висновки та
приймати рішення на основі цих даних.
6
Нарешті, база даних допомагає забезпечувати безпеку та
конфіденційність даних. Можна встановлювати права доступу до різних
частин бази даних, обмежувати права користувачів і застосовувати
шифрування для захисту важливої інформації.
Усе це робить базу даних незамінним і в той же час дуже
ефективним інструментом для організації, зберігання та управління
даними в різних галузях, включаючи бізнес, науку, організацію
державних документів та інші сфери діяльності.
1.2 Призначення БД
Бази даних для сайтів дають змогу зберігати інформацію, що
виглядає як зв'язані між собою таблиці. Саме в БД зберігаються вся
необхідна та корисна інформація для функціонування сайту (клієнтські
дані, прайс-лист, список товарів).
Щоб створити запит до бази даних часто використовують Structured
Query Language. SQL дає змогу додавати, редагувати та видаляти
інформацію, що міститься у таблицях. Під час програмування сайтів
використовують різні системи управління БД. До основних СУБД,
відносять:
● об'єктно-реляційна система управління базами даних Oracle
Database;
● вільна система управління базами даних PostgreSQL;
9
4. Забезпечення цілісності та надійності даних: СУБД мають
механізми для забезпечення цілісності даних, таких як унікальність,
цілісність посилань і виконання правил цілісності. Вони також надають
можливості резервного копіювання та відновлення даних для
забезпечення надійності і відновлення після випадку відмови.
5. Забезпечення ефективності обробки даних: СУБД
використовують оптимізацію запитів та інші методи для покращення
продуктивності обробки даних. Вони можуть автоматично
використовувати індекси, кешування та інші техніки для прискорення
виконання запитів і зменшення навантаження на систему.
10
2 ПРОЕКТУВАННЯ БАЗИ ДАНИХ
12
● Customers – таблиця, в якій зберігаються данні клієнта, тобто
13
Рисунок 2.6 - Структура таблиці «Клієнти»
14
Рисунок 2.12 - ER-діаграма
15
При запуску сайту, першим показується вікно входу у систему, де
потрібно ввести свій логін та пароль і натиснути відповідну кнопку для входу
в систему, незважаючи хто ви працівник, чи клієнт. Або якщо ви ще не
зареєстрований, перейти на сторінку реєстрації, натиснувши відповідну
кнопку.
Якщо перейти на сторінку реєстрації, і вам потрібно зареєструватися,
то для цього потрібно ввести у відповідні поля, своє ім’я, пошту, пароль і
підтвердження паролю. І вже відповідно від того чи є ви працівником чи
клієнтом, вводите або не вводите ключ. За замовчуванням його значення
(NULL), що означає що реєстрацію проходить користувач. Ключ є
унікальним для кожного працівника, тому його можна використати лише 1
раз.
Крім того на сторінці, реєстрації, передбачено різного типу помилки, з
виводом відповідного повідомлення, а також передбачено дві кнопки, одна з
яких безпосередньо закінчує реєстрацію, в той час як інша перекидає вас на
сторінку входу.
В залежності від того чи ви реєструвались чи входили в систему,
будучи клієнтом вас перекидає в кабінет клієнта. Де на вас одразу же чекає
розвернута таблиця будівельних бригад, яких можна при бажанні приховати,
натиснувши на відповідну кнопку. Крім того є ще три кнопки, які дозволяють
відсортувати таблицю по різним критеріям, створити замовлення, чи
подивитись статус своїх замовлень, і при потребі змінити їх. Зверху також є
кнопка вихід, яка перекидає вас знову на сторінку входу.
В залежності від того чи ви реєструвались чи входили в систему,
будучи працівником вас перекидає в кабінет працівника. Де на вас чекають 4
кнопки. Дві з яких дозволяють вивести на екран відповідні таблиці. Інші дві
кнопки дозволяють, змінити статус замовлення, і додати нову бригаду.
16
Рисунок 2.13 - Структурна схема взаємодії сторінок
17
Рисунок 2.15 - Перша нормальна форма (НФ1)
18
Рисунок 2.17 - Третя нормальна форма (НФ3)
19
3 ІНСТРУКЦІЯ КОРИСТУВАЧА
ВИСНОВКИ
За час виконання даної курсової роботи, була створена база даних для
«Будівельної фірми», яка містить в собі інформацію, про користувачів, та їх
замовлення. Також було створено програмний додаток, який надає
користувачу можливість додавати, модифікувати, видаляти та іншими
способами обробляти дані на мові програмування PHP разом з JS. Даний
додаток реалізовує роботу з базою даних за допомогою мови структурованих
запитів SQL, що надає можливість використовувати її на багатьох
користувацьких комп’ютерах одночасно.
При створенні програмного додатку, не обійшлося і без виникнення
безлічі різноманітних проблем, які поступово, в ході виконання, так чи
інакше вирішувались, чи як мінімум знаходились точки компромісу. Що тим
не менш змушувало, знаходити очевидні і не дуже способи вирішення, що
безумовно підвищило моє розуміння, всіх тонкощів і складнощів розробки
сайтів. Так як навіть маленька помилка, яку може бути довжиною у всього
лиш кілька символів, тим не менш, може паралізувати роботу на цілі години.
Але загалом, якщо підсумувати, можна безумовно сказати, що хоча
реалізація програмний додаток із підтримкою БД, це не легка справа, яка
потребує багато часу і сил, не гарантуючи бажаного результату. Але вона все
22
ж таки надає безцінний опит і розширює кругозір, який вже можна
використати і в інших сферах.
23
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
24
ДОДАТКИ
Додаток А. ER-діаграма
25
Додаток Б. Лістинг бази даних
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1:3306
-- Час створення: Чрв 02 2023 р., 00:15
-- Версія сервера: 8.0.19
-- Версія PHP: 7.4.5
--
-- База даних: `creatgroop`
--
-- --------------------------------------------------------
--
-- Структура таблиці `adminkey`
--
--
-- Дамп даних таблиці `adminkey`
--
-- --------------------------------------------------------
--
-- Структура таблиці `buildbrigade`
--
--
-- Дамп даних таблиці `buildbrigade`
--
-- --------------------------------------------------------
--
-- Структура таблиці `customers`
--
--
-- Дамп даних таблиці `customers`
--
27
INSERT INTO `customers` (`IDCustomers`, `Names`, `Mail`,
`Passwords`) VALUES
(0, 'Rodrig', 'Rodrig@gmail.com', 'Rodrig'),
(1, 'John Smith', 'john@example.com', 'password123'),
(2, 'Jane Doe', 'jane@example.com', 'pass456'),
(3, 'David Johnson', 'david@example.com', 'abc123'),
(4, 'Rodrig1', 'Rodrig1@gmail.com', 'Rodrig1'),
(5, 'Rodrig2', 'Rodrig2@gmail.com', 'Rodrig2'),
(6, 'Rodrig3', 'Rodrig3@gmail.com', 'Rodrig3'),
(7, 'Rodrig5', 'Rodrig5@gmail.com', 'Rodrig5'),
(8, 'Rodrig9', 'Rodrig9@gmail.com', 'Rodrig9');
-- --------------------------------------------------------
--
-- Структура таблиці `employee`
--
--
-- Дамп даних таблиці `employee`
--
-- --------------------------------------------------------
--
-- Структура таблиці `orders`
--
--
-- Дамп даних таблиці `orders`
--
--
-- Індекси збережених таблиць
--
--
-- Індекси таблиці `adminkey`
--
ALTER TABLE `adminkey`
ADD PRIMARY KEY (`IDKey`),
ADD UNIQUE KEY `Key` (`Key`);
--
-- Індекси таблиці `buildbrigade`
--
ALTER TABLE `buildbrigade`
ADD PRIMARY KEY (`IDBrigade`),
ADD UNIQUE KEY `NameBrigade` (`NameBrigade`);
--
29
-- Індекси таблиці `customers`
--
ALTER TABLE `customers`
ADD PRIMARY KEY (`IDCustomers`),
ADD UNIQUE KEY `Mail` (`Mail`);
--
-- Індекси таблиці `employee`
--
ALTER TABLE `employee`
ADD PRIMARY KEY (`IDEmployee`),
ADD UNIQUE KEY `Mail` (`Mail`),
ADD UNIQUE KEY `IdKey` (`IdKey`);
--
-- Індекси таблиці `orders`
--
ALTER TABLE `orders`
ADD PRIMARY KEY (`IDOrder`),
ADD KEY `IDCustomers` (`IDCustomers`),
ADD KEY `IDBrigade` (`IDBrigade`) USING BTREE;
--
-- Обмеження зовнішнього ключа збережених таблиць
--
--
-- Обмеження зовнішнього ключа таблиці `employee`
--
ALTER TABLE `employee`
ADD CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`IdKey`)
REFERENCES `adminkey` (`IDKey`);
--
-- Обмеження зовнішнього ключа таблиці `orders`
--
ALTER TABLE `orders`
ADD CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`IDCustomers`)
REFERENCES `customers` (`IDCustomers`),
ADD CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`IDBrigade`)
REFERENCES `buildbrigade` (`IDBrigade`);
COMMIT;
30
Додаток В. Лістинг PHP коду сторінок «Вхід» і «Реєтрація»
<?php
session_start();
if (isset($_POST['login'])) {
$mail = $_POST['mail'];
$password = $_POST['password'];
if ($conn->connect_error) {
die('Помилка підключення до бази даних: ' . $conn-
>connect_error);
}
$row1 = $result1->fetch_assoc();
$id = intval($row1['IDCustomers']);
if ($result1->num_rows == 1)
31
{
$_SESSION['mail'] = $mail;
$_SESSION['role'] = 'Employee';
header('Location: employee_cabinet_test.php?id='.
$id);
exit();
}
else{
// Помилка автентифікації
$error_message = 'Введений неправильний Mail або
пароль';
}
}
$conn->close();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset = "">
<meta name = "viewport" content="widtg=device-width,initial-
scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "ie=edge">
<link rel = "stylesheet" href
="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstra
p.min.css">
<title>Document</title>
<style>
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 50vh;
}
.content1 {
margin: 0 auto;
max-width: 400px;
}
.form-group {
display: flex;
flex-direction: column;
margin-bottom: 10px;
}
32
.form-group label {
margin-bottom: 5px;
}
.form-group input {
padding: 5px;
}
.error {
color: red;
}
</style>
</head>
<body>
<div class="d-flex flex-column flex-md-row align-items-center
pb-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center text-dark
text-decoration-none">
<svg xmlns="http://www.w3.org/2000/svg" width="40"
height="32" class="me-2" viewBox="0 0 118 94"
role="img"><title>Bootstrap</title><path fill-rule="evenodd"
clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492
12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547
43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002
6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51
94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092
2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-
5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-
2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80
66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-
2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-
9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521
28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-
4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0
10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-
8.178H49.948z" fill="currentColor"></path></svg>
<span class="fs-4">Курсова робота</span>
</a>
</div>
<div class="card mb-4 rounded-3 shadow-sm content1">
<div class="card-header py-3">
<h2 class="my-0 fw-normal text-center ">Вхід</h2>
</div>
<div class="card-body">
<ul class="list-unstyled mt-3 mb-4">
33
<div class="container">
<?php if (isset($error_message)) { ?>
<p class="error"><?php echo $error_message; ?></p>
<?php } ?>
<form method="post" action="">
<div class="form-group">
<label for="mail">Пошта:</label>
<input type="email" id="mail" name="mail"
required>
</div>
<div class="form-group">
<label for="password">Пароль:</label>
<input type="password" id="password"
name="password" required>
<br>
<input type="submit" name="login" value="Вхід">
<input type="button" value="Реєстрація"
onclick="location.href='registration_test.php';">
</div>
</form>
</div>
</div>
</div>
</body>
</html>
<?php
/*
<div>
<input type="submit" name="login" value="Вхід">
<input type="button" value="Реєстрація"
onclick="location.href='registration.php';">
</div>
*/
?>
34
<?php
session_start();
if (isset($_POST['register'])) {
$name = $_POST['name'];
$mail = $_POST['mail'];
$password = $_POST['password'];
$confirmPassword = $_POST['confirmPassword'];
try {
$conn = new mysqli($servername, $username, $passwor,
$dbname);
if ($result->num_rows > 0) {
$error_message = 'Така пошта вже
використовується';
} else {
$query = "SELECT * FROM Employee WHERE
Mail='$mail'";
$result = $conn->query($query);
if ($result->num_rows > 0) {
$error_message = 'Така пошта вже
використовується';
} else {
// Отримання ключа з бази даних
$key = $_POST['key'];
$query = "SELECT * FROM AdminKey WHERE
`Key`='$key'";
$result = $conn->query($query);
if ($key == 'NULL') {
35
//$customerId = $conn->insert_id;
// Вставка нового користувача в таблицю
Customers
$id = mysqli_query($conn, "SELECT
MAX(IDCustomers) FROM Customers");
$row1 = mysqli_fetch_array($id);
$maxId = $row1[0];
// Отримання наступного вільного ID
$nextId = $maxId + 1;
$query = "INSERT INTO Customers
(IDCustomers,Names, Mail, Passwords) VALUES ('$nextId','$name',
'$mail', '$password')";
$conn->query($query);
// Отримання ID користувача
$customerId = $conn->insert_id;
if ($result->num_rows > 0) {
$error_message = 'Користувач з
цим Ключем вже існує';
} else {
// Вставка нового користувача в
таблицю Employee
$id = mysqli_query($conn,
"SELECT MAX(IDEmployee) FROM Employee");
$row1 = mysqli_fetch_array($id);
$maxId = $row1[0];
// Отримання наступного вільного
ID
36
$nextId = $maxId + 1;
$query = "INSERT INTO Employee
(IDEmployee, Names, Mail, Passwords, IdKey) VALUES
('$nextId','$name', '$mail', '$password', '$idKey')";
$conn->query($query);
// Отримання ID користувача
$employeeId = $conn->insert_id;
// Перенаправлення на сторінку
Кабінету Працівника
header('Location:
employee_cabinet.php?id='. $nextId);
exit();
}
}
}
}
}
}
} catch (Exception $e) {
echo 'Помилка підключення до бази даних: ' . $e-
>getMessage();
}
.container {
display: flex;
flex-direction: column;
37
justify-content: center;
align-items: center;
height: 70vh;
}
.form-group {
display: flex;
flex-direction: column;
margin-bottom: 10px;
}
.form-group label {
margin-bottom: 5px;
}
.form-group input {
padding: 5px;
}
.error {
color: red;
}
</style>
</head>
<body>
<div class="d-flex flex-column flex-md-row align-items-center
pb-3 mb-4 border-bottom">
<a href="/" class="d-flex align-items-center text-dark
text-decoration-none">
<svg xmlns="http://www.w3.org/2000/svg" width="40"
height="32" class="me-2" viewBox="0 0 118 94"
role="img"><title>Bootstrap</title><path fill-rule="evenodd"
clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492
12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547
43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002
6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51
94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092
2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-
5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-
2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80
66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-
2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-
9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521
28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-
4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0
10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-
8.178H49.948z" fill="currentColor"></path></svg>
38
<span class="fs-4">Курсова робота</span>
</a>
<nav class="d-inline-flex mt-2 mt-md-0 ms-md-auto">
</nav>
</div>
</div>
<div class="card mb-4 rounded-3 shadow-sm content1">
<div class="card-header py-3">
<h2 class="my-0 fw-normal
text-center">Реестрація</h2>
</div>
<div class="card-body">
<ul class="list-unstyled mt-3 mb-4">
<div class="container">
39
<input type="button" value="Вхід"
onclick="location.href='Log_test.php';">
</div>
</form>
</body>
</html>
40