| Version 3 (modified by , 13 hours ago) ( diff ) |
|---|
Функции, Процедури и Тригери
Функции
Во системот се имплементирани функции кои се користат за пресметка на статистички податоци и добивање информации поврзани со рецепти и форум објави.
get_forumpost_comments_count
Ја враќа вкупната бројка на коментари за одреден форум пост.
- Влезен параметар:
p_forumpost_id - Излез: број на коментари
get_forumpost_likes_count
Ја враќа вкупната бројка на лајкови за одреден форум пост.
- Влезен параметар:
p_forumpost_id - Излез: број на лајкови
get_total_recipes_by_cuisine
Го пресметува бројот на рецепти за избран тип на кујна.
- Влезен параметар:
p_cuisine_id - Излез: број на рецепти
get_total_recipes_by_category
Го пресметува бројот на рецепти во дадена категорија.
- Влезен параметар:
p_category_id - Излез: број на рецепти
is_quick_recipe
Проверува дали рецептот може да се подготви за најмногу 30 минути.
- Влезен параметар:
p_recipe_id - Излез: TRUE/FALSE
Процедури
Процедурите се користат за централизирано извршување на бизнис логиката и заштита на интегритетот на податоците.
add_recipe_review
Овозможува додавање рецензија за рецепт.
Пред внесување се проверува:
- дали корисникот го има пробано рецептот
- дали веќе има оставено рецензија
- дали оцената е во дозволени граници (1-5)
add_forum_comment
Додава нов коментар на форум пост.
Се проверува:
- дали содржината не е празна
- дали форум постот постои
add_recipe_to_favorites
Додава рецепт во листата на омилени рецепти на корисникот.
Се спречува двојно додавање на ист рецепт.
add_recipe_attempt
Евидентира дека корисникот го има подготвено рецептот.
Се спречува повеќекратно означување на истиот рецепт.
remove_recipe_from_favorites
Го отстранува рецептот од листата на омилени рецепти.
delete_forum_comment
Овозможува бришење на форум коментар.
Пред бришење се проверува дали коментарот постои.
add_recipe_dislike
Додава dislike на рецепт.
Се спречува повеќекратно додавање dislike од ист корисник.
remove_recipe_dislike
Го отстранува претходно додадениот dislike.
add_forumpost_like
Додава like на форум пост.
Се спречува двојно лајкнување на ист пост од ист корисник.
Тригери
Тригерите автоматски се активираат при INSERT операции и обезбедуваат автоматско пополнување на временски ознаки.
trg_set_comment_created_at
Табела: forumpost_comment
Автоматски го поставува полето created_at при креирање на нов коментар доколку вредноста не е внесена.
trg_set_forumpost_created_at
Табела: forumpost
Автоматски го поставува полето created_at при креирање на нов форум пост доколку вредноста не е внесена.
trg_set_recipe_attempt_time
Табела: recipe_attempt
Автоматски го поставува времето на подготовка во полето attempted_at при внесување нов запис.
Materialized Views
За дополнителна оптимизација беа креирани materialized views за често користени статистички податоци како просечна оцена, број на прегледи и број на омилени рецепти.
Користени materialized views:
- recipe_reviews_mv
- recipe_views_mv
- recipe_favorites_mv
Оптимизација:
CREATE MATERIALIZED VIEW recipe_reviews_mv AS
SELECT
recipe_id,
recipe,
AVG(rating) AS average_rating,
COUNT(id) AS total_reviews
FROM recipe_reviews_view
GROUP BY recipe_id, recipe;
CREATE MATERIALIZED VIEW recipe_views_mv AS
SELECT
recipe_id,
recipe,
COUNT(user_id) AS total_views
FROM recipe_views_view
GROUP BY recipe_id, recipe;
CREATE MATERIALIZED VIEW recipe_favorites_mv AS
SELECT
recipe_id,
recipe,
COUNT(user_id) AS total_favorites
FROM user_favorites_view
GROUP BY recipe_id, recipe;
Заклучок: Materialized views овозможуваат побрзо прикажување на агрегирани податоци бидејќи резултатите се зачувуваат физички во базата и не се пресметуваат повторно при секое извршување.
Заклучок
Во системот се имплементирани:
- 5 кориснички функции
- 9 процедури
- 3 тригери
Овие механизми овозможуваат централизирано извршување на бизнис логиката, автоматско пополнување на временски ознаки, спречување на дупликати и одржување на интегритетот на податоците во базата.
