Садржај
1 Релационе базе података
1.0 1 Релационе базе података
1.0 2 Релационе базе података - квиз
1.0 3 Веза један према више
1.0 4 Веза један према више - квиз
1.0 5 Веза више према више
1.0 6 Веза више према више - квиз
1.0 7 Алат за пројектовање
1.0 8 СУБП
1.0 9 Креирање базе на други начин
1.0 10 Још неке SQL команде
1.1 1 Упит SELECT
1.1 2 Упит SELECT - упит из једне табеле - задаци
1.1 3 Упит SELECT - упит из једне табеле - квиз
1.1 4 Упит SELECT - функције и подупити - задаци
1.1 5 Упит SELECT - функције и подупити - квиз
1.1 6 Упит SELECT - спајање - задаци
1.1 7 Упит SELECT - спајање - квиз
1.1 8 Упит SELECT - нерешени задаци
1.2 1 База података за библиотеку - креирање базе
1.2 2 БП Библиотека - Упит SELECT - упит из једне табеле - задаци
1.2 3 БП Библиотека - Упит SELECT - упит из једне табеле - нерешени задаци
1.2 4 БП Библиотека - Упит SELECT - спајање - задаци
1.2 5 БП Библиотека - Упит SELECT - спајање - нерешени задаци
1.2 6 БП Библиотека - Упит SELECT - функције и подупити - задаци
1.2 7 БП Библиотека - Упит SELECT - функције и подупити - нерешени задаци
1.3 1 База података за возачке дозволе - креирање базе
1.3 2 БП Возачке дозволе - Дијаграм и подаци - практичан рад
1.3 3 БП Возачке дозволе - Упит SELECT - задаци
1.3 4 БП Возачке дозволе - Упит SELECT - нерешени задаци
1.4 1 БП Филмови - Креирање базе - практични рад
1.4 2 БП Филмови - Дијаграм и подаци - практични рад
1.4 3 БП Филмови - Упит SELECT - задаци
1.4 4 БП Филмови - Упит SELECT - нерешени задаци
2 Писање програма унутар система за управљање базама података
2.0 1 Процедуре и команда INSERT
2.0 2 Процедуре и команде UPDATE и DELETE
2.0 3 Процедуре и команде INSERT, UPDATE, и DELETE - квиз
2.0 4 Процедуре и тестирање програма
2.0 5 Процедуре и упит SELECT
2.0 6 Процедуре и курсор за упит SELECT
2.1 1 Функције и упит SELECT
2.1 2 Процедуре и функције са упитом SELECT - квиз
2.1 3 Процедуре и функције са упитом SELECT из једне табеле - задаци
2.1 4 Процедуре и функције са упитом и групним функцијама - задаци
2.1 5 Процедуре и функције са упитом SELECT са спајањем табела - задаци
2.1 6 Процедуре и функције са упитом - нерешени задаци
2.1 7 Формат XML
2.2 1 База података за библиотеку - Процедуре, функције и поређење различитих решења
2.2 2 Процедуре, функције и поређење различитих решења
2.2 3 Процедуре и функције са упитом SELECT из једне табеле - вежбање
2.2 4 Процедуре и функције са упитом SELECT са спајањем табела - вежбање
2.2 5 Процедуре и функције са упитом и групним функцијама и подупитима - вежбање
2.2 6 Процедуре и функције са упитом SELECT - нерешени задаци
2.3 1 База података за возачке дозволе - процедуре и функције са упитом SELECT - вежбање
2.3 2 База података за возачке дозволе - процедуре и функције - нерешени задаци
2.4 1 База података за филмове - процедуре и функције са упитом SELECT - вежбање
2.4 2 База података за филмове - процедуре и функције - нерешени задаци
3 Писање програма у програмским језицима вишег нивоа
3.0 1 Писање програма у развојном окружењу Visual Studio
3.0 2 Писање програма у развојном окружењу Visual Studio - практичан рад
3.0 3 Писање програма у развојном окружењу Visual Studio - процедуре
3.0 4 Писање програма у развојном окружењу Visual Studio - квиз
3.1 1 Угнежђени упит SELECT унутар програма
3.1 2 Угнежђени упит SELECT унутар програма - задаци
3.1 3 Позив процедуре унутар програма
3.1 4 Позив креиране функције унутар програма
3.1 5 Програм са угнежђеним командама у развојном окружењу Visual Studio - квиз
3.1 6 Програм са угнежђеним упитом SELECT из једне табеле - вежбање
3.1 7 Програм са угњежђеним упитом и групним фунцкијама - вежбање
3.1 8 Програм са угнежђеним упитом SELECT са спајањем табела - вежбање
3.1 9 Програм са класом
3.1 10 Програм са угнежђеним упитом - нерешени задаци
3.1 11 Програм са угнежђеним командама INSERT, UPDATE, и DELETE
3.2 1 База података за библиотеку - програм са угнежђеним упитом SELECT из једне табеле - задаци
3.2 2 База података за библиотеку - програм са угнежђеним упитом SELECT - вежбање
3.2 3 База података за библиотеку - програм са угнежђеним упитом - нерешени задаци
3.3 1 База података за возачке дозволе - програм са угнежђеним упитом SELECT - вежбање
3.3 2 База података за возачке дозволе - програм са угнежђеним упитом - нерешени задаци
3.4 1 База података за филмове - програм са угнежђеним упитом SELECT - вежбање
3.4 2 База података за филмове - програм са угнежђеним упитом - нерешени задаци
4 Друга софтверска решења - СУБП Oracle
4.0 1 Oracle Apex и језик PL/SQL
4.0 2 Језик PL/SQL - задаци
4.0 3 Језик PL/SQL - квиз
4.0 4 Језик PL/SQL – нерешени задаци
4.0 5 Наредбе гранања
4.0 6 Наредбе гранања - нерешени задаци
4.0 7 Наредбе циклуса
4.0 8 Наредбе циклуса - нерешени задаци
4.1 1 База података за библиотеку - практичан рад
4.1 2 Наредба SELECT INTO
4.1 3 Наредба SELECT INTO - zadaci
4.1 4 Наредба SELECT INTO - квиз
4.1 5 Наредба SELECT INTO - вежбање
4.1 6 Наредба SELECT INTO - нерешени задаци
4.2 1 Курсори - Узимање података из више редова
4.2 2 Курсори - задаци
4.2 3 Различити начини да се реши проблем
4.2 4 Курсори - нерешени задаци
4.2 5 Курсор са параметром
4.2 6 Курсор са параметром - задаци
4.2 7 Курсор са параметром - нерешени задаци
4.2 8 Курсори - квиз
4.2 9 Курсори и гранање - задаци
4.2 10 Курсори - вежбање
4.2 11 Тренутне позајмице члана - пример
4.2 12 Спискови књига - пример
4.3 1 Процедуре и функције у СУБП-у Oracle Apex
4.3 2 Процедуре и функције - задаци
4.3 3 Процедуре и функције - нерешени задаци
4.3 4 Позајмице једне књиге - пример
4.3 5 Тренутне позајмице - пример
4.3 6 Процедуре и друге SQL команде
4.3 7 Тригери
4.3 8 Списак свих објеката у бази података
4.4 1 Креирање апликације помоћу алата App Builder
4.4 2 Додатне опције App Builder алата
4.4 3 Покретање апликације
4.4 4 Креирање нових страница у апликацији
4.4 5 Покретање раније креиране процедуре
4.4 6 Алат App Builder и XML
4.5 1 База података за салон аутомобила у СУБП-у Oracle Apex - 1. део
4.5 2 База података за салон аутомобила у СУБП-у Oracle Apex - 2. део
4.5 3 База података за салон аутомобила у СУБП-у Oracle Apex - 3. део
4.5 4 База података за продавницу - нерешени пројектни рад

