= Relation Design = == Опис == Базата е дизајнирана за систем за рецепти кој вклучува корисници, рецепти, состојки, преференции и форум функционалности. Овозможува персонализација преку алергии и преференции, како и интеракција преку коментари, лајкови и оценки. == Релациски дијаграм == [[Image(RelationalModel1.svg)]] == Главни ентитети == * '''user''' – содржи податоци за корисници (username, email, password) * '''recipe''' – рецепти со опис, нутритивни вредности и време за подготовка * '''ingredient''' – состојки кои се користат во рецепти * '''category, tags, cuisine''' – класификација и организација на рецепти * '''allergen''' – алергени поврзани со состојки и корисници * '''preferences''' – поставки поврзани со корисник (калории, време, итн.) == Релации == * '''1:1''' * user → preferences (еден корисник има една преференца) * '''1:N''' * recipe → instruction (еден рецепт има повеќе чекори) * instruction → instruction_media (еден чекор има повеќе медиуми) * user → forumpost (еден корисник може да има повеќе постови) * '''N:M (преку посредни табли)''' * user ↔ role (user_role) * user ↔ allergen (user_allergen) * recipe ↔ category (recipe_category) * recipe ↔ tags (recipe_tags) * recipe ↔ ingredient (recipe_ingredient) * preferences ↔ cuisine (preferences_cuisine) == Форум и интеракции == * '''forumpost''' – постови креирани од корисници (може да се поврзат со рецепт) * '''forumpost_like''' – корисници можат да лајкнуваат постови * '''forumpost_comment''' – коментари со поддршка за вложени (nested) одговори == User–Recipe активности == * '''recipe_favorite''' – омилени рецепти * '''recipe_attempt''' – рецепти кои корисник ги пробал * '''recipe_review''' – оценка и коментар (само ако постои attempt) * '''recipe_view''' – следење на прегледи * '''recipe_dislike''' – рецепти кои не му се допаѓаат на корисникот == Ограничувања и интегритет == * PRIMARY KEY и FOREIGN KEY за поврзување на табелите * UNIQUE за спречување дупликати * CHECK constraints (валиден email, password правила, вредности) * ON DELETE CASCADE / RESTRICT / SET NULL за контрола при бришење == Заклучок == Дизајнот е нормализиран и овозможува флексибилно управување со податоци, како и поддршка за сложени релации и кориснички интеракции.