Changes between Initial Version and Version 1 of CustomerContractDrinksView


Ignore:
Timestamp:
05/10/26 14:38:31 (2 weeks ago)
Author:
185022
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CustomerContractDrinksView

    v1 v1  
     1= Преглед: v_customer_contract_drinks =
     2
     3||= Датотека ||= `views/11_customer_contract_drinks_view.sql` ||
     4||= Шема ||= `kbnteam` ||
     5||= Категорија ||= Оперативна поддршка ||
     6||= Поврзани индекси ||= Ги користи индексите од `indexes/v_menu_drink_index.sql` ||
     7
     8== Опис ==
     9Ги наведува пијачите достапни на купувач под активни договори. Применува ист шаблон за филтрирање на активни договори и тековни датуми на договори, но без CTE агрегации бидејќи пијачите немаат состојки или алергени. Се користи директно во апликацијата и преку `v_customer_contract_menu`.
     10
     11'''Клучни филтри:'''
     12* `contract_status_name = 'active'` (case-insensitive)
     13* `CURRENT_DATE BETWEEN contract_start_date AND contract_end_date`
     14
     15== Зависности ==
     16||= Табела ||= Тип на употреба ||
     17|| `kbnteam.customer` || Главна табела ||
     18|| `kbnteam.api_user` || JOIN — детали за купувачот ||
     19|| `kbnteam.company` || JOIN — компанија ||
     20|| `kbnteam.contract` || JOIN — договор ||
     21|| `kbnteam.contract_status` || JOIN — статус (филтер: 'active') ||
     22|| `kbnteam.restaurant` || JOIN — ресторан ||
     23|| `kbnteam.drink` || JOIN — пијачи на ресторанот ||
     24
     25== SQL Дефиниција ==
     26{{{
     27#!sql
     28CREATE OR REPLACE VIEW kbnteam.v_customer_contract_drinks AS
     29SELECT
     30    cu.user_id AS customer_user_id,
     31    au.user_first_name AS customer_first_name,
     32    au.user_last_name AS customer_last_name,
     33    au.user_email AS customer_email,
     34    cu.company_id,
     35    cmp.company_name,
     36    ct.contract_id,
     37    r.rest_id,
     38    r.rest_name,
     39    d.drink_id,
     40    d.drink_name,
     41    d.drink_milliliters,
     42    d.drink_price
     43FROM kbnteam.customer cu
     44JOIN kbnteam.api_user au ON au.user_id = cu.user_id
     45JOIN kbnteam.company cmp ON cmp.company_id = cu.company_id
     46JOIN kbnteam.contract ct ON ct.company_id = cu.company_id
     47JOIN kbnteam.contract_status cs ON cs.contract_status_id = ct.contract_status_id
     48JOIN kbnteam.restaurant r ON r.rest_id = ct.rest_id
     49JOIN kbnteam.drink d ON d.rest_id = r.rest_id
     50WHERE lower(cs.contract_status_name) = 'active'
     51  AND CURRENT_DATE BETWEEN ct.contract_start_date AND ct.contract_end_date;
     52}}}
     53
     54== Тестирање на перформанси ==
     55
     56=== Препорачано тест прашање ===
     57{{{
     58#!sql
     59SET search_path TO kbnteam;
     60SET statement_timeout = '60s';
     61
     62-- Тест 1: по купувач
     63EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
     64SELECT * FROM kbnteam.v_customer_contract_drinks
     65WHERE customer_user_id = 1;
     66
     67-- Тест 2: по ресторан
     68EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
     69SELECT * FROM kbnteam.v_customer_contract_drinks
     70WHERE rest_id = 1;
     71}}}
     72
     73=== Применети индекси (од v_menu_drink_index.sql) ===
     74{{{
     75#!sql
     76CREATE INDEX IF NOT EXISTS idx_drink_rest_id_drink_id
     77ON kbnteam.drink (rest_id, drink_id);
     78}}}
     79
     80=== Резултати пред индексирање ===
     81||= Метрика ||= Тест 1 (customer) ||= Тест 2 (rest_id) ||
     82|| Planning Time || ___ ms || ___ ms ||
     83|| Execution Time || ___ ms || ___ ms ||
     84|| Rows Returned || ___ || ___ ||
     85|| drink scan || ___ || ___ ||
     86
     87{{{
     88-- Излезот од EXPLAIN ANALYZE овде (пред индексирање)
     89}}}
     90
     91=== Резултати по индексирање ===
     92||= Метрика ||= Тест 1 (customer) ||= Тест 2 (rest_id) ||
     93|| Planning Time || ___ ms || ___ ms ||
     94|| Execution Time || ___ ms || ___ ms ||
     95|| Rows Returned || ___ || ___ ||
     96|| drink scan || ___ || ___ ||
     97
     98{{{
     99-- Излезот од EXPLAIN ANALYZE овде (по индексирање)
     100}}}
     101
     102=== Анализа на подобрување ===
     103||= Метрика ||= Пред ||= По ||= Δ Подобрување ||
     104|| Execution Time (Тест 2) || ___ ms || ___ ms || ___ % ||
     105
     106'''Очекувано:''' `idx_drink_rest_id_drink_id` го помага JOIN-от на пијачи по ресторан. Поедноставната структура (без CTE) прави овој преглед значително побрз од `v_customer_contract_meals`.