Changes between Initial Version and Version 1 of CompanyUsersView


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

--

Legend:

Unmodified
Added
Removed
Modified
  • CompanyUsersView

    v1 v1  
     1= Преглед: v_company_users =
     2
     3||= Датотека ||= `views/09_company_users_view.sql` ||
     4||= Шема ||= `kbnteam` ||
     5||= Категорија ||= Оперативна поддршка ||
     6||= Поврзани индекси ||= Нема наменска датотека — ги користи споделените индекси ||
     7
     8== Опис ==
     9Ги комбинира купувачите, возачите и api_admin корисниците во еден преглед ориентиран на компанија. Користи три `UNION` гранки — по една за секоја улога. Корисниците од тип driver и api_admin се прикажуваат само ако постои активен договор помеѓу компанијата и нивниот ресторан.
     10
     11== Зависности ==
     12||= Табела ||= Улога ||= UNION гранка ||
     13|| `kbnteam.customer` || Купувач || 1 (customer) ||
     14|| `kbnteam.company` || Компанија || Сите ||
     15|| `kbnteam.api_user` || Детали за корисник || Сите ||
     16|| `kbnteam.contract` || Договор за компанија-ресторан || 2 (driver), 3 (admin) ||
     17|| `kbnteam.restaurant` || Ресторан || 2 (driver), 3 (admin) ||
     18|| `kbnteam.driver` || Возач || 2 (driver) ||
     19|| `kbnteam.api_admin` || Администратор || 3 (admin) ||
     20
     21== SQL Дефиниција ==
     22{{{
     23#!sql
     24CREATE OR REPLACE VIEW kbnteam.v_company_users AS
     25SELECT
     26    cu.company_id,
     27    cmp.company_name,
     28    'customer'::text AS related_role,
     29    au.user_id,
     30    au.user_first_name,
     31    au.user_last_name,
     32    au.user_email,
     33    au.user_phone_no,
     34    NULL::integer AS rest_id,
     35    NULL::varchar(255) AS rest_name
     36FROM kbnteam.customer cu
     37JOIN kbnteam.company cmp ON cmp.company_id = cu.company_id
     38JOIN kbnteam.api_user au ON au.user_id = cu.user_id
     39
     40UNION
     41
     42SELECT DISTINCT
     43    ct.company_id,
     44    cmp.company_name,
     45    'driver'::text AS related_role,
     46    au.user_id,
     47    au.user_first_name,
     48    au.user_last_name,
     49    au.user_email,
     50    au.user_phone_no,
     51    r.rest_id,
     52    r.rest_name
     53FROM kbnteam.contract ct
     54JOIN kbnteam.company cmp ON cmp.company_id = ct.company_id
     55JOIN kbnteam.restaurant r ON r.rest_id = ct.rest_id
     56JOIN kbnteam.driver drv ON drv.rest_id = r.rest_id
     57JOIN kbnteam.api_user au ON au.user_id = drv.user_id
     58
     59UNION
     60
     61SELECT DISTINCT
     62    ct.company_id,
     63    cmp.company_name,
     64    'api_admin'::text AS related_role,
     65    au.user_id,
     66    au.user_first_name,
     67    au.user_last_name,
     68    au.user_email,
     69    au.user_phone_no,
     70    r.rest_id,
     71    r.rest_name
     72FROM kbnteam.contract ct
     73JOIN kbnteam.company cmp ON cmp.company_id = ct.company_id
     74JOIN kbnteam.restaurant r ON r.rest_id = ct.rest_id
     75JOIN kbnteam.api_admin aa ON aa.rest_id = r.rest_id
     76JOIN kbnteam.api_user au ON au.user_id = aa.user_id;
     77}}}
     78
     79== Тестирање на перформанси ==
     80
     81=== Препорачано тест прашање ===
     82{{{
     83#!sql
     84SET search_path TO kbnteam;
     85SET statement_timeout = '60s';
     86
     87-- Тест 1: по компанија
     88EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
     89SELECT * FROM kbnteam.v_company_users
     90WHERE company_id = 1;
     91
     92-- Тест 2: по улога
     93EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
     94SELECT * FROM kbnteam.v_company_users
     95WHERE related_role = 'driver';
     96}}}
     97
     98=== Резултати ===
     99Овој преглед нема наменска датотека за индекси. Перформансите зависат од договорните и корисничките индекси создадени за другите прегледи.
     100
     101||= Метрика ||= Тест 1 (company_id) ||= Тест 2 (role) ||
     102|| Planning Time || ___ ms || ___ ms ||
     103|| Execution Time || ___ ms || ___ ms ||
     104|| Rows Returned || ___ || ___ ||
     105|| Scan Type (customer) || ___ || ___ ||
     106|| Scan Type (contract) || ___ || ___ ||
     107
     108{{{
     109-- Излезот од EXPLAIN ANALYZE овде
     110}}}
     111
     112=== Потенцијални подобрувања ===
     113Доколку овој преглед е бавен, разгледајте:
     114* Индекс на `customer(company_id)` — за Гранка 1
     115* Индекс на `contract(company_id)` (веќе создаден со `v_company_billing_overview_index.sql`) — за Гранки 2 и 3
     116* Индекс на `driver(rest_id)` (веќе создаден со `v_driver_lunch_timers_index.sql`) — за Гранка 2
     117* Индекс на `api_admin(rest_id)` — за Гранка 3