Skip to content

Commit

Permalink
recenzija prvi deo
Browse files Browse the repository at this point in the history
  • Loading branch information
dlutov committed Nov 20, 2023
1 parent 6756c29 commit c046345
Show file tree
Hide file tree
Showing 44 changed files with 222 additions and 127 deletions.
4 changes: 2 additions & 2 deletions _sources/0_0_Uputstvo/0_3_Praktičan i projektni rad.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
- анализа података писањем упита SELECT или формирање неке друге команде језика SQL,
- писање програма који користи креирану базу у који је укључен претходно формиран упит SELECT или више команди језика SQL.

Узмимо, на пример, да библиотека жели да провери колико има примерака књига чији је издавач СЕТ да би размотрили да ли да набављају још књига овог издавача. За сваки примерак је пожељно да се види и која је књига у питању да би се размотрило могуће додатно набављање и појединих наслова овог издавача који се већ налазе у библиотеци. Потребно је креирати рачунарски програм.
Узмимо, на пример, да библиотека жели да провери колико има примерака књига чији је издавач СЕТ да би размотрили да ли да набављају још књига овог издавача. За сваки примерак је пожељно да се види и која је књига у питању да би се размотрило могуће додатно набављање и појединих наслова овог издавача који се већ налазе у библиотеци. Потребно је креирати одговарајући рачунарски програм.

На основу овог захтева долазимо прво до следећег задатка. Написати упит којим се приказују инвентарски бројеви и назив књига издавача чији је назив CET. Изменити заглавља колона у приказу резултата тако да буду редом „Primerak“ и „Naziv knjige“.
На основу овог захтева долазимо прво до следећег задатка. Написати упит којим се приказују инвентарски бројеви и називи књига издавача чији је назив CET. Изменити заглавља колона у приказу резултата тако да буду редом „Primerak“ и „Naziv knjige“.

Када се детаљно анализирају потребни подаци и из којих табела их узимамо, добијамо решење, тј. упит SELECT.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@

2. У току месеца маја је акција и библиотека поклања по једну књигу својим верним члановима који тог месеца дођу да позајме књиге. Тренутно је у библиотеку дошла Милица Зорановић и библиотекар жели да провери како изгледа њена историја чланства, тј. да ли је већ дужи низ година члан библиотеке.

**Задатак:** Написати упит којим се приказује списак година када је Милица Зорановић била члан библиотеке, тј. за које је платилра чланарину.
**Задатак:** Написати упит којим се приказује списак година када је Милица Зорановић била члан библиотеке, тј. за које је платила чланарину.

.. image:: ../../_images/slika_124b.jpg
:width: 800
:align: center

Име и презиме члана се налази у табели *clanovi*, а година када је плаћена чланарина се налази у табели *clanarine*. Заједничко за ове табеле је колона *broj_clanske_karte* по којем можемо да их повежемо.
Име и презиме члана се налази у табели *clanovi*, а година када је плаћена чланарина се налази у табели *clanarine*. Заједничко за ове табеле је колона *broj_clanske_karte* по којој можемо да их повежемо.

::

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,16 @@
GROUP BY ime, prezime
ORDER BY ime, prezime

Уколико два члана имају исто име и презиме, овај упит ће за те чланове дати погрешне податке зато што ће их посматрати као једну особу. Упит може да се прошири тако да се приказује и број чланске карте.

::

SELECT clanovi.broj_clanske_karte, ime, prezime, COUNT(*)
FROM kazne JOIN clanovi
ON (kazne.broj_clanske_karte=clanovi.broj_clanske_karte)
GROUP BY clanovi.broj_clanske_karte, ime, prezime
ORDER BY clanovi.broj_clanske_karte, ime, prezime

**Задатак 4:** Написати упит којим се приказују имена и презимена чланова, уз број плаћених казни, који имају више од једне плаћене казне. Списак уредити по члановима.

::
Expand All @@ -85,6 +95,8 @@
HAVING COUNT(*)>1
ORDER BY ime, prezime

Ако именујемо последњу колону као, на пример, *br_kazni*, у делу HAVING не би могло да пише *br_kazni>1* јер се именовање колона у резултату упита врши након издвајања података.

