wiki:DatabaseProgramming

Version 3 (modified by 231118, 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 тригери

Овие механизми овозможуваат централизирано извршување на бизнис логиката, автоматско пополнување на временски ознаки, спречување на дупликати и одржување на интегритетот на податоците во базата.

Note: See TracWiki for help on using the wiki.