База података за возачке дозволе - креирање базе

Следи један практичан задатак инспирисан стварним примером из живота у којем се ради са великим количинама података. Креираћемо базу података за евиденцију издатих возачких дозвола.

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

Возачке дозволе су издате у различитим градовима. За град чувамо назив, али је у плану проширење базе и чуваћемо више различитих података као што је, на пример, број становника, број регистрованих возила и слично. Свака дозвола има број дозволе, име и презиме особе, датум издавања и датум до када важи. На дозволи могу да се нађу различите категорије и за сваку је познат датум стицања. Категорије су: AM, A1, A2, A, B1, B, BE, C1, C1E, C, CE, D1, D1E, D, DE, F и M. Свака категорија има неки опис. Најчешћа категорија је категорија В и за њу би опис могао да буде: „Za upravljanje motornim vozilom, čija masa ne prelazi 3500 kg i koja nemaju više od 9 mesta za sedenje“.

Унети у базу податке о свим категоријама и о четири возачке дозволе издате у Београду. Јанко Мировић и Филип Цагић имају само категорију В. Јанкова дозвола има број 001579640, важи од 28. априла 2022. године до 15. марта 2026. године, а категорију је стекао 21. априла 2022. године. Филипова дозвола има број 001579375, важи од 23. септембра 2022. године, када је и стекао В категорију, до 5. марта 2026. године. Душа Вуковић је 3. октобра 1995. године стекла категорије: AM, B1, B, BE, F и M, а има дозволу са бројем 001560375, која важи десет година од датума издавања 8. маја 2014. године. Возачка дозвола са бројем 000123175 припада Браниславу Зорановићу. Дозвола важи десет година, од 17. маја 2020. године када је стекао категорију А2. Осим те категорије, дозвола има и категорију В, која је стечена 15. септембра 2016. године.