**Задатак 5:** Написати упит који враћа име и презиме члана који је платио највећи износ казне до сада.

Под претпоставком да висина износа казне зависи од броја дана колико се каснило са враћањем књиге, решење овог упита може да издвоји члана или чланове са неодговорним понашањем.
Expand Down Expand Up @@ -118,11 +130,13 @@
ON (clanovi.broj_clanske_karte=clanarine.broj_clanske_karte)
WHERE ime='Milica' AND prezime='Zoranovic'

Ако би постојала два или више чланова са овим именом и презименом добио би се укупан резултат за све кориснике са тим именом и презименом.

.. questionnote::

3. Библиотека разматра да наручи још књига Завода за уџбенике. Да би донели ту одлуку, потребно је да се види колико су књиге овог издавача тражене.

**Задатак 1:** Написати упит којим се приказује укупан број позајмице књига чији је издавач Завод за уџбенике.
**Задатак 1:** Написати упит којим се приказује укупан број позајмица књига чији је издавач Завод за уџбенике.

::

Expand Down Expand Up @@ -151,6 +165,18 @@

Овај извештај нам даје више података од претходног, зато што имамо јасан преглед и које књиге ове издавачке куће су тражене.

Ако постоји више књига са истим називом, нећемо добити исправне податке. Упит може да се допуни тако да се приказује идентификациони број књиге који ће бити укључен и у груписање.

::

SELECT knjige.id_knjige, knjige.naziv, COUNT(*)
FROM pozajmice JOIN primerci
ON (pozajmice.inventarski_broj=primerci.inventarski_broj)
JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN izdavaci ON (knjige.id_izdavaca=izdavaci.id)
WHERE izdavaci.naziv='Zavod za udzbenike'
GROUP BY knjige.id_knjige, knjige.naziv

**Задатак 3:** Написати упит којим се приказује за сваког издавача укупан број позајмица његових књига.

::
Expand Down Expand Up @@ -244,7 +270,7 @@
::

SELECT DISTINCT ime+' '+prezime
ROM clanovi JOIN pozajmice ON (pozajmice.broj_clanske_karte=clanovi.broj_clanske_karte)
FROM clanovi JOIN pozajmice ON (pozajmice.broj_clanske_karte=clanovi.broj_clanske_karte)
JOIN primerci ON (pozajmice.inventarski_broj=primerci.inventarski_broj)
WHERE id_knjige =ANY (
SELECT id_knjige
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,3 +197,5 @@
ON (kategorije_dozvole.id_dozvole=vozacke_dozvole.id)
JOIN kategorije ON (kategorije_dozvole.id_kategorije=kategorije.id)
WHERE oznaka='B' AND ime='Branislav' AND prezime='Zoranovic')

Када би постојале две особе са именом и презименом Бранислав Зораноић овај упит не би био коректан зато што би подупит вратио више вредности. Једно од могућих проширења је да се користи <ALL пре подупита.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

Приказани пример базе података за колекцију филмова ћемо касније употребити тако што ћемо креирати програме у којима ћемо јој приступати.

На следећој слици је приказан модел базе података у којој чувамо основне податке о филмовима, жанровима и глумцима.
На следећој слици је приказан модел базе података у којој чувамо основне податке о филмовима, жанровима и глумцима. Ради једноставности базе података, име и презиме глумца чувамо у једном пољу. Иако је могуће да два глумца имају исто име и презиме, глумци често узимају уметничка имена, баш да би били јединствени, па ћемо из тог разлога у задацима сматрати да је врло вероватно да је име глумца јединствено. Исто тако ћемо у задацима претпоставити да је име филма врло вероватно јединствено. Ово нећемо поставити као ограничења приликом креирања табела управо из разлога што, изузетно ретко, може да се догоди да се два филма зову исто, као и да два глумца имају исто име и презиме.

.. image:: ../../_images/slika_141a.jpg
:width: 400
Expand Down
10 changes: 5 additions & 5 deletions _sources/1_0_Relacione baze podataka/1_1_Tabele_lekcija.rst
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@
:width: 200
:align: center

Атрибути се обележавају једним од три симбола:
Атрибути могу да се обележе следећим симболима са одређеним значењима:

