diff --git a/assets/er_diagram.drawio b/assets/er_diagram.drawio index 8628b8b..04cdce9 100644 --- a/assets/er_diagram.drawio +++ b/assets/er_diagram.drawio @@ -1,11 +1,11 @@ - + - + @@ -62,7 +62,7 @@ - + @@ -113,7 +113,7 @@ - + @@ -140,7 +140,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -220,11 +220,11 @@ - + - + @@ -283,8 +283,14 @@ - - + + + + + + + + @@ -292,63 +298,58 @@ - - + + - + - + + + + + + - - + + - + - + - + - + - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/assets/normalization/er_diagram_frag.drawio b/assets/normalization/er_diagram_frag.drawio new file mode 100644 index 0000000..69e388e --- /dev/null +++ b/assets/normalization/er_diagram_frag.drawio @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/normalization/normal_pb45.drawio b/assets/normalization/normal_pb45.drawio new file mode 100644 index 0000000..d175c84 --- /dev/null +++ b/assets/normalization/normal_pb45.drawio @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/normalization/normal_t.drawio b/assets/normalization/normal_t.drawio new file mode 100644 index 0000000..8bcaa6e --- /dev/null +++ b/assets/normalization/normal_t.drawio @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/normalization/normal_t123.drawio b/assets/normalization/normal_t123.drawio new file mode 100644 index 0000000..41154e9 --- /dev/null +++ b/assets/normalization/normal_t123.drawio @@ -0,0 +1,664 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/normalization/normal_t_dep.drawio b/assets/normalization/normal_t_dep.drawio new file mode 100644 index 0000000..9a7b061 --- /dev/null +++ b/assets/normalization/normal_t_dep.drawio @@ -0,0 +1,756 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/er_diagram.png b/img/er_diagram.png index aa6b409..be5b471 100644 Binary files a/img/er_diagram.png and b/img/er_diagram.png differ diff --git a/img/er_diagram_frag.png b/img/er_diagram_frag.png new file mode 100644 index 0000000..d02f7b8 Binary files /dev/null and b/img/er_diagram_frag.png differ diff --git a/img/normal_pb45.png b/img/normal_pb45.png new file mode 100644 index 0000000..52218b9 Binary files /dev/null and b/img/normal_pb45.png differ diff --git a/img/normal_t.png b/img/normal_t.png new file mode 100644 index 0000000..04e0bcc Binary files /dev/null and b/img/normal_t.png differ diff --git a/img/normal_t123.png b/img/normal_t123.png new file mode 100644 index 0000000..3e13007 Binary files /dev/null and b/img/normal_t123.png differ diff --git a/img/normal_t_dep.png b/img/normal_t_dep.png new file mode 100644 index 0000000..0eee237 Binary files /dev/null and b/img/normal_t_dep.png differ diff --git a/main.typ b/main.typ index 447ce4e..65ad497 100644 --- a/main.typ +++ b/main.typ @@ -343,16 +343,50 @@ == Побудова логічної моделі бази даних шляхом нормалізаці +Нормалізація структури даних відіграє фундаментальну роль у процесі проектування сучасних інформаційних систем, оскільки забезпечує створення раціональної архітектури даних, що ефективно запобігає надлишковості інформації та можливим аномаліям. В контексті розробки інформаційної системи пакункового репозиторію, нормалізація набуває особливої значущості через комплексну природу зв'зків між пакунками у репозиторіях. -Нормалізація бази даних виконується для оптимізації її структури, мінімізації надлишковості даних та забезпечення їх цілісності. Цей процес допомагає уникнути аномалій під час операцій з даними, підвищує ефективність роботи з базою та робить її більш адаптивною до змін. Нормалізація передбачає декомпозицію великих таблиць на менші, та встановлення логічних зв'язків між ними, що спрощує підтримку та покращує організацію даних. +Розмір ER-діаграми інформаційної системи містить понад 25 атрибутів, тому згідно з методичними вказівками з курсового +проектування було обрано частину, що охоплює 5 взаємопов'язаних сутностей: "Користувач", "Пакунок", "База пакунку", "Тип ролі" та "Роль" @er_diagram_frag. Така декомпозиція дозволяє детально опрацювати найбільш критичні аспекти системи, забезпечуючи при цьому можливість подальшого масштабування. -// TODO: img +#img("img/er_diagram_frag.png", "Фрагмент ER-діаграми (рисунок виконаний самостійно)") -// Для перевірки відповідності бази даних третій нормальній формі, розглянемо п'ять основних сутностей з нашої ER-діаграми: "Користувач", "Пакунок", "База пакунку", "Роль" та "Залежність" (див. рис. 3.3). З атрибутів цих сутностей сформуємо універсальне відношення T (див. рис. 3.4). +Відповідно до теорії реляційних баз даних, відношення вважається нормалізованим до першої нормальної форми (1НФ) за умови дотримання наступних критичних вимог: атомарності даних (кожне поле містить лише одне значення), унікальності ідентифікації записів через первинні ключі, відсутності порожніх значень у ключових полях, та незалежності від фізичного порядку розташування записів. -// Перша нормальна форма вимагає, щоб усі атрибути містили лише атомарні (неподільні) значення, а відношення мало первинні ключі для забезпечення унікальності записів. Аналіз універсального відношення показує, що всі його атрибути є атомарними. Оптимальними ключовими атрибутами виступають "Користувач_ID", "Пакунок_ID" та "Роль_ID". Кожен з цих ідентифікаторів дає доступ до відповідного набору атрибутів: "Користувач_ID" – до даних користувача, "Пакунок_ID" – до інформації про пакунок, а "Роль_ID" – до даних про роль користувача в системі. +Для практичної перевірки відповідності 1НФ, створимо універсальне відношення T @normal_t, що інтегрує атрибути всіх релевантних сутностей. Це відношення формує фундаментальну структуру для подальшої нормалізації даних. -Таким чином, можна констатувати, що відношення T задовольняє вимогам першої нормальної форми. +При визначенні первинного ключа особлива увага приділяється семантичному аналізу даних, зокрема є потреба бачити яку роль має користувач для кожної бази пакунку. Можемо зробити висновок що найкращим ключовими атрибутами стануть "База пакунку id", "Користувач id" та "Роль id". Ці атрибути надають можливість унікально ідентифікувати універсальне відношення. + +#img("img/normal_t.png", "Універсальне відношення T (рисунок виконаний самостійно)") + +Всі визначені атрибути є неподільними, а значення атомарні. Первиний ключ {База пакунку id, Користувач id, Роль id} дозволяє унікально ідентифікувати кожний кортеж. Ключові поля не мають порожніх значень, кортежі не мають фіксованого порядку. Тому, універсальне вдношення Т знаходиться в 1НФ. + +Щоб перевірити універсальне відношення Т на відповідність 2НФ потрібно проаналізувати його на існування частковий функціональних залежностей неключових атрибутів від частини первинного ключа. + +Для перевірки чи знаходиться відношення Т в другій нормальній формі визначимо функціональні залежності атрибутів @normal_t_dep. + +Можемо зробити висновок, що відношення не знаходиться в другій нормальній формі, адже деякі атрибути мають неповні функціональні залежності (залежать лише від частини ключа). Для приведення універсального відношення Т до другої нормальної форми виділимо з нього три універсальних відношення T1, T2 та T3 виходячи з помічених раніше неповних функціональних залежностей @normal_t123. + + +#img("img/normal_t_dep.png", "Універсальне відношення T із визначеними залежностями (рисунок виконаний самостійно)") + +#img("img/normal_t123.png", "Універсальні відношення T1, Т2 та T3 (рисунок виконаний самостійно)") + +Для досягнення третьої нормальної форми таблиці мають бути в другій нормальній формі, a також в відношеннях не має бути транзитивних залежностей, тобто кожен неключовий атрибут повинен залежати безпосередньо від первинного ключа, а не через інші неключові атрибути. + +Проаналізувавши відношення Т1, Т2 і Т3 можемо побачити, що всі атрибути в них залежать від ключів "База пакунку id", "Користувач id" та "Роль id" відповідно, але ще існують інші залежності: +- "Користувач id" - "Ім'я", "Електронна пошта", "Пароль", "Дата логіну", "Дата створення", "Дата оновлення"; +- "Пакунок id" - "Назва", "Версія", "Опис", "Веб-покликання", "Дата позначення", "Дата створення", "Дата оновлення"; +- "Тип ролі id" - "Назва", "Опис"; +- "База пакунку id" - "Назва", "Опис", "Дата створення", "Дата оновлення"; +- "Роль id" - "Коментар". + +Спочатку винесемо відношення "Пакунок" за допомогою ключа "Пакунок id" та виділимо відношення "База пакунку" з відношення Т2 за допомогою ключа "База пакунку id", після чого сформуємо відношення T4 та T5 в котрих залишимо зовнішній ключ "Пакунок id" @normal_pb45. + +#img("img/normal_pb45.png", [Відношення "Пакунок", "База пакунку", Т4, Т5 (рисунок виконаний самостійно)]) + +Тепер з відношень Т4 та Т5 виділимо відношення "Тип ролі" за допомогою ключа "Тип ролі id" + +😫 = Опис програми