1
0

Start normalization

This commit is contained in:
2025-02-10 19:49:42 +02:00
parent 913dd86186
commit b9080df675

View File

@ -54,11 +54,11 @@
Мета даної роботи -- проєктування та розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка спрямована на створення ефективного середовища для спільної розробки та управління програмними пакунками. Система забезпечує зберігання інформації про програмні пакунки, а також надає інструменти для їх вдосконалення колективною співпрацею користувачів.
Для реалізації інформаційної системи було обрано сучасний стек технологій, а саме:
Rust @rust -- як основна мова програмування для всих частин застосунку,
iced @iced -- бібліотека для побудови графічних інтерфейсів з Elm архітектурою,
SQLx @sqlx -- бібліотека для низькорівневої роботи з базою даних, що забезпечує коректність і гнучкість,
MySQL @mysql -- як СУБД для зберігання інформації про пакунки, користувачів, та їх відносини,
Neovim @neovim -- як сучасний редактор коду для швидкої і зручної розробки.
Rust@rust -- як основна мова програмування для всих частин застосунку,
iced@iced -- бібліотека для побудови графічних інтерфейсів з Elm архітектурою,
SQLx@sqlx -- бібліотека для низькорівневої роботи з базою даних, що забезпечує коректність і гнучкість,
MySQL@mysql -- як СУБД для зберігання інформації про пакунки, користувачів, та їх відносини,
Neovim@neovim -- як сучасний редактор коду для швидкої і зручної розробки.
Результат розробки -- комп'ютерна програма, яка дозволяє зберігати та відображати інформацію про користувачів, пакунки та їх відносини; генерувати статистику про користувача та його пакунки. Застосунок, створений з використанням мови програмування Rust є безпечним, правильним, надійним та швидким.
],
@ -101,9 +101,9 @@
Відсутність ефективних систем управління пакунками призводить до численних проблем у процесі розробки. Розробники стикаються з труднощами при пошуку потрібних бібліотек, виникають конфлікти версій, ускладнюється процес оновлення залежностей, а також з'являються проблеми з безпекою через використання застарілих версій компонентів. Це суттєво сповільнює процес розробки та може призвести до значних фінансових втрат.
Метою цієї курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка спрощує процес менеджменту пакунків, створення їх відносин, керування залежностями, та надання користувачам різних ролей у розвитку репозиторію. У процесі роботи над системою було проведено детальний аналіз зхожої системи AUR @aur, котра ефективно використовується для надання користувачам дистрибутиву Arch Linux @archlinux можливості публіковати свої пакунки. Було спроектовано реляційну базу даних і розроблено комп'ютерну програму, яка дозволяє взаємодіяти з репозиторієм.
Метою цієї курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка спрощує процес менеджменту пакунків, створення їх відносин, керування залежностями, та надання користувачам різних ролей у розвитку репозиторію. У процесі роботи над системою було проведено детальний аналіз зхожої системи AUR@aur, котра ефективно використовується для надання користувачам дистрибутиву Arch Linux@archlinux можливості публіковати свої пакунки. Було спроектовано реляційну базу даних і розроблено комп'ютерну програму, яка дозволяє взаємодіяти з репозиторієм.
Весь застосунок написано мовою програмування Rust @rust, для графічного інтерфейсу використовується бібліотека iced @iced, для взаємодії з базою даних використвуєтсья бібліотека SQLx @sqlx. Інформація зберігається у базі даних MySQL @mysql. Розробка виконувалася у текстовому редакторі Neovim @neovim.
Весь застосунок написано мовою програмування Rust@rust, для графічного інтерфейсу використовується бібліотека iced@iced, для взаємодії з базою даних використвуєтсья бібліотека SQLx@sqlx. Інформація зберігається у базі даних MySQL@mysql. Розробка виконувалася у текстовому редакторі Neovim@neovim.
= АНАЛІЗ ТА КОНЦЕПТУАЛЬНЕ МОДЕЛЮВАННЯ ПРЕДМЕТНОЇ ОБЛАСТІ
#v(-spacing)
@ -114,7 +114,7 @@
Для створення ефективної системи управління пакунками необхідно ретельно проаналізувати існуючі рішення та їх особливості. Такий аналіз допомагає виявити найбільш важливі функціональні можливості та уникнути потенційних проблем при проектуванні власної системи.
В якості системи-аналогу розглянемо Arch User Repository (AUR) @aur -- репозиторій користувацьких пакунків для дистрибутиву Arch Linux @archlinux. AUR є яскравим прикладом успішної реалізації концепції колаборативної розробки та управління пакунками. Система надає користувачам можливість самостійно створювати та поширювати пакунки, які не входять до офіційного репозиторію.
В якості системи-аналогу розглянемо Arch User Repository (AUR)@aur -- репозиторій користувацьких пакунків для дистрибутиву Arch Linux@archlinux. AUR є яскравим прикладом успішної реалізації концепції колаборативної розробки та управління пакунками. Система надає користувачам можливість самостійно створювати та поширювати пакунки, які не входять до офіційного репозиторію.
При відвідуванні головної сторінки AUR @aur_main можна побачити статиску свого акаунту, всього репозиторію а також останні оновлення пакунків. За допомогою поля пошуку можна перейти до сторінки пошуку пакунків @aur_search.
@ -257,13 +257,70 @@
== Вибір та побудова логічної моделі бази даних на базі ER-діаграми
Для створення логічної моделі бази даних репозиторію пакунків було обрано реляційну модель. Ця модель дозволяє ефективно організувати дані у вигляді взаємопов'язаних таблиць, що забезпечує чітку структуру інформації в контексті управління пакунками та колаборації між користувачами. Вона гарантує узгодженість всіх зв'язків між сутностями, такими як "Користувач", "Пакунок", "База пакунку" та іншими, а також підтримує обмеження цілісності даних.
Реляційна модель надає потужні можливості для виконання складних запитів, що є критичним для системи управління пакунками. Це дозволяє ефективно обробляти запити користувачів щодо пошуку пакунків, аналізу залежностей та відношень між ними, а також керування правами доступу через систему ролей. На основі розробленої ER-діаграми @er_diagram було спроєктовано логічну модель бази даних @logic_model.
Для забезпечення точного розуміння відповідності між ER-діаграмою та логічною схемою створено довідник атрибутів /* TODO @attributes */. Цей довідник встановлює однозначну відповідність між термінами, використаними в концептуальній моделі (ER-діаграмі) та їх представленням у логічній моделі бази даних. Особливу увагу приділено відображенню зв'язків між сутностями, що реалізовані через механізм зовнішніх ключів, забезпечуючи цілісність даних та правильну роботу системи контролю версій пакунків.
Обрана модель також враховує специфіку роботи з пакунками, їх залежностями та відношеннями, що є ключовим аспектом функціонування репозиторію пакунків. Це дозволяє ефективно відстежувати зміни в пакунках, керувати правами доступу користувачів та забезпечувати надійну основу для колаборації над пакунками.
/* TODO table */
#img("img/logic_model.png", "Логічна модель бази даних (рисунок виконаний самостійно)")
Побудована база даних відповідає умовам третьої нормальної форм, адже кожна таблиця має первинний ключ, всі атрибути є атомарними, всі не ключові атрибути знаходяться у повній функціональній залежності від відповідних первинних ключів, та у таблицях відсутні транзитивні залежності.
+ Таблиця Users:
+ від первинного ключа id залежать всі неключові атрибути, а саме: name, email, password, last_used, created_at, updated_at;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
+ Таблиця Packages:
+ від первинного ключа id залежать всі неключові атрибути, а саме: base, name, version, description, url, flagged_at, created_at, updated_at;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
+ Таблиця PackageBases:
+ від первинного ключа id залежать всі неключові атрибути, а саме: name, description, created_at, updated_at;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
+ Таблиця PackageBaseRoles:
+ від первинного ключа id залежать всі неключові атрибути, а саме: name, description;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
+ Таблиця PackageBaseUserRoles:
+ від складеного первинного ключа (base, user, role) залежать всі неключові атрибути, а саме: comment;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від складеного первинного ключа (base, user, role), відсутні транзитивні залежності.
+ Таблиця DependencyTypes:
+ від первинного ключа id залежать всі неключові атрибути, а саме: name;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
+ Таблиця PackageDependencies:
+ від первинного ключа id залежать всі неключові атрибути, а саме: arch, requirement, description, package, dependency_type, dependency_package_name;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
+ Таблиця RelationTypes:
+ від первинного ключа id залежать всі неключові атрибути, а саме: name;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
+ Таблиця PackageRelations:
+ від первинного ключа id залежать всі неключові атрибути, а саме: arch, requirement, package, relation_type, relation_package_name;
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
== Побудова логічної моделі бази даних шляхом нормалізаці
...
Нормалізація бази даних виконується для оптимізації її структури, мінімізації надлишковості даних та забезпечення їх цілісності. Цей процес допомагає уникнути аномалій під час операцій з даними, підвищує ефективність роботи з базою та робить її більш адаптивною до змін. Нормалізація передбачає декомпозицію великих таблиць на менші, та встановлення логічних зв'язків між ними, що спрощує підтримку та покращує організацію даних.
// TODO: img
// Для перевірки відповідності бази даних третій нормальній формі, розглянемо п'ять основних сутностей з нашої ER-діаграми: "Користувач", "Пакунок", "База пакунку", "Роль" та "Залежність" (див. рис. 3.3). З атрибутів цих сутностей сформуємо універсальне відношення T (див. рис. 3.4).
// Перша нормальна форма вимагає, щоб усі атрибути містили лише атомарні (неподільні) значення, а відношення мало первинні ключі для забезпечення унікальності записів. Аналіз універсального відношення показує, що всі його атрибути є атомарними. Оптимальними ключовими атрибутами виступають "Користувач_ID", "Пакунок_ID" та "Роль_ID". Кожен з цих ідентифікаторів дає доступ до відповідного набору атрибутів: "Користувач_ID" до даних користувача, "Пакунок_ID" до інформації про пакунок, а "Роль_ID" до даних про роль користувача в системі.
Таким чином, можна констатувати, що відношення T задовольняє вимогам першої нормальної форми.
= Опис програми
#v(-spacing)
@ -277,5 +334,13 @@
...
== Опис програмної реалізації
#nheading("Висновки")
...
В результаті виконання курсової роботи було розроблено інформаційну систему "Репозиторій пакунків" для організації ефективної колаборації над програмними пакунками. В процесі розробки було проведено ґрунтовний аналіз предметної області, визначено ключові вимоги до системи та спроектовано оптимальну структуру бази даних для зберігання інформації про пакунки, їх версії, залежності, користувачів та їхні ролі.
Створена система забезпечує зручний інтерфейс для пошуку пакунків, управління пакунками та колаборації між розробниками. Реалізовано функціонал створення та оновлення пакунків, відстеження залежностей та взаємозв'язків між пакунками, а також систему ролей для контролю доступу.
База даних спроектована на основі реляційної моделі та нормалізована до третьої нормальної форми, що забезпечує оптимальну структуру даних та відсутність їх надлишковості. Під час розробки було використано мову програмування Rust@rust, систему управління базами даних MySQL@mysql та графічну бібліотеку iced@iced. Крім того використовуєтсья контейнеризація за допомогою Docker@docker та Docker Compose@compose що забезпечує надійність роботи системи, її масштабованість та простоту розгортання в різних середовищах.
Розроблена інформаційна система значно спрощує процес управління та отримання інформації про програмні пакунки. Вона відповідає поставленим завданням та має потенціал подальшої реалізації завдяки використанню дуже модульної архітектури моделювання програмного забеспечення, відомої як Гексагональна архітектура@hexagonal.