- тарабица – примарни јединствени идентификатор који ће да буде примарни кључ PRIMARY KEY у табели (подразумева да мора да буде попуњен и да мора да има јединствену вредност),
- звездица – обавезно мора да се унесе, одговара ограничењу NOT NULL у табели,
- кружић – опционо, овај податак може, али не мора да се унесе у базу.
- тарабица – примарни јединствени идентификатор на основу којег се дефинише примарни кључ PRIMARY KEY у табели (подразумева да мора да буде попуњен и да мора да има јединствену вредност),
- звездица – обавезно мора да се унесе, одговара ограничењу NOT NULL у табели,
- кружић – опционо, овај податак може, али не мора да се унесе у базу.

.. infonote::

Expand All @@ -109,7 +109,7 @@
INSERT INTO izdavaci
VALUES (2, 'CET', 'Knez Mihailova 6, Beograd', 'http://cet.rs/')

Уколико, међутим, хоћемо да унесемо податке у другачијем редоследу, или хоћемо да изоставио податак који можемо да изоставимо (колона нема NOT NULL ограничење), морамо да наведемо одговарајући списак колона. Следе примери.
Уколико, међутим, хоћемо да унесемо податке у другачијем редоследу, или хоћемо да изоставимо податак који можемо да изоставимо (колона нема NOT NULL ограничење), морамо да наведемо одговарајући списак колона. Следе примери.

::

Expand Down
13 changes: 11 additions & 2 deletions _sources/1_0_Relacione baze podataka/1_21_Upit SELECT_zadaci.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

.. suggestionnote::

Ево неколико примера задатака који се решавају писањем упита SELECT у оквиру базе података за колекцију филмова, која може да се посматра као део базе података неке онлајн платформе за пуштање филмова. Након ових решених следи већа група нерешених задатака..
Ево неколико примера задатака који се решавају писањем упита SELECT у оквиру базе података за колекцију филмова, која може да се посматра као део базе података неке онлајн платформе за пуштање филмова. Након ових решених следи већа група нерешених задатака.

Приказани примери могу да буду садржани, у виду угњеждених упита, у програмима помоћу којих приступамо бази података. Касније у материјалима ћемо неке од њих и употребити унутар програмског кода писаног другим програмским језиком.

Expand Down Expand Up @@ -96,6 +96,15 @@
:width: 500
:align: center

Ако може да се догоди да два или више глумаца имају исто име и презиме, потребно је да се упит прошири идентификационим бројм глумца.

::

SELECT glumci.id_glumca, ime, COUNT(id_filma)
FROM lista_glumaca JOIN glumci
ON (lista_glumaca.id_glumca=glumci.id_glumca)
GROUP BY glumci.id_glumca, ime

.. questionnote::

6. Написати упит којим се приказују само глумци који глуме у више филмова које имамо у колекцији.
Expand All @@ -114,7 +123,7 @@

.. questionnote::

7. Написати упит којим се приказују различити жанрови у којима је глумио Harrison Ford.
7. 7. Написати упит којим се приказује у колико различитих жанрова је глумио Harrison Ford.

Како до жанра долазимо на основу филмова у којима је глумио, може да се деси да је глумио у неколико филмова истог жанра, па је неопходно употребити реч DISTINCT приликом пребројавања.

Expand Down
4 changes: 2 additions & 2 deletions _sources/1_0_Relacione baze podataka/1_2_Tabele_kviz.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
:answer_b: Не
:correct: a

Приликом пројектовања предвидимо ентитет за сваку табелу коју ћемо имати у релационој бази података. Атрибути тог ентитета ће бити колоне табеле у бази.
Приликом пројектовања предвиђамо ентитет за сваку табелу коју ћемо имати у релационој бази података. Атрибути тог ентитета ће бити колоне табеле у бази.

.. quizq::

Expand Down Expand Up @@ -70,7 +70,7 @@
:answer_b: Не
:correct: b

Ограничење PRIMERY KEY покрива или NOT NULL или UNIQUE, али не мора оба.
Ограничење PRIMARY KEY -> подразумева или ограничење NOT NULL или ограничење UNIQUE, али не мора оба.

.. quizq::

Expand Down
Loading

0 comments on commit c046345

Please sign in to comment.