Changes between Version 4 and Version 5 of Normalization
- Timestamp:
- 04/20/26 18:54:06 (2 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Normalization
v4 v5 1 =**Нормализација**1 # **Нормализација** 2 2 3 3 == **Де-нормализирана база на податоци** … … 5 5 Се тргнува од една глобална, де-нормализирана релација што ги содржи атрибутите од целиот модел: 6 6 7 `R = { user_id, email, username, password, training_user_id, training_gender, training_age, training_weight, training_id, training_date, training_type, training_duration, training_calories, investor_user_id, asset_id, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity, weight_user_id, weight_current, weight_height, weight_goal_weight, weight_goal_calories, daily_intake_id, daily_intake_date, daily_intake_calories, discipline_user_id, custom_tracking_id, custom_tracking_name, task_id, task_name, task_finished, daily_completion_id, daily_completion_date, daily_completion_percent, finance_user_id, finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit, income_id, income_date, income_amount }`7 `R = { user_id, email, username, password, training_user_id, training_gender, training_age, training_weight, training_id, training_date, training_type, training_duration, training_calories, investor_user_id, asset_id, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity, weight_user_id, weight_current, weight_height, weight_goal_weight, weight_goal_calories, daily_intake_id, daily_intake_date, daily_intake_calories, discipline_user_id, custom_tracking_id, custom_tracking_name, task_id, name, is_finished, daily_completion_id, daily_completion_date, procent, finance_user_id, finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit, income_id, income_date, income_amount }` 8 8 9 9 Оваа релација е де-нормализирана затоа што содржи повторливи групи, како и зависности од атрибути што не се клуч. … … 22 22 - **FD10:** `discipline_user_id -> user_id` 23 23 - **FD11:** `custom_tracking_id -> user_id, custom_tracking_name` 24 - **FD12:** `task_id -> discipline_user_id, custom_tracking_id, task_name, task_finished`25 - **FD13:** `daily_completion_id -> user_id, daily_completion_date, daily_completion_percent`24 - **FD12:** `task_id -> discipline_user_id, custom_tracking_id, name, is_finished` 25 - **FD13:** `daily_completion_id -> user_id, daily_completion_date, procent` 26 26 - **FD14:** `(task_id, daily_completion_id) -> /` 27 27 - **FD15:** `finance_user_id -> finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit` … … 31 31 32 32 - **Леви:** `user_id, email, username, training_user_id, training_id, investor_user_id, asset_id, weight_user_id, daily_intake_id, discipline_user_id, custom_tracking_id, task_id, daily_completion_id, finance_user_id, income_id` 33 - **Десен:** `password, training_gender, training_age, training_weight, training_date, training_type, training_duration, training_calories, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity, weight_current, weight_height, weight_goal_weight, weight_goal_calories, daily_intake_date, daily_intake_calories, custom_tracking_name, task_name, task_finished, daily_completion_date, daily_completion_percent, finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit, income_date, income_amount` 34 35 **Леви и десен дел:** 36 37 - `user_id, training_user_id, training_id, investor_user_id, asset_id, weight_user_id, daily_intake_id, discipline_user_id, custom_tracking_id, task_id, daily_completion_id, finance_user_id, income_id` 33 - **Десен:** `password, training_gender, training_age, training_weight, training_date, training_type, training_duration, training_calories, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity, weight_current, weight_height, weight_goal_weight, weight_goal_calories, daily_intake_date, daily_intake_calories, custom_tracking_name, name, is_finished, daily_completion_date, procent, finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit, income_date, income_amount` 38 34 39 35 == **Глобална релација** 40 36 41 `R = { user_id, email, username, password, training_user_id, training_gender, training_age, training_weight, training_id, training_date, training_type, training_duration, training_calories, investor_user_id, asset_id, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity, weight_user_id, weight_current, weight_height, weight_goal_weight, weight_goal_calories, daily_intake_id, daily_intake_date, daily_intake_calories, discipline_user_id, custom_tracking_id, custom_tracking_name, task_id, task_name, task_finished, daily_completion_id, daily_completion_date, daily_completion_percent, finance_user_id, finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit, income_id, income_date, income_amount }`37 `R = { user_id, email, username, password, training_user_id, training_gender, training_age, training_weight, training_id, training_date, training_type, training_duration, training_calories, investor_user_id, asset_id, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity, weight_user_id, weight_current, weight_height, weight_goal_weight, weight_goal_calories, daily_intake_id, daily_intake_date, daily_intake_calories, discipline_user_id, custom_tracking_id, custom_tracking_name, task_id, name, is_finished, daily_completion_id, daily_completion_date, procent, finance_user_id, finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit, income_id, income_date, income_amount }` 42 38 43 39 == **Покривачи** … … 52 48 - **`discipline_user_id+`** = { `discipline_user_id`, `user_id` } -> **не ги содржи сите атрибути** 53 49 - **`custom_tracking_id+`** = { `custom_tracking_id`, `user_id`, `custom_tracking_name` } -> **не ги содржи сите атрибути** 54 - **`task_id+`** = { `task_id`, `discipline_user_id`, `custom_tracking_id`, ` task_name`, `task_finished` } -> **не ги содржи сите атрибути**55 - **`daily_completion_id+`** = { `daily_completion_id`, `user_id`, `daily_completion_date`, ` daily_completion_percent` } -> **не ги содржи сите атрибути**50 - **`task_id+`** = { `task_id`, `discipline_user_id`, `custom_tracking_id`, `name`, `is_finished` } -> **не ги содржи сите атрибути** 51 - **`daily_completion_id+`** = { `daily_completion_id`, `user_id`, `daily_completion_date`, `procent` } -> **не ги содржи сите атрибути** 56 52 - **`finance_user_id+`** = { `finance_user_id`, `finance_spending_budget`, `finance_saving_budget`, `finance_investing_budget`, `finance_donation_budget`, `finance_credit` } -> **не ги содржи сите атрибути** 57 53 - **`income_id+`** = { `income_id`, `finance_user_id`, `income_date`, `income_amount` } -> **не ги содржи сите атрибути** … … 66 62 `{ user_id, training_user_id, training_id, investor_user_id, asset_id, weight_user_id, daily_intake_id, discipline_user_id, custom_tracking_id, task_id, daily_completion_id, finance_user_id, income_id }` 67 63 68 Во нашата нормализирана конструкција, ова е теоретскиот глобален кандидат-кл юч на де-нормализираната релација.64 Во нашата нормализирана конструкција, ова е теоретскиот глобален кандидат-клуч на де-нормализираната релација. 69 65 70 66 Избран примарен клуч: **`{ user_id, training_user_id, training_id, investor_user_id, asset_id, weight_user_id, daily_intake_id, discipline_user_id, custom_tracking_id, task_id, daily_completion_id, finance_user_id, income_id }`** … … 86 82 **Прва декомпозиција** 87 83 88 - `TASKS(task_id, discipline_user_id, custom_tracking_id, task_name, task_finished)`84 - `TASKS(task_id, discipline_user_id, custom_tracking_id, name, is_finished)` 89 85 - `TASK_DAILY_COMPLETION(task_id, daily_completion_id)` 90 86 … … 114 110 - **`DISCIPLINE_USERS(user_id)`** 115 111 - **`CUSTOM_TRACKING_CATEGORIES(custom_tracking_id, user_id, name)`** 116 - **`TASKS(task_id, discipline_user_id, custom_tracking_id, task_name, task_finished)`**112 - **`TASKS(task_id, discipline_user_id, custom_tracking_id, name, is_finished)`** 117 113 - **`DAILY_COMPLETION(daily_completion_id, user_id, date, procent)`** 118 114 - **`TASK_DAILY_COMPLETION(task_id, daily_completion_id)`** … … 144 140 == **Проверка за БКНФ** 145 141 146 Сите добиени релации се во БКНФ, бидејќи секој детерминант е кандидат-кл юч во својата релација.142 Сите добиени релации се во БКНФ, бидејќи секој детерминант е кандидат-клуч во својата релација. 147 143 148 144 Особено: … … 186 182 - **API форматот** може да остане стабилен, додека внатрешната шема е нормализирана. 187 183 - **DDL и DML скриптите** треба да ја следат оваа шема. 188
