| 3 | | Во оваа фаза се имплементирани напредни механизми на ниво на базата на податоци за одржување на конзистентноста на податоците и за обезбедување дополнителни аналитички информации во системот !BiblioPremium. |
| 4 | | |
| 5 | | Имплементацијата вклучува тригер функција, тригер и поглед (VIEW). |
| | 3 | Во оваа фаза се имплементирани напредни механизми на ниво на базата на податоци за одржување на конзистентноста на податоците, автоматска контрола на залихата и поддршка на препораките и аналитичките функционалности во системот !BiblioPremium. |
| | 4 | |
| | 5 | Имплементацијата вклучува: |
| | 6 | - тригер функција и тригер за автоматска проверка и намалување на залихата; |
| | 7 | - аналитички поглед за продажба по книга; |
| | 8 | - поглед за следење на состојбата на залихата; |
| | 9 | - функција за препорачување книги според избрано расположение. |
| 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 | {{{ |
| | 206 | CREATE OR REPLACE VIEW project.v_niska_zaliha AS |
| | 207 | SELECT |
| | 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 |
| | 217 | FROM project.knigi k |
| | 218 | LEFT JOIN project.sodrzi s |
| | 219 | ON k.kniga_id = s.kniga_id |
| | 220 | LEFT JOIN project.naracki n |
| | 221 | ON s.naracka_id = n.naracka_id |
| | 222 | AND n.status = 'ZAVRSENA' |
| | 223 | GROUP BY |
| | 224 | k.kniga_id, |
| | 225 | k.naslov, |
| | 226 | k.kolicina_na_zaliha; |
| | 227 | }}} |
| | 228 | |
| | 229 | === Тестирање === |
| | 230 | |
| | 231 | {{{ |
| | 232 | SELECT * |
| | 233 | FROM project.v_niska_zaliha |
| | 234 | ORDER 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 | {{{ |
| | 253 | CREATE OR REPLACE FUNCTION project.preporacaj_knigi_po_raspolozenie( |
| | 254 | p_raspolozenie_id INTEGER |
| | 255 | ) |
| | 256 | RETURNS TABLE( |
| | 257 | kniga_id BIGINT, |
| | 258 | naslov VARCHAR, |
| | 259 | cena NUMERIC, |
| | 260 | kolicina_na_zaliha INTEGER |
| | 261 | ) |
| | 262 | LANGUAGE plpgsql |
| | 263 | AS $$ |
| | 264 | BEGIN |
| | 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; |
| | 277 | END; |
| | 278 | $$; |
| | 279 | }}} |
| | 280 | |
| | 281 | Функцијата прима идентификатор на расположение и ги враќа идентификаторот, насловот, цената и моменталната залиха на сите книги поврзани со избраното расположение. |
| | 282 | |
| | 283 | Дополнително, условот ''k.kolicina_na_zaliha > 0'' спречува да се препорачуваат книги кои моментално не се достапни. |
| | 284 | |
| | 285 | === Тестирање === |
| | 286 | |
| | 287 | Функцијата беше тестирана за расположението со идентификатор 1: |
| | 288 | |
| | 289 | {{{ |
| | 290 | SELECT * |
| | 291 | FROM project.preporacaj_knigi_po_raspolozenie(1); |
| | 292 | }}} |
| | 293 | |
| | 294 | Како резултат беа добиени книгите: |
| | 295 | |
| | 296 | - ''Atomic Habits'' |
| | 297 | - ''Mindset'' |
| | 298 | - ''Think and Grow Rich'' |
| | 299 | |
| | 300 | Со ова е потврдено дека функцијата правилно ги користи врските помеѓу книгите и расположенијата и ги враќа само книгите кои имаат достапна залиха. |
| | 301 | |
| 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 | Со овие механизми се воведува дополнителна логика директно во базата на податоци над основните ограничувања и референцијалниот интегритет дефинирани во претходните фази. |