На следећој слици је приказан модел базе након чега следе и нека објашњења како се до овог модела дошло.

../_images/slika_131a.jpg

Број возачке дозволе је јединствен, али није најбољи избор за примарни кључ, па ће се увести нови идетификациони број. Због водећих нула, број возачке дозволе је добро да буде текстуални податак фиксиране дужине.

Свака возачка дозвола је издата тачно у једом граду, а у истом граду је издато више возачких дозвола, па је веза између ентитета GRAD и VOZACKA_DOZVOLA један-према-више.

Уз податке о возачкој дозволи се чува и идентификациони број града у којем је издата. Тако ће, уз све податке који описују возачку дозволу коју је добио Бранислав Зорановић, на крају да стоји и број 1, који представља идентификациони број града Београда.

INSERT INTO vozacke_dozvole
(id, broj_dozvole, prezimе, ime, datum_izdavanja, datum_prestanka, id_grada)
VALUES (4, '000123175', 'Zoranovic', 'Branislav', '2020-05-17', '2030-05-17', 1)

Возачка дозвола Јанка Мировића је такође издата у Београду, па је и код њега унет идентификациони број 1 као вредност страног кључа који се односи на место издавања дозволе. Случајност је да је идентификациони број Јанкове возачке дозволе такође 1, али та вредност нема везе са идентификацијом града. Различите табеле за идентификационе бројеве често користе редом вредности 1, 2, 3, 4, и тако даље.

INSERT INTO vozacke_dozvole
(id, broj_dozvole, prezimе, ime, datum_izdavanja, datum_prestanka, id_grada)
VALUES (1, '001579640', 'Mirovic', 'Janko', '2022-04-28', '2026-03-15', 1)

Као што можемо да видимо из датих података, на четири различите возачке дозволе се налази категорија В, а две дозволе имају више од једне категорије. Веза између ентитета VOZACKA_DOZVOLA и KATEGORIJA је више-према-више. То значи да имамо посебан ентитет, односно имаћемо посебну табелу, која ће представљати ову везу. Табела у бази података ће имати комбинацију кључева којом се јасно представља на којој дозволи се налази која категорија.

Уколико Бранислав Зорановић има дозволу на којој има две категорије, у табели kategorije_dozvole ће бити два реда која се односе на ову дозволу. У тим редовима ће бити записане две различите комбинације идентификационог броја возачке дозволе и идентификационих бројева категорија. Уколико је идентификациони број дозволе 4, а идентификациони бројеви категорија В и А2 су редом 6 и 3, а датуми стицања тих категорија су редом 15. септембар 2016. године и 17. мај 2020. године, следе два реда која се уносе у табелу kategorije_dozvole, а односе се на ову једну дозволу и две категорије на њој.

INSERT INTO kategorije_dozvole
(id_dozvole, id_kategorije, datum_sticanja, ogranicenja)
VALUES (4, 6, '2016-09-15', NULL)

INSERT INTO kategorije_dozvole
(id_dozvole, id_kategorije, datum_sticanja, ogranicenja)
VALUES (4, 3, '2020-05-17', NULL)

Креирати базу података за библиотеку употребом алата SQL Server Management Studio.

Кликнути десни тастер миша над Databases у прозору Object Explorer* и изабрати New Database…

../_images/slika_131b.jpg

Унети назив нове базе података и кликнути дугме OK.

../_images/slika_131c.jpg

Новокреирана база података се појавила на списку у прозору Object Explorer. Кликнути дугме New Query испод главног падајућег менија.

../_images/slika_131d.jpg

Прво извршити све CREATE TABLE команде, једну по једну.

Редослед је битан! Пре креирања табеле која има страни кључ неопходно је креирати табелу на коју она показује.

Све команде могу да се истовремено прекопирају, али се свака појединачно прво означи мишем и за сваку означену команду се кликне Execute, као што је приказано на следећој слици.

../_images/slika_131e.jpg

Након сваке успешно извршене команде појави се одговарајућа порука.

../_images/slika_131f.jpg

Након што се свака команда изврши, све табеле ће остати сачуване у бази података за даљу употребу. Фајл SQLQuery1.sql може, а и не мора да се сачува.

Следе све CREATE TABLE команде за табеле базе података за библиотеку.

CREATE TABLE gradovi(
id INT PRIMARY KEY,
naziv VARCHAR(32) NOT NULL
)

