| 298 | | = Сценарио 1 - Плаќање преку metamusk = |
| 299 | | |
| 300 | | |
| 301 | | |
| 302 | | |
| 303 | | |
| 304 | | |
| 305 | | |
| 306 | | |
| 307 | | |
| 308 | | |
| 309 | | |
| 310 | | |
| 311 | | |
| | 298 | = Сценарио 2 - Преглед на плаќањата од страна на родител = |
| | 299 | За родителот да може да ги види своите плаќања за сите соопштенија, мора базата да филтрира според родител ид. |
| | 300 | |
| | 301 | Пример: Ги зимаме сите плаќања за родителот со ид 9c8a9a5c-d96f-47a6-9611-d6ad4233fa4f: |
| | 302 | {{{ |
| | 303 | SELECT p.id, p.status, p.tx_hash, p.iznos, p.valuta, p.plateno_Na, p.platenoOdRoditel_id, p.soopstenie_za_plakjanje_id, p.created_at, |
| | 304 | k.ime, k.prezime |
| | 305 | FROM plakjanje p |
| | 306 | JOIN Korisnik k ON k.id = p.platenoOdRoditel_id |
| | 307 | WHERE p.platenoOdRoditel_id = '9c8a9a5c-d96f-47a6-9611-d6ad4233fa4f' |
| | 308 | }}} |
| | 309 | |
| | 310 | |
| | 311 | Доколку го анализираме овој Query: |
| | 312 | |
| | 313 | {{{ |
| | 314 | Nested Loop (cost=4.58..23.57 rows=4 width=160) (actual time=0.049..0.053 rows=4 loops=1) |
| | 315 | -> Index Scan using korisnik_pkey on korisnik k (cost=0.28..8.29 rows=1 width=32) (actual time=0.023..0.024 rows=1 loops=1) |
| | 316 | Index Cond: (id = '9c8a9a5c-d96f-47a6-9611-d6ad4233fa4f'::uuid) |
| | 317 | -> Bitmap Heap Scan on plakjanje p (cost=4.31..15.24 rows=4 width=144) (actual time=0.020..0.020 rows=4 loops=1) |
| | 318 | Recheck Cond: (platenoodroditel_id = '9c8a9a5c-d96f-47a6-9611-d6ad4233fa4f'::uuid) |
| | 319 | Heap Blocks: exact=1 |
| | 320 | -> Bitmap Index Scan on plakjanje_platenoodroditel_id_soopstenie_za_plakjanje_id_key (cost=0.00..4.31 rows=4 width=0) (actual time=0.009..0.009 rows=4 loops=1) |
| | 321 | Index Cond: (platenoodroditel_id = '9c8a9a5c-d96f-47a6-9611-d6ad4233fa4f'::uuid) |
| | 322 | Planning Time: 0.177 ms |
| | 323 | Execution Time: 0.092 ms |
| | 324 | }}} |
| | 325 | |
| | 326 | Можеме да видиме дека |
| | 327 | * Planning Time е: 0.177 ms |
| | 328 | * Execution Time: 0.092 ms |
| | 329 | * Начин на скенирање: |
| | 330 | * * Index scan: Се користи korisnik_pkey |
| | 331 | * * Bitmap heap scan: Преку platenoOdRoditelId |
| | 332 | * * Bitmap index scan: Со користење на plakjanje_platenoodroditel_id_soopstenie_za_plakjanje_id_key |
| | 333 | * Се користи index за наставникот кој го внел присуството: evidentiranood_id |
| | 334 | * Се користи index за часот за кој е присуството. |
| | 335 | |
| | 336 | Но, за овој query не креиравме никаков индекс, но сепак се користи индекс. |
| | 337 | Ова е композитен индекс кој доаѓа од користење на UNIQUE constraint-от. |
| | 338 | |
| | 339 | Односно овој DDL: |
| | 340 | {{{ |
| | 341 | CREATE TABLE Plakjanje ( |
| | 342 | id UUID PRIMARY KEY DEFAULT gen_random_uuid (), |
| | 343 | status payment_status NOT NULL, |
| | 344 | tx_hash VARCHAR(100) UNIQUE, |
| | 345 | valuta VARCHAR(10) NOT NULL, |
| | 346 | plateno_Na TIMESTAMP, |
| | 347 | iznos DECIMAL(38, 18) NOT NULL, |
| | 348 | platenoOdRoditel_Id UUID NOT NULL, |
| | 349 | soopstenie_za_plakjanje_id UUID NOT NULL, |
| | 350 | created_at TIMESTAMP DEFAULT now(), |
| | 351 | UNIQUE ( |
| | 352 | platenoOdRoditel_Id, |
| | 353 | soopstenie_za_plakjanje_id |
| | 354 | ), |
| | 355 | CONSTRAINT chk_tx_hash_when_paid CHECK ( |
| | 356 | ( |
| | 357 | status = 'KREIRANO' |
| | 358 | AND tx_hash IS NULL |
| | 359 | ) |
| | 360 | OR ( |
| | 361 | status IN ( |
| | 362 | 'TX_SUBMITTED', |
| | 363 | 'ODOBRENO', |
| | 364 | 'ZAVRSENO', |
| | 365 | 'FAILED' |
| | 366 | ) |
| | 367 | AND tx_hash IS NOT NULL |
| | 368 | ) |
| | 369 | ), |
| | 370 | FOREIGN KEY (soopstenie_za_plakjanje_id) REFERENCES SoopstenieZa_Plakjanje (id), |
| | 371 | FOREIGN KEY (platenoOdRoditel_Id) REFERENCES Roditel (id) |
| | 372 | ); |
| | 373 | }}} |
| | 374 | |
| | 375 | |
| | 376 | |
| | 377 | |
| | 378 | |
| | 379 | |
| | 380 | |
| | 381 | |
| | 382 | |
| | 383 | |