| 6 | | 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, 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 }` |
| 12 | | FD1: user_id -> email, username, password |
| 13 | | FD2: email -> user_id, username, password |
| 14 | | FD3: username -> user_id, email, password |
| 15 | | FD4: training_user_id -> training_gender, training_age, training_weight |
| 16 | | FD5: training_id -> training_user_id, training_date, training_type, training_duration, training_calories |
| 17 | | FD6: investor_user_id -> user_id |
| 18 | | FD7: asset_id -> investor_user_id, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity |
| 19 | | FD8: weight_user_id -> weight_current, weight_height, weight_goal_weight, weight_goal_calories |
| 20 | | FD9: daily_intake_id -> weight_user_id, daily_intake_date, daily_intake_calories |
| 21 | | FD10: discipline_user_id -> user_id |
| 22 | | FD11: custom_tracking_id -> user_id, custom_tracking_name |
| 23 | | FD12: task_id -> discipline_user_id, custom_tracking_id, task_name, task_finished |
| 24 | | FD13: daily_completion_id -> user_id, daily_completion_date, daily_completion_percent |
| 25 | | FD14: (task_id, daily_completion_id) -> / |
| 26 | | FD15: finance_user_id -> finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit |
| 27 | | FD16: income_id -> finance_user_id, income_date, income_amount |
| 28 | | Леви и десен дел: |
| | 13 | - **FD1:** `user_id -> email, username, password` |
| | 14 | - **FD2:** `email -> user_id, username, password` |
| | 15 | - **FD3:** `username -> user_id, email, password` |
| | 16 | - **FD4:** `training_user_id -> training_gender, training_age, training_weight` |
| | 17 | - **FD5:** `training_id -> training_user_id, training_date, training_type, training_duration, training_calories` |
| | 18 | - **FD6:** `investor_user_id -> user_id` |
| | 19 | - **FD7:** `asset_id -> investor_user_id, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity` |
| | 20 | - **FD8:** `weight_user_id -> weight_current, weight_height, weight_goal_weight, weight_goal_calories` |
| | 21 | - **FD9:** `daily_intake_id -> weight_user_id, daily_intake_date, daily_intake_calories` |
| | 22 | - **FD10:** `discipline_user_id -> user_id` |
| | 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` |
| | 26 | - **FD14:** `(task_id, daily_completion_id) -> /` |
| | 27 | - **FD15:** `finance_user_id -> finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit` |
| | 28 | - **FD16:** `income_id -> finance_user_id, income_date, income_amount` |
| 30 | | Леви: 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 |
| 31 | | Десен: 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 |
| 32 | | Леви и десен дел: |
| | 30 | **Леви и десен дел:** |
| 34 | | 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 |
| 35 | | == Глобална релација |
| | 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` |
| 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, 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 } |
| | 35 | **Леви и десен дел:** |
| 41 | | user_id+ = { user_id, email, username, password } -> не ги содржи сите атрибути |
| 42 | | training_user_id+ = { training_user_id, training_gender, training_age, training_weight } -> не ги содржи сите атрибути |
| 43 | | training_id+ = { training_id, training_user_id, training_date, training_type, training_duration, training_calories } -> не ги содржи сите атрибути |
| 44 | | investor_user_id+ = { investor_user_id, user_id } -> не ги содржи сите атрибути |
| 45 | | asset_id+ = { asset_id, investor_user_id, asset_ticker_symbol, asset_buy_price, asset_buy_date, asset_quantity } -> не ги содржи сите атрибути |
| 46 | | weight_user_id+ = { weight_user_id, weight_current, weight_height, weight_goal_weight, weight_goal_calories } -> не ги содржи сите атрибути |
| 47 | | daily_intake_id+ = { daily_intake_id, weight_user_id, daily_intake_date, daily_intake_calories } -> не ги содржи сите атрибути |
| 48 | | discipline_user_id+ = { discipline_user_id, user_id } -> не ги содржи сите атрибути |
| 49 | | custom_tracking_id+ = { custom_tracking_id, user_id, custom_tracking_name } -> не ги содржи сите атрибути |
| 50 | | task_id+ = { task_id, discipline_user_id, custom_tracking_id, task_name, task_finished } -> не ги содржи сите атрибути |
| 51 | | daily_completion_id+ = { daily_completion_id, user_id, daily_completion_date, daily_completion_percent } -> не ги содржи сите атрибути |
| 52 | | finance_user_id+ = { finance_user_id, finance_spending_budget, finance_saving_budget, finance_investing_budget, finance_donation_budget, finance_credit } -> не ги содржи сите атрибути |
| 53 | | income_id+ = { income_id, finance_user_id, income_date, income_amount } -> не ги содржи сите атрибути |
| 54 | | {task_id, daily_completion_id}+ = { task_id, daily_completion_id } -> не ги содржи сите атрибути |
| 55 | | == Спојување покривачи |
| | 39 | == **Глобална релација** |
| | 40 | |
| | 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 }` |
| | 42 | |
| | 43 | == **Покривачи** |
| | 44 | |
| | 45 | - **`user_id+`** = { `user_id`, `email`, `username`, `password` } -> **не ги содржи сите атрибути** |
| | 46 | - **`training_user_id+`** = { `training_user_id`, `training_gender`, `training_age`, `training_weight` } -> **не ги содржи сите атрибути** |
| | 47 | - **`training_id+`** = { `training_id`, `training_user_id`, `training_date`, `training_type`, `training_duration`, `training_calories` } -> **не ги содржи сите атрибути** |
| | 48 | - **`investor_user_id+`** = { `investor_user_id`, `user_id` } -> **не ги содржи сите атрибути** |
| | 49 | - **`asset_id+`** = { `asset_id`, `investor_user_id`, `asset_ticker_symbol`, `asset_buy_price`, `asset_buy_date`, `asset_quantity` } -> **не ги содржи сите атрибути** |
| | 50 | - **`weight_user_id+`** = { `weight_user_id`, `weight_current`, `weight_height`, `weight_goal_weight`, `weight_goal_calories` } -> **не ги содржи сите атрибути** |
| | 51 | - **`daily_intake_id+`** = { `daily_intake_id`, `weight_user_id`, `daily_intake_date`, `daily_intake_calories` } -> **не ги содржи сите атрибути** |
| | 52 | - **`discipline_user_id+`** = { `discipline_user_id`, `user_id` } -> **не ги содржи сите атрибути** |
| | 53 | - **`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` } -> **не ги содржи сите атрибути** |
| | 56 | - **`finance_user_id+`** = { `finance_user_id`, `finance_spending_budget`, `finance_saving_budget`, `finance_investing_budget`, `finance_donation_budget`, `finance_credit` } -> **не ги содржи сите атрибути** |
| | 57 | - **`income_id+`** = { `income_id`, `finance_user_id`, `income_date`, `income_amount` } -> **не ги содржи сите атрибути** |
| | 58 | - **`{task_id, daily_completion_id}+`** = { `task_id`, `daily_completion_id` } -> **не ги содржи сите атрибути** |
| | 59 | |
| | 60 | == **Спојување покривачи** |
| 100 | | USERS(user_id, email, username, password) |
| 101 | | TRAINING_USERS(user_id, gender, age, weight) |
| 102 | | TRAINING_SESSIONS(training_id, training_user_id, date, type, duration, calories) |
| 103 | | INVESTOR_USERS(user_id) |
| 104 | | ASSETS(asset_id, user_id, ticker_symbol, buy_price, buy_date, quantity) |
| 105 | | WEIGHT_USERS(user_id, weight, height, goal_weight, goal_calories) |
| 106 | | DAILY_INTAKES(daily_intake_id, user_id, date, calories) |
| 107 | | DISCIPLINE_USERS(user_id) |
| 108 | | CUSTOM_TRACKING_CATEGORIES(custom_tracking_id, user_id, name) |
| 109 | | TASKS(task_id, discipline_user_id, custom_tracking_id, task_name, task_finished) |
| 110 | | DAILY_COMPLETION(daily_completion_id, user_id, date, procent) |
| 111 | | TASK_DAILY_COMPLETION(task_id, daily_completion_id) |
| 112 | | FINANCE_USERS(user_id, spending_budget, saving_budget, investing_budget, donation_budget, credit) |
| 113 | | INCOMES(income_id, user_id, date, amount) |
| 114 | | == Проверка за 3НФ |
| | 107 | - **`USERS(user_id, email, username, password)`** |
| | 108 | - **`TRAINING_USERS(user_id, gender, age, weight)`** |
| | 109 | - **`TRAINING_SESSIONS(training_id, training_user_id, date, type, duration, calories)`** |
| | 110 | - **`INVESTOR_USERS(user_id)`** |
| | 111 | - **`ASSETS(asset_id, user_id, ticker_symbol, buy_price, buy_date, quantity)`** |
| | 112 | - **`WEIGHT_USERS(user_id, weight, height, goal_weight, goal_calories)`** |
| | 113 | - **`DAILY_INTAKES(daily_intake_id, user_id, date, calories)`** |
| | 114 | - **`DISCIPLINE_USERS(user_id)`** |
| | 115 | - **`CUSTOM_TRACKING_CATEGORIES(custom_tracking_id, user_id, name)`** |
| | 116 | - **`TASKS(task_id, discipline_user_id, custom_tracking_id, task_name, task_finished)`** |
| | 117 | - **`DAILY_COMPLETION(daily_completion_id, user_id, date, procent)`** |
| | 118 | - **`TASK_DAILY_COMPLETION(task_id, daily_completion_id)`** |
| | 119 | - **`FINANCE_USERS(user_id, spending_budget, saving_budget, investing_budget, donation_budget, credit)`** |
| | 120 | - **`INCOMES(income_id, user_id, date, amount)`** |
| | 121 | |
| | 122 | == **Проверка за 3НФ** |