CREATE TABLE vozacke_dozvole(
id INT PRIMARY KEY,
broj_dozvole CHAR(9) NOT NULL UNIQUE,
prezime VARCHAR(32) NOT NULL,
ime VARCHAR(32) NOT NULL,
datum_izdavanja DATE NOT NULL,
datum_prestanka DATE NOT NULL,
id_grada INT NOT NULL REFERENCES gradovi(id)
    )


CREATE TABLE kategorije(
id INT PRIMARY KEY,
oznaka VARCHAR(3) NOT NULL UNIQUE,
opis VARCHAR(256)
)

CREATE TABLE kategorije_dozvole(
id_dozvole INT NOT NULL REFERENCES vozacke_dozvole(id),
id_kategorije INT NOT NULL REFERENCES kategorije(id),
datum_sticanja DATE NOT NULL,
ogranicenja VARCHAR(128),
PRIMARY KEY (id_kategorije, id_dozvole)
)

Након што су све табеле креиране, појављују се на списку у прозору Object Explorer. Ако се не виде, потребно је кликнути Refresh.

../_images/slika_131g.jpg

Уколико је прозор за писање команди угашен, кликнути поново дугме New Query испод главног падајућег менија. Све команде могу да се истовремено прекопирају, али се свака појединачно прво означи мишем и за сваку означену команду се кликне Execute.

Након што се свака команда изврши, сви подаци ће остати сачувани у бази података за даљу употребу. Фајл SQLQuery1.sql може, а и не мора да се сачува.

Извршити све INSERT INTO команде, једну по једну. Када редом уносимо податке у све колоне, можемо да изоставимо списак назива колона.

Редослед је битан!

INSERT INTO gradovi
VALUES (1, 'BEOGRAD')

INSERT INTO vozacke_dozvole
VALUES (1, '001579640', 'Mirovic', 'Janko', '2022-04-28', '2026-03-15', 1)

INSERT INTO vozacke_dozvole
VALUES (2, '001579375', 'Cagic', 'Filip', '2022-09-23', '2026-03-05', 1)

INSERT INTO vozacke_dozvole
VALUES (3, '001560375', 'Vukovic', 'Dusa', '2014-05-08', '2024-05-08', 1)

INSERT INTO vozacke_dozvole
VALUES (4, '000123175', 'Zoranovic', 'Branislav', '2020-05-17', '2030-05-17', 1)

INSERT INTO kategorije
VALUES (1, 'AM', NULL)

INSERT INTO kategorije
VALUES (2, 'A1', NULL)

INSERT INTO kategorije
VALUES (3, 'A2', NULL)

INSERT INTO kategorije
VALUES (4, 'A', NULL)

INSERT INTO kategorije
VALUES (5, 'B1', NULL)

INSERT INTO kategorije
VALUES (6, 'B',
'Za upravljanje motornim vozilom, čija masa ne prelazi 3500 kg i koja nemaju više od 9 mesta za sedenje')

INSERT INTO kategorije
VALUES (7, 'BE', NULL)

INSERT INTO kategorije
VALUES (8, 'C1', NULL)

INSERT INTO kategorije
VALUES (9, 'C1E', NULL)

INSERT INTO kategorije
VALUES (10, 'C', NULL)

INSERT INTO kategorije
VALUES (11, 'CE', NULL)

INSERT INTO kategorije
VALUES (12, 'D1', NULL)

INSERT INTO kategorije
VALUES (13, 'D1E', NULL)

INSERT INTO kategorije
VALUES (14, 'D', NULL)

INSERT INTO kategorije
VALUES (15, 'DE', NULL)

INSERT INTO kategorije
VALUES (16, 'F', NULL)

INSERT INTO kategorije
VALUES (17, 'M', NULL)

INSERT INTO kategorije_dozvole
VALUES (1, 6, '2022-04-21', NULL)

INSERT INTO kategorije_dozvole
VALUES (2, 6, '2022-09-23', NULL)

INSERT INTO kategorije_dozvole
VALUES (3, 1, '1995-10-03', NULL)

INSERT INTO kategorije_dozvole
VALUES (3, 6, '1995-10-03', NULL)

INSERT INTO kategorije_dozvole
VALUES (3, 5, '1995-10-03', NULL)

INSERT INTO kategorije_dozvole
VALUES (3, 7, '1995-10-03', NULL)

INSERT INTO kategorije_dozvole
VALUES (3, 17, '1995-10-03', NULL)

INSERT INTO kategorije_dozvole
VALUES (3, 16, '1995-10-03', NULL)

INSERT INTO kategorije_dozvole
VALUES (4, 6, '2016-09-15', NULL)

INSERT INTO kategorije_dozvole
VALUES (4, 3, '2020-05-17', NULL)
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+