| Version 5 (modified by , 7 days ago) ( diff ) |
|---|
Nutritioneer | Нормализација и оптимизација на дизајн
Денормализирана форма
Рамна табела од сите ентитети на Nutritioneer и нивните врски, без структурни ограничувања. Повеќевредносните факти се присутни како групи што се повторуваат: еден рецепт има многу состојки, многу диететски ограничувања и многу коментари, а една состојка носи многу нутриенти.
Функционални зависности
- user_id → email, username, password, role
- email → user_id (алтернативен клуч, UNIQUE)
- username → user_id (алтернативен клуч, UNIQUE)
- ingredient_id → ingredient_name, ingr_description, energy, kcal, ingr_type
- ingredient_name → ingredient_id (алтернативен клуч, UNIQUE)
- nutrient_id → nutr_description, rdi_quantity, unit, nutr_type
- nutr_description → nutrient_id (алтернативен клуч, UNIQUE)
- restriction_id → restr_description, restr_type
- restr_description → restriction_id (алтернативен клуч, UNIQUE)
- recipe_id → recipe_name, guide, kcal_sum, servings, user_id
- post_id → media, media_type, media_name, is_private, is_favourite, status, post_created_at, user_id, recipe_id
- recipe_id → post_id (POSTS_ON е 1:1, UNIQUE врз recipe_id)
- comment_id → comment_text, comment_created_at, post_id, user_id
- list_id → list_date_time, list_notes, is_bought, list_kcal, user_id
- planner_id → planner_date_time, planner_notes, planner_kcal, is_consumed, user_id
- bio_id → bio_date, weight, height, age, muscle_fat_ratio, user_id
- {user_id, bio_date} → bio_id (едно мерење по корисник на ден)
- {recipe_id, ingredient_id} → ingredient_quantity
- {ingredient_id, nutrient_id} → nutrient_amount
- {list_id, ingredient_id} → buy_quantity
Чисти M:N врски
Врските како recipe - restriction и grocery_list - grocery_list_bulk_add_ingredient неможат да определат дополнителен атрибут. Не се функционални зависности.
Почетна денормализирана релација
R( user_id, email, username, password, role, ingredient_id, ingredient_name, ingr_description, energy, kcal, ingr_type, nutrient_id, nutr_description, rdi_quantity, unit, nutr_type, restriction_id, restr_description, restr_type, recipe_id, recipe_name, guide, kcal_sum, servings, post_id, media, media_type, media_name, is_private, is_favourite, status, post_created_at, comment_id, comment_text, comment_created_at, list_id, list_date_time, list_notes, is_bought, list_kcal, planner_id, planner_date_time, planner_notes, planner_kcal, is_consumed, bio_id, bio_date, weight, height, age, muscle_fat_ratio, ingredient_quantity, nutrient_amount, buy_quantity )
Кандидат-клуч
1.X+ = R 2.X е минимално
Кандидати клучеви се следните:
K = { comment_id, ingredient_id, nutrient_id, restriction_id, list_id, planner_id, bio_id }
Атрибут што не се појавува на десната страна на ниедна функционална зависност никогаш не може да биде изведен, па мора да припаѓа на секој клуч. Пресметка на затворањето на K:
- comment_id → post_id, user_id; post_id → recipe_id; recipe_id → атрибути на рецептот; user_id → атрибути на корисникот
- ingredient_id → атрибути на состојката; {recipe_id, ingredient_id} → ingredient_quantity
- nutrient_id → атрибути на нутриентот; {ingredient_id, nutrient_id} → nutrient_amount
- restriction_id, list_id, planner_id, bio_id → нивните гранки; {list_id, ingredient_id} → buy_quantity
Проверка на минималност
- Отстранување на comment_id -> Се губи крајот на синџирот коментар → објава → рецепт → корисник.
- Отстранување на ingredient_id -> Се губи каталогот на храна, а со него и сите три атрибути за количина на врските.
- Oтстранување на nutrient_id -> Се губи гранката на нутриенти и nutrient_amount.
- Oтстранување на restriction_id -> Се губи гранката на диететски ознаки
- Oтстранување на list_id, planner_id или bio_id -> Се губат соодветните ентитети. Ниедна од нив не е определена од ништо друго.
Примерок од денормализирани податоци
Истиот корисник, рецепт, состојка и количина на нутриент се повторуваат по еднаш за секој коментар и по еднаш за секое ограничување. Промена на име на рецепт би барала ажурирање на секој од овие редови — аномалија при промена — а бришењето на последниот коментар би го избришало и фактот дека рецептот содржи бел грав — аномалија при бришење.
| username | recipe name | ingredient name | nutrient descr | nutrient amount | restriction type | comment |
|---|---|---|---|---|---|---|
| marija_t | Tavce Gravce | Dry White Beans | Protein | 21.0 | vegan | How long should I let it simmer and soak? |
| marija_t | Tavce Gravce | Dry White Beans | Protein | 21.0 | vegan | How long should you keep stirring the pot? |
| marija_t | Tavce Gravce | Dry White Beans | Protein | 21.0 | gluten_free | What is in the sauce? |
ПРВА(1NF)
ВТОРА(2NF)
ТРЕТА(3NF)
БОЈС-КОДОВА (BCNF)
Навигација низ проектот
| Фаза | Име на фаза | Статус |
|---|---|---|
| P0 | Дефинирање проект | Одобрен |
| P1 | Концептуален дизајн и ЕР Дијаграм | Одобрен |
| P2 | Логички и физички дизајн - DDL | Одобрен |
| P3 | Кориснички/апикациски сценарија со базата на податоци | Одобрен |
| P4 | Протип со основни функционалности | WIP |
| М1 | Презентација на прототип | WIP |
| P5 | Нормализација и оптимизација на дизајн | WIP |
| P6 | Напредни извештаи од базата | WIP |
| P7 | Понапреден развој на базата | WIP |
| P8 | Напреден апликативен развој | WIP |
| P9 | Дополнителни имплементации | WIP |
| М2 | Финализиран проект | WIP |
(Trac навигација)
- TracGuide Documentation
