220 | | create index idx_vozenje_inl_id on vozenje(inl_id); |
221 | | }}} |
222 | | }}} |
223 | | {{{#!div |
224 | | {{{#!sql |
225 | | create index idx_vozenje_pnl_id on vozenje(pnl_id); |
226 | | }}} |
227 | | }}} |
228 | | {{{#!div |
229 | | {{{#!sql |
230 | | create index idx_vozenje_patnik_k_id on vozenje(patnik_k_id); |
231 | | }}} |
232 | | }}} |
233 | | {{{#!div |
234 | | {{{#!sql |
235 | | create index idx_vozenje_hour on vozenje(extract(year from vozenje_start)); |
| 224 | create index idx_vozenje_inl_id on vozenje(inl_id); - како резултат на join и inl_id foreign key |
| 225 | }}} |
| 226 | }}} |
| 227 | {{{#!div |
| 228 | {{{#!sql |
| 229 | create index idx_vozenje_pnl_id on vozenje(pnl_id); - како резултат на join и pnl_id foreign key |
| 230 | }}} |
| 231 | }}} |
| 232 | {{{#!div |
| 233 | {{{#!sql |
| 234 | create index idx_vozenje_patnik_k_id on vozenje(patnik_k_id); - како резултат на join и patnik_k_id foreign key |
| 235 | }}} |
| 236 | }}} |
| 237 | {{{#!div |
| 238 | {{{#!sql |
| 239 | create index idx_vozenje_hour on vozenje(extract(year from vozenje_start)); - како резултат на честото групирање и сортирање по година изведено од датумот на започнато возење |
| 525 | |
| 526 | = Релациона алгебра = |
| 527 | |
| 528 | === 1. Број казнети според линија секоја година === |
| 529 | |
| 530 | {{{#!div |
| 531 | {{{#!sql |
| 532 | τ_{godina, linija.li_ime} ( |
| 533 | π_{godina, linija.li_ime, broj_kazni} ( |
| 534 | γ_{EXTRACT_YEAR(kazna.kz_datum) → godina, linija.li_ime; COUNT(*) → broj_kazni} ( |
| 535 | linija ⨝ istanca_na_linija ⨝ kontroli ⨝ kazna |
| 536 | ) |
| 537 | ) |
| 538 | ) |
| 539 | }}} |
| 540 | }}} |
| 541 | |
| 542 | === 2. Најголем број возења по интервал од 1 час според линија за секоја година === |
| 543 | |
| 544 | {{{#!div |
| 545 | {{{#!sql |
| 546 | τ_godina ( |
| 547 | π_godina, li_ime, interval_1h, broj_vozenja ( |
| 548 | |
| 549 | σ_(godina, li_ime, broj_vozenja) ∈ ( |
| 550 | π_godina, li_ime, max_broj_vozenja ( |
| 551 | γ_godina, li_ime; MAX(broj_vozenja) → max_broj_vozenja ( |
| 552 | γ_EXTRACT_YEAR(v.vozenje_start)::int → godina, |
| 553 | li.li_ime, |
| 554 | TO_CHAR(EXTRACT(HOUR FROM v.vozenje_start), '00') || ':00 - ' || |
| 555 | TO_CHAR(EXTRACT(HOUR FROM (v.vozenje_start + INTERVAL '1 hour')), '00') || ':00' |
| 556 | → interval_1h; |
| 557 | COUNT(*) → broj_vozenja ( |
| 558 | Linija ⨝ InstancaNaLinija ⨝ Vozenje |
| 559 | ) |
| 560 | ) |
| 561 | ) |
| 562 | ) |
| 563 | ) ( |
| 564 | γ_EXTRACT_YEAR(v.vozenje_start)::int → godina, |
| 565 | li.li_ime, |
| 566 | TO_CHAR(EXTRACT(HOUR FROM v.vozenje_start), '00') || ':00 - ' || |
| 567 | TO_CHAR(EXTRACT(HOUR FROM (v.vozenje_start + INTERVAL '1 hour')), '00') || ':00' |
| 568 | → interval_1h; |
| 569 | COUNT(*) → broj_vozenja ( |
| 570 | Linija ⨝ InstancaNaLinija ⨝ Vozenje |
| 571 | ) |
| 572 | ) |
| 573 | ) |
| 574 | ) |
| 575 | }}} |
| 576 | }}} |
| 577 | |
| 578 | === 3. Профит од казни и билети за секоја година === |
| 579 | |
| 580 | {{{#!div |
| 581 | {{{#!sql |
| 582 | τ_godina ( |
| 583 | γ_godina; SUM(COALESCE(kz_iznos,0)) + SUM(COALESCE(tb_cena,0)) → vkupen_promet ( |
| 584 | ( |
| 585 | π_EXTRACT_YEAR(kz.kz_datum)::int → godina, |
| 586 | kz.kz_iznos, |
| 587 | NULL → tb_cena ( |
| 588 | σ_kz.kz_plateno = true ∧ kz.kz_datum IS NOT NULL ∧ kz.kz_datum_plateno IS NOT NULL ∧ |
| 589 | EXTRACT(YEAR FROM kz.kz_datum) = EXTRACT(YEAR FROM kz.kz_datum_plateno) (Kazna) |
| 590 | ) |
| 591 | ) |
| 592 | ∪ |
| 593 | ( |
| 594 | π_EXTRACT_YEAR(b.b_datum_na_kupuvanje)::int → godina, |
| 595 | NULL → kz_iznos, |
| 596 | tb.tb_cena ( |
| 597 | (Bilet ⨝ TipBilet) |
| 598 | ) |
| 599 | ) |
| 600 | |
| 601 | ) |
| 602 | ) |
| 603 | }}} |
| 604 | }}} |