Changes between Version 1 and Version 2 of AdvancedDatabaseDevelopment


Ignore:
Timestamp:
09/25/26 04:45:32 (6 days ago)
Author:
223306
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedDatabaseDevelopment

    v1 v2  
    11= Advanced Database Development =
    22
    3 Во оваа фаза се имплементирани напредни механизми на ниво на базата на податоци за одржување на конзистентноста на податоците и за обезбедување дополнителни аналитички информации во системот !BiblioPremium.
    4 
    5 Имплементацијата вклучува тригер функција, тригер и поглед (VIEW).
     3Во оваа фаза се имплементирани напредни механизми на ниво на базата на податоци за одржување на конзистентноста на податоците, автоматска контрола на залихата и поддршка на препораките и аналитичките функционалности во системот !BiblioPremium.
     4
     5Имплементацијата вклучува:
     6- тригер функција и тригер за автоматска проверка и намалување на залихата;
     7- аналитички поглед за продажба по книга;
     8- поглед за следење на состојбата на залихата;
     9- функција за препорачување книги според избрано расположение.
    610
    711== Автоматска проверка и намалување на залихата при завршување на нарачка ==
    … …  
    913=== Data requirements description ===
    1014
    11 При завршување на нарачка потребно е системот автоматски да провери дали има доволно примероци на залиха за сите книги што се наоѓаат во нарачката.
     15При завршување на нарачка потребно е автоматски да се провери дали има доволно примероци на залиха за сите книги што се наоѓаат во нарачката.
    1216
    1317Нарачката не смее да премине во статус ''ZAVRSENA'' доколку за некоја од книгите нема доволно примероци на залиха.
    … …  
    1519Доколку има доволно залиха за сите ставки, количината на залиха на секоја книга автоматски се намалува за количината што е нарачана.
    1620
    17 Ова правило се имплементира на ниво на базата на податоци со тригер, со што проверката важи независно од тоа од каде е направена промената на статусот на нарачката.
     21Ова правило е имплементирано на ниво на базата на податоци со тригер, со што проверката важи независно од тоа од каде е направена промената на статусот на нарачката.
    1822
    1923=== Trigger function ===
    … …  
    6670}}}
    6771
    68 Функцијата прво ги проверува сите ставки од нарачката. Доколку барем една книга нема доволно залиха, се генерира исклучок и промената не се извршува.
    69 
    70 Само доколку сите ставки ја поминат проверката, се извршува намалување на залихата.
     72Функцијата прво ги проверува сите ставки од нарачката. Доколку барем една книга нема доволно залиха, се генерира исклучок и промената на статусот не се извршува.
     73
     74Само доколку сите ставки ја поминат проверката, се извршува автоматско намалување на залихата.
    7175
    7276=== Trigger ===
    73 
    74 Тригерот се активира пред промена на атрибутот ''status'' во релацијата ''naracki''.
    7577
    7678{{{
    … …  
    8284}}}
    8385
    84 Тригерот ја повикува функцијата при промена на статусот на нарачката. Самата функција ја извршува проверката и намалувањето само кога статусот преминува од статус различен од ''ZAVRSENA'' во ''ZAVRSENA''.
     86Тригерот се активира при промена на атрибутот ''status'' на нарачката. Функцијата ја извршува проверката само кога статусот преминува од статус различен од ''ZAVRSENA'' во ''ZAVRSENA''.
    8587
    8688=== Тестирање со доволна залиха ===
    8789
    88 За тестирање беше употребена нарачка која се наоѓаше во статус ''VO_OBRABOTKA''.
    89 
    90 Статусот беше променет со:
     90За тестирање беше употребена нарачка со идентификатор 4 која се наоѓаше во статус ''VO_OBRABOTKA''.
    9191
    9292{{{
    … …  
    9898Нарачката содржеше еден примерок од книгата ''Think and Grow Rich''. Пред завршувањето на нарачката книгата имаше 11 примероци на залиха.
    9999
    100 По успешно завршување на нарачката, залихата автоматски беше намалена на 10 примероци.
     100По успешно завршување на нарачката залихата автоматски беше намалена на 10 примероци.
    101101
    102102Со ова е потврдено дека тригерот правилно ја намалува залихата при успешно завршување на нарачката.
    … …  
    128128Со ова е потврдено дека нарачка не може да биде означена како завршена доколку нема доволно залиха.
    129129
    130 По тестирањето, залихата на книгата беше вратена на претходната вредност:
     130По тестирањето залихата беше вратена:
    131131
    132132{{{
    … …  
    136136}}}
    137137
     138
    138139== Аналитички поглед за продажба по книга ==
    139140
    … …  
    142143За потребите на администраторот и аналитичките извештаи потребно е на едно место да бидат достапни основните информации за продажбата на секоја книга.
    143144
    144 Погледот треба да овозможи приказ на:
    145 
    146 - идентификатор и наслов на книгата;
    147 - моментална количина на залиха;
    148 - вкупен број на продадени примероци;
    149 - вкупен приход;
    150 - број на реализирани нарачки.
     145Потребни се информации за моменталната залиха, бројот на продадени примероци, остварениот приход и бројот на реализирани нарачки.
    151146
    152147За таа цел е креиран погледот ''project.v_prodazba_po_kniga''.
    … …  
    180175}}}
    181176
    182 Погледот ги обединува податоците од релациите ''knigi'', ''sodrzi'' и ''naracki'' и овозможува полесно добивање информации за продажбата.
    183 
    184 За книгите без продажба се добиваат вредности 0 за бројот на продадени примероци и приходот.
    185 
    186 === Тестирање на погледот ===
    187 
    188 Погледот беше тестиран со:
     177Погледот ги обединува податоците од релациите ''knigi'', ''sodrzi'' и ''naracki'' и обезбедува повторно употреблив извор на агрегирани информации за продажбата.
     178
     179=== Тестирање ===
    189180
    190181{{{
    … …  
    194185}}}
    195186
    196 Тестирањето успешно ги прикажа книгите подредени според остварениот приход.
    197 
    198 На пример, во моменталните тест податоци ''Atomic Habits'' има најголем вкупен приход, а книгите за кои нема реализирана продажба се прикажуваат со вредност 0.
     187Погледот успешно ги прикажува податоците за продажбата на книгите подредени според вкупниот приход.
     188
     189
     190== Следење на залихата на книгите ==
     191
     192=== Data requirements description ===
     193
     194За администраторот е важно навремено да може да ги забележи книгите со мала или целосно потрошена залиха.
     195
     196За таа цел е креиран поглед кој покрај моменталната количина на залиха го определува и статусот на залихата.
     197
     198Книгите се класифицираат во три групи:
     199- ''NEMA_ZALIHA'' – кога количината е 0;
     200- ''NISKA_ZALIHA'' – кога количината е од 1 до 5;
     201- ''DOVOLNA_ZALIHA'' – кога количината е поголема од 5.
     202
     203=== View ===
     204
     205{{{
     206CREATE OR REPLACE VIEW project.v_niska_zaliha AS
     207SELECT
     208    k.kniga_id,
     209    k.naslov,
     210    k.kolicina_na_zaliha,
     211    COALESCE(SUM(s.kolicina), 0) AS vkupno_prodadeni,
     212    CASE
     213        WHEN k.kolicina_na_zaliha = 0 THEN 'NEMA_ZALIHA'
     214        WHEN k.kolicina_na_zaliha <= 5 THEN 'NISKA_ZALIHA'
     215        ELSE 'DOVOLNA_ZALIHA'
     216    END AS status_zaliha
     217FROM project.knigi k
     218LEFT JOIN project.sodrzi s
     219    ON k.kniga_id = s.kniga_id
     220LEFT JOIN project.naracki n
     221    ON s.naracka_id = n.naracka_id
     222    AND n.status = 'ZAVRSENA'
     223GROUP BY
     224    k.kniga_id,
     225    k.naslov,
     226    k.kolicina_na_zaliha;
     227}}}
     228
     229=== Тестирање ===
     230
     231{{{
     232SELECT *
     233FROM project.v_niska_zaliha
     234ORDER BY kolicina_na_zaliha ASC;
     235}}}
     236
     237Погледот успешно ја прикажува моменталната залиха, бројот на продадени примероци и соодветниот статус на залихата за секоја книга.
     238
     239Овој поглед може да му помогне на администраторот полесно да идентификува книги за кои е потребно дополнување на залихата.
     240
     241
     242== Препорачување книги според расположение ==
     243
     244=== Data requirements description ===
     245
     246Една од главните функционалности на !BiblioPremium е препорачување книги според моменталното расположение или потреба на корисникот.
     247
     248Бидејќи книгите се поврзани со расположенија преку релацијата ''povrzana_so'', креирана е функција која за избрано расположение ги враќа соодветните книги кои моментално се достапни на залиха.
     249
     250=== Stored function ===
     251
     252{{{
     253CREATE OR REPLACE FUNCTION project.preporacaj_knigi_po_raspolozenie(
     254    p_raspolozenie_id INTEGER
     255)
     256RETURNS TABLE(
     257    kniga_id BIGINT,
     258    naslov VARCHAR,
     259    cena NUMERIC,
     260    kolicina_na_zaliha INTEGER
     261)
     262LANGUAGE plpgsql
     263AS $$
     264BEGIN
     265    RETURN QUERY
     266        SELECT
     267            k.kniga_id,
     268            k.naslov,
     269            k.cena,
     270            k.kolicina_na_zaliha
     271        FROM project.knigi k
     272        JOIN project.povrzana_so ps
     273            ON k.kniga_id = ps.kniga_id
     274        WHERE ps.raspolozenie_id = p_raspolozenie_id
     275          AND k.kolicina_na_zaliha > 0
     276        ORDER BY k.naslov;
     277END;
     278$$;
     279}}}
     280
     281Функцијата прима идентификатор на расположение и ги враќа идентификаторот, насловот, цената и моменталната залиха на сите книги поврзани со избраното расположение.
     282
     283Дополнително, условот ''k.kolicina_na_zaliha > 0'' спречува да се препорачуваат книги кои моментално не се достапни.
     284
     285=== Тестирање ===
     286
     287Функцијата беше тестирана за расположението со идентификатор 1:
     288
     289{{{
     290SELECT *
     291FROM project.preporacaj_knigi_po_raspolozenie(1);
     292}}}
     293
     294Како резултат беа добиени книгите:
     295
     296- ''Atomic Habits''
     297- ''Mindset''
     298- ''Think and Grow Rich''
     299
     300Со ова е потврдено дека функцијата правилно ги користи врските помеѓу книгите и расположенијата и ги враќа само книгите кои имаат достапна залиха.
     301
    199302
    200303== Заклучок ==
    201304
    202 Со имплементацијата на тригерот се обезбедува дополнителна конзистентност на податоците при обработката на нарачките. Базата автоматски спречува завршување на нарачка кога нема доволно залиха и автоматски ја намалува залихата кога нарачката успешно ќе се заврши.
    203 
    204 Со погледот ''v_prodazba_po_kniga'' се обезбедува повторно употреблив извор на агрегирани информации за продажбата и залихите, кој може да се користи за административни и аналитички потреби во !BiblioPremium.
    205 
    206 Овие механизми претставуваат дополнителна логика имплементирана директно во базата на податоци, над основните ограничувања и референцијалниот интегритет дефинирани во претходните фази.
     305Во оваа фаза се имплементирани повеќе механизми на ниво на базата на податоци кои се директно поврзани со деловната логика на !BiblioPremium.
     306
     307Тригерот обезбедува автоматска проверка и намалување на залихата при завршување на нарачка и спречува неконзистентна состојба кога нема доволно примероци.
     308
     309Погледот ''v_prodazba_po_kniga'' обезбедува агрегирани информации за продажбата, додека ''v_niska_zaliha'' овозможува полесно следење на состојбата на залихите.
     310
     311Функцијата ''preporacaj_knigi_po_raspolozenie()'' ја поддржува една од главните функционалности на системот – препорачување достапни книги според избраното расположение.
     312
     313Со овие механизми се воведува дополнителна логика директно во базата на податоци над основните ограничувања и референцијалниот интегритет дефинирани во претходните фази.