You are on page 1of 32

Univerzitet u Novom Sadu

Tehnički fakultet „Mihajlo Pupin“


Zrenjanin

Booking
Arhitektura sistema za rukovanje bazama podataka

Profesor: Prof. dr Biljana Radulović Student: Dušan Lukić


Asistent: Msc Aleksandra Stojkov Broj indeksa: SI 15/20

Zrenjanin, 2022.
SADRŽAJ

1. UVOD - karatak opis sistema za koji se radi baza podataka, osnovne napomene……………..1
2. Kreiranje baze podataka..............................................................................................................2
2.1 DLL (Data Definition Language) SQL:................................................................................2
2.2 Prikaz šeme baze podataka (dijagram tabela sa poveznicima):...........................................10
2.3 Prikaz DDL SQL skripta:....................................................................................................11
3. Manipulacija podacima i elementarno ažuriranje baze podataka..............................................17
3.1 INSERT...............................................................................................................................17
3.2 UPDATE.............................................................................................................................22
3.3 DELETE..............................................................................................................................22
3.4 SELECT...............................................................................................................................22
3.5 POGLED.............................................................................................................................25
3.6 USKLADIŠTENA PROCEDURA......................................................................................26
3.7 OKIDAČ..............................................................................................................................27
4. Rad sa korisnicima baze podataka............................................................................................29
5. Obrada transakcija i zaključavanje baze podataka....................................................................31
6. Opis korišćenog softvera i alata za rukovanje bazama podataka..............................................34
7. Literatura...................................................................................................................................35
1. UVOD - kratak opis sistema za koji se radi baza podataka,
osnovne napomene
U ovom seminarskom radu biće prikazani koraci za kreiranje baze podataka za Booking.com.
Navedena baza prikazuje glavnu svrhu website-a ‘’Booking.com’’ koristeći neke od
najosnovnijih podataka potrebnih za rezervaciju objekta.

Ona sadrži tabele: gost, rezervacija, plaćanje, smeštajna jedinica, objekat, destinacija,
objekat_destinacija (nastala vezom M:M), filter, filter_objekta (nastala vezom M:M). Gost moze
napraviti više rezervacija sa kojima je povezano plaćanje. Objekat predstavlja fizički objekat kao
što je hotel, apartman, vila, kamp (to su tipovi objekta) i svaki objekat može imati jednu ili više
smeštajnih jedinica (jedna soba, dvokrevetna soba, dupleks, itd–vrstas meštaja). Gost rezerviše
smeštajnu jedinicu.

Objekat i destinacija su povezane vezom više prema više zato sto jedan objekat može da se
nalazi u više destinacija. Primer za ovo bi bilo da se jedan objekat istovremeno nalazi i u Evropi,
Srbiji, Vojvodini, Zrenjaninu (a svaki od tih pojmova predstavlja pojedinačnu destinaciju u
bazi). Naravno, jedna destinacija može imati više objekata. Slična logika stoji i iza tabela filter i
filter_objekta. Filter predstavlja nešto po čemu korisnici website-a booking.com često filtriraju
svoje pretrage. Na primer – filter za sve objekte koji imaju wifi, spa centar, obezbeđuju
besplatno otkazivanje... Tako, jedan objekat može imati više filtera i jedan filter može da se
primeni za više objekata.

Napomena: u tabeli objekat se nalazi atribut ’lokacija’ koji predstavlja lokaciju objekta na mapi.
To možda narušava pravilo prve normalne forme, jer se u suštini lokacija može razložiti na
ulicu, broj, mesto...Ali, u ovom slučaju je postavljena tako jer je tako urađeno na website-u
booking.com, gde se ne vidi svuda jasna razlika između datih pojmova.
2. Kreiranje baze podataka
2.1. DLL (Data Definition Language) SQL:
o CREATE (tabele, baza podataka, indeksi, ključevi, relacije)
-- phpMyAdmin SQL Dump
-- version 5.1.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Mar 19, 2022 at 01:06 AM
-- Server version: 10.4.22-MariaDB
-- PHP Version: 8.0.13

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";


START TRANSACTION;
SET time_zone = "+00:00";
Listing 1: Pocetak transakcije, osnovni podaci koji se generisu

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;


/*!40101 SET
@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION
*/;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `booking.com`
--

-- --------------------------------------------------------

--
-- Table structure for table `destinacija`
--

CREATE TABLE `destinacija` (


`id_destinacije` int(10) UNSIGNED NOT NULL,
`naziv_destinacije` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Table structure for table `filter`
--

CREATE TABLE `filter` (


`id_filtera` int(10) UNSIGNED NOT NULL,
`naziv` varchar(35) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------

--
-- Table structure for table `filter_objekta`
--

CREATE TABLE `filter_objekta` (


`id_objekta` int(10) UNSIGNED NOT NULL,
`id_filtera` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Table structure for table `gost`
--

CREATE TABLE `gost` (


`id_gosta` int(10) UNSIGNED NOT NULL,
`ime` varchar(25) NOT NULL,
`prezime` varchar(30) NOT NULL,
`email` varchar(40) NOT NULL,
`broj_telefona` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Table structure for table `objekat`
--

CREATE TABLE `objekat` (


`id_objekta` int(10) UNSIGNED NOT NULL,
`naziv` varchar(30) NOT NULL,
`tip_objekta` varchar(30) NOT NULL,
`broj_smestajnih_jedinica` int(3) NOT NULL,
`mesto` varchar(40) NOT NULL,
`lokacija` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Table structure for table `objekat_destinacija`
--

CREATE TABLE `objekat_destinacija` (


`id_destinacije` int(10) UNSIGNED NOT NULL,
`id_objekta` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------
--
-- Table structure for table `placanje`
--

CREATE TABLE `placanje` (


`id_placanja` int(10) UNSIGNED NOT NULL,
`id_rezervacije` int(10) UNSIGNED NOT NULL,
`tip_placanja` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Table structure for table `rezervacija`
--

CREATE TABLE `rezervacija` (


`id_rezervacije` int(10) UNSIGNED NOT NULL,
`id_gosta` int(10) UNSIGNED NOT NULL,
`id_smestajne_jedinice` int(10) UNSIGNED NOT NULL,
`ukupna_cena` decimal(10,4) NOT NULL,
`vreme_dolaska` datetime NOT NULL,
`vreme_odlaska` datetime NOT NULL,
`broj_gostiju` tinyint(2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Table structure for table `smestajna_jedinica`
--

CREATE TABLE `smestajna_jedinica` (


`id_smestajne_jedinice` int(10) UNSIGNED NOT NULL,
`id_objekta` int(10) UNSIGNED NOT NULL,
`vrsta_smestaja` varchar(60) NOT NULL,
`broj_soba` int(2) NOT NULL,
`kapacitet` tinyint(2) NOT NULL,
`cena_nocenja` decimal(10,4) NOT NULL,
`wifi` varchar(30) NOT NULL,
`parking` varchar(30) NOT NULL,
`balkon` varchar(30) NOT NULL,
`kucni_ljubimci` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Listing 2: Kreiranje tabela baze podataka

--
-- Indexes for dumped tables
--

--
-- Indexes for table `destinacija`
--
ALTER TABLE `destinacija`
ADD PRIMARY KEY (`id_destinacije`);

--
-- Indexes for table `filter`
--
ALTER TABLE `filter`
ADD PRIMARY KEY (`id_filtera`);

--
-- Indexes for table `filter_objekta`
--
ALTER TABLE `filter_objekta`
ADD PRIMARY KEY (`id_objekta`,`id_filtera`),
ADD KEY `FK_Filter_Objekta_Filter` (`id_filtera`),
ADD KEY `FK_Filter_Objekta_Objekat` (`id_objekta`) USING BTREE;

--
-- Indexes for table `gost`
--
ALTER TABLE `gost`
ADD PRIMARY KEY (`id_gosta`);

--
-- Indexes for table `objekat`
--
ALTER TABLE `objekat`
ADD PRIMARY KEY (`id_objekta`);

--
-- Indexes for table `objekat_destinacija`
--
ALTER TABLE `objekat_destinacija`
ADD PRIMARY KEY (`id_destinacije`,`id_objekta`),
ADD UNIQUE KEY `FK_Objekat_Destinacija_Destinacija` (`id_destinacije`),
ADD KEY `FK_Objekat_Destinacija_Objekat` (`id_objekta`);

--
-- Indexes for table `placanje`
--
ALTER TABLE `placanje`
ADD PRIMARY KEY (`id_placanja`),
ADD KEY `FKIDREZERVACIJE` (`id_rezervacije`);

--
-- Indexes for table `rezervacija`
--
ALTER TABLE `rezervacija`
ADD PRIMARY KEY (`id_rezervacije`),
ADD KEY `FKIDGOSTA` (`id_gosta`),
ADD KEY `FK_rezervacija_smestajna_jedinica` (`id_smestajne_jedinice`);

--
-- Indexes for table `smestajna_jedinica`
--
ALTER TABLE `smestajna_jedinica`
ADD PRIMARY KEY (`id_smestajne_jedinice`),
ADD KEY `FKIDOBJEKTA` (`id_objekta`);

--
-- Constraints for dumped tables
--

--
-- Constraints for table `filter_objekta`
--
ALTER TABLE `filter_objekta`
ADD CONSTRAINT `FK_Filter_Objekta_Filter` FOREIGN KEY (`id_filtera`)
REFERENCES `filter` (`id_filtera`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `FK_Filter_Objekta_Objekat` FOREIGN KEY (`id_objekta`)
REFERENCES `objekat` (`id_objekta`) ON DELETE CASCADE ON UPDATE
CASCADE;

--
-- Constraints for table `objekat_destinacija`
--
ALTER TABLE `objekat_destinacija`
ADD CONSTRAINT ` FK_Objekat_Destinacija_Destinacija` FOREIGN KEY
(`id_destinacije`) REFERENCES `destinacija` (`id_destinacije`) ON DELETE CASCADE
ON UPDATE CASCADE,
ADD CONSTRAINT `FK_Objekat_Destinacija_Objekat` FOREIGN KEY (`id_objekta`)
REFERENCES `objekat` (`id_objekta`) ON DELETE CASCADE ON UPDATE
CASCADE;

--
-- Constraints for table `placanje`
--
ALTER TABLE `placanje`
ADD CONSTRAINT `placanje_ibfk_1` FOREIGN KEY (`id_rezervacije`) REFERENCES
`rezervacija` (`id_rezervacije`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `rezervacija`
--
ALTER TABLE `rezervacija`
ADD CONSTRAINT `FK_rezervacija_smestajna_jedinica` FOREIGN KEY
(`id_smestajne_jedinice`) REFERENCES `smestajna_jedinica` (`id_smestajne_jedinice`)
ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `rezervacija_ibfk_1` FOREIGN KEY (`id_gosta`) REFERENCES
`gost` (`id_gosta`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `smestajna_jedinica`
--
ALTER TABLE `smestajna_jedinica`
ADD CONSTRAINT `smestajna_jedinica_ibfk_1` FOREIGN KEY (`id_objekta`)
REFERENCES `objekat` (`id_objekta`) ON DELETE CASCADE ON UPDATE
CASCADE;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS
*/;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

o ALTER (table, column, ograničenja)


ALTER TABLE `objekat` CHANGE `mesto` `mesto` VARCHAR(30) CHARACTER SET 
utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `filter` CHANGE `naziv` `naziv` VARCHAR(35) UNSIGNED CHARACT
ER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `booking.com`.`filter_objekta` DROP PRIMARY KEY, ADD PRIMARY 
KEY (`id_objekta`, `id_filtera`) USING BTREE;
ALTER TABLE `filter_objekta` DROP FOREIGN KEY `FK_Filter_Objekta_Filter`; ALTE
R TABLE `filter_objekta` ADD CONSTRAINT `FK_Filter_Objekta_Filter` FOREIGN KE
Y (`id_filtera`) REFERENCES `filter`(`id_filtera`) ON DELETE CASCADE ON UPDATE 
NO ACTION;

Listing 3: Povezivanje tabela i dodavanje ogranicenja


o DROP (brisanje svih tipova objekata baze)
DROP DATABASE `booking.com`;
DROP TABLE ` destinacija `;
ALTER TABLE `placanje` DROP `id_rezervacije`;
ALTER TABLE `placanje` DROP PRIMARY KEY;
ALTER TABLE `placanje` DROP INDEX `FKIDREZERVACIJE`;
Listing 4: Brisanje tabela , primarnih kljuceva indeksa

2.2. Prikaz šeme baze podataka (dijagram tabela sa poveznicima):


Slika 1: Dijagram baze podataka
2.3 Prikaz DDL SQL skripta:
Booking.com

destinacija
Nul
Column Type Default Links to Comments Media type
l

id_destinacije (Primary
int(10) No
)

naziv_destinacije varchar(50) No

Indexes
Keyname Type Unique Packed Column Cardinality Collation Null Comment

id_destinacij
PRIMARY BTREE Yes No 8 A No
e

filter
Defaul
Column Type Null Links to Comments Media type
t

id_filtera (Primary) int(10) No

naziv varchar(35) No

Indexes
Packe
Keyname Type Unique Column Cardinality Collation Null Comment
d

BTRE
PRIMARY Yes No id_filtera 10 A No
E

filter_objekta
Defaul
Column Type Null Links to Comments Media type
t

id_objekta (Primary
int(10) No objekat -> id_objekta
)

id_filtera (Primary) int(10) No filter -> id_filtera


Indexes
Cardin Colla Com
Keyname Type Unique Packed Column Null
ality tion ment

id_objekt
10 A No
a
PRIMARY BTREE Yes No

id_filtera 10 A No

FK_Filter_Obje
BTREE No No id_filtera 10 A No
kta_Filter

FK_Filter_Obje id_objekt
BTREE No No 10 A No
kta_Objekat a

gost
Defaul
Column Type Null Links to Comments Media type
t

id_gosta (Primary) int(10) No

ime varchar(25) No

prezime varchar(30) No

email varchar(40) No

broj_telefona varchar(15) No

Indexes
Packe Nul
Keyname Type Unique Column Cardinality Collation Comment
d l

BTRE
PRIMARY Yes No id_gosta 8 A No
E

objekat
Defaul
Column Type Null Links to Comments Media type
t

id_objekta (Primary) int(10) No
naziv varchar(30) No

tip_objekta varchar(30) No

broj_smestajnih_jedinic
int(3) No
a

mesto varchar(30) No

lokacija varchar(100) No

Indexes
Packe Nul
Keyname Type Unique Column Cardinality Collation Comment
d l

BTRE
PRIMARY Yes No id_objekta 7 A No
E

objekat_destinacija
Nul
Column Type Default Links to Comments Media type
l

id_destinacije  destinacija ->


int(10) No
(Primary) id_destinacije

id_objekta (P objekat ->


int(10) No
rimary) id_objekta

Indexes
Cardin Colla Comme
Keyname Type Unique Packed Column Null
ality tion nt

id_destin
8 A No
acije
PRIMARY BTREE Yes No
id_objek
8 A No
ta

FK_Objekat_Desti id_destin
BTREE Yes No 8 A No
nacija_Destinacija acije

FK_Objekat_Desti BTREE No No id_objek 8 A No


Cardin Colla Comme
Keyname Type Unique Packed Column Null
ality tion nt

nacija_Objekat ta

placanje
Media
Column Type Null Default Links to Comments
type

id_placanja (Primary) int(10) No

rezervacija ->
id_rezervacije int(10) No
id_rezervacije

varchar(50
tip_placanja No
)

Indexes
Uniqu Packe Cardinalit Collatio Nul Comme
Keyname Type Column
e d y n l nt

BTRE
PRIMARY Yes No id_placanja 8 A No
E

FKIDREZERVACI BTRE id_rezervaci


No No 8 A No
JE E je

rezervacija
Nul Defaul Comment Medi
Column Type Links to
l t s a type

id_rezervacije (Primary
int(10) No
)

id_gosta int(10) No gost -> id_gosta

smestajna_jedinica ->
id_smestajne_jedinice int(10) No id_smestajne_jedinic
e

decimal(10,4
ukupna_cena No
)
vreme_dolaska datetime No

vreme_odlaska datetime No

broj_gostiju tinyint(2) No

Indexes
Uniq Pack Cardina Collati Nu Comm
Keyname Type Column
ue ed lity on ll ent

BTR
PRIMARY Yes No id_rezervacije 8 A No
EE

BTR
FKIDGOSTA No No id_gosta 8 A No
EE

FK_rezervacija_smestajna BTR id_smestajne_je


No No 8 A No
_jedinica EE dinice

smestajna_jedinica
Nul Media
Column Type Default Links to Comments
l type

id_smestajne_jedinice (Primary) int(10) No

objekat ->
id_objekta int(10) No
id_objekta

vrsta_smestaja varchar(60) No

broj_soba int(2) No

kapacitet tinyint(2) No

cena_nocenja decimal(10,4) No

wifi varchar(30) No

parking varchar(30) No

balkon varchar(30) No
kucni_ljubimci varchar(30) No

Indexes
Uniqu Packe Cardinali Collatio Nul Comme
Keyname Type Column
e d ty n l nt

BTRE id_smestajne_jedin
PRIMARY Yes No 8 A No
E ice

FKIDOBJEK BTRE
No No id_objekta 8 A No
TA E
3. Manipulacija podacima i elementarno ažuriranje baze
podataka
3.1 INSERT

Unos podataka za polja svih tabela.


-- phpMyAdmin SQL Dump
-- version 5.1.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Mar 19, 2022 at 01:52 PM
-- Server version: 10.4.22-MariaDB
-- PHP Version: 8.0.13

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";


START TRANSACTION;
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;


/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS
*/;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `booking.com`
--

--
-- Dumping data for table `destinacija`
--

INSERT INTO `destinacija` (`id_destinacije`, `naziv_destinacije`) VALUES


(1, 'Tara'),
(2, 'Srbija'),
(3, 'London'),
(4, 'Pariz'),
(5, 'Berlin'),
(6, 'Prag'),
(7, 'Amsterdam'),
(8, 'Italija');

--
-- Dumping data for table `filter`
--

INSERT INTO `filter` (`id_filtera`, `naziv`) VALUES


(1, 'wifi'),
(2, 'spa centar '),
(3, 'balkon'),
(4, 'dorucak ukljucen'),
(5, 'skijanje'),
(6, 'bracni krevet'),
(7, 'dozvoljeni kucni ljubimci'),
(8, 'bazen'),
(9, 'besplatno otkazivanje'),
(10, 'restoran');

--
-- Dumping data for table `filter_objekta`
--

INSERT INTO `filter_objekta` (`id_objekta`, `id_filtera`) VALUES


(1, 5),
(1, 9),
(2, 1),
(2, 2),
(3, 6),
(3, 8),
(4, 6),
(5, 4),
(6, 7),
(7, 3);

--
-- Dumping data for table `gost`
--

INSERT INTO `gost` (`id_gosta`, `ime`, `prezime`, `email`, `broj_telefona`) VALUES


(1, 'Ivan', 'Djuran', 'ivan.djuran@gmail.com', '+381612345671'),
(2, 'MIhail', 'Borisov', 'mihail.borisov@gmail.com', '+381612345672'),
(3, 'Boris', 'Brajkov', 'boris.brajkov@gmail.com', '+381612345673'),
(4, 'Nikola', 'Strinic', 'nikola.strinic@gmail.com', '+381612345674'),
(5, 'Dunja', 'Dragojevic', 'dunja.dragojevic@gmail.com', '+381612345675'),
(6, 'Strahinja', 'Arbanovski', 'strahinja.arbanovski@gmail.com', '+381612345676'),
(7, 'Snezana', 'Ciric', 'snezana.ciric@gmail.com', '+381612345677'),
(8, 'Nikola', 'Zindovic', 'nikola.zindovic@gmail.com', '+381612345678');

--
-- Dumping data for table `objekat`
--

INSERT INTO `objekat` (`id_objekta`, `naziv`, `tip_objekta`, `broj_smestajnih_jedinica`,


`mesto`, `lokacija`) VALUES
(1, 'Vila Grand Mitrovac', 'Vila', 4, 'Mitrovac', 'Mitrovac, 31250 Mitrovac, Srbija'),
(2, 'Lancaster Gate Hotel', 'Hotel', 100, 'London', ' 66-71, Lancaster Gate, Vestminster, London,
W2 3NA, Velika '),
(3, 'Hotel Korner Eiffel', 'Hotel', 120, 'Pariz', '96 Avenue Emile Zola, 15. Ajfelova kula - Port de
Versaj, 75'),
(4, ' Goodman\'s Living', 'Apartman', 10, 'Berlin', 'Wilmersdorfer Straße 36, Charlottenburg-
Wilmersdorf, 10585 B'),
(5, 'Botel Albatros', 'Brod', 30, 'Prag', 'Nábřeží Ludvíka Svobody 1, Prag, 11000, Češka '),
(6, 'The Blossom House Amsterdam', 'Pansion', 4, 'Amsterdam', '40 Bloemstraat, Amsterdam -
Centar grada, 1016 LC Amsterdam,'),
(7, 'Fonte Degna - Alloggio e Sito ', 'Kamp', 5, 'Citerna', 'via degli eroi 15, 06010 Citerna,
Italija');

--
-- Dumping data for table `objekat_destinacija`
--

INSERT INTO `objekat_destinacija` (`id_destinacije`, `id_objekta`) VALUES


(1, 1),
(2, 1),
(3, 2),
(4, 3),
(5, 4),
(6, 5),
(7, 6),
(8, 7);

--
-- Dumping data for table `placanje`
--

INSERT INTO `placanje` (`id_placanja`, `id_rezervacije`, `tip_placanja`) VALUES


(1, 1, 'Gotovinsko placanje'),
(2, 2, 'Placanje debitnim i kreditnim karticama'),
(3, 3, 'Placanje debitnim i kreditnim karticama'),
(4, 4, 'Gotovinsko placanje'),
(5, 5, 'Gotovinsko placanje'),
(6, 6, 'Gotovinsko placanje'),
(7, 7, 'Placanje debitnim i kreditnim karticama'),
(8, 8, 'Placanje debitnim i kreditnim karticama');

--
-- Dumping data for table `rezervacija`
--

INSERT INTO `rezervacija` (`id_rezervacije`, `id_gosta`, `id_smestajne_jedinice`,


`ukupna_cena`, `vreme_dolaska`, `vreme_odlaska`, `broj_gostiju`) VALUES
(1, 3, 7, '18000.0000', '2022-05-01 08:00:00', '2022-05-04 08:00:00', 5),
(2, 5, 2, '29000.0000', '2022-05-08 10:00:00', '2022-05-10 00:00:00', 4),
(3, 1, 6, '32000.0000', '2022-06-01 08:00:00', '2022-06-04 08:00:00', 2),
(4, 2, 1, '10100.0000', '2022-04-17 08:00:00', '2022-04-18 12:00:00', 2),
(5, 4, 8, '42000.0000', '2022-04-24 00:00:00', '2022-04-26 00:00:00', 2),
(6, 8, 5, '36000.0000', '2022-05-11 00:00:00', '2022-05-12 00:00:00', 2),
(7, 7, 3, '42500.0000', '2022-04-17 00:00:00', '2022-04-22 00:00:00', 1),
(8, 6, 4, '136000.0000', '2022-05-10 00:00:00', '2022-05-14 00:00:00', 3);

--
-- Dumping data for table `smestajna_jedinica`
--

INSERT INTO `smestajna_jedinica` (`id_smestajne_jedinice`, `id_objekta`, `vrsta_smestaja`,


`broj_soba`, `kapacitet`, `cena_nocenja`, `wifi`, `parking`, `balkon`, `kucni_ljubimci`)
VALUES
(1, 5, 'Dvokrevetna soba sa bracnim krevetom', 1, 2, '10100.0000', 'da', 'da', 'ne', 'ne'),
(2, 7, 'Apartman sa pogledom na vrt', 2, 4, '14500.0000', 'da', 'da', 'ne', 'da'),
(3, 4, 'Standardni studio apartman', 1, 1, '8500.0000', 'da', 'da', 'da', 'da'),
(4, 3, 'Trokrevetna soba', 1, 3, '34000.0000', 'da', 'da', 'da', 'da'),
(5, 2, 'Dvokrevetna soba sa zasebnim krevetima', 1, 2, '36000.0000', 'da', 'da', 'da', 'da'),
(6, 6, ' Deluks Dvokrevetna Soba sa Bračnim Krevetom', 1, 2, '16000.0000', 'da', 'da', 'da', 'ne'),
(7, 1, ' Apartman sa 2 Spavaće Sobe', 3, 5, '6000.0000', 'da', 'da', 'da', 'da'),
(8, 3, 'Dvokrevetna Soba sa Bračnim Krevetom', 1, 2, '21000.0000', 'da', 'da', 'da', 'ne');
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Listing 5: Unos podataka za sve tabele

3.2 UPDATE
UPDATE `gost`
SET `broj_telefona` = '+381612545671'
WHERE `gost`.`id_gosta` = 1
UPDATE `objekat` SET `broj_smestajnih_jedinica` = '150'
WHERE `objekat`.`id_objekta` = 2
UPDATE `filter` SET `naziv` = 'ski centar'
WHERE `filter`.`naziv` = 'skijanje';
Listing 6: Azuriranje tabele gost, objekat i filter

3.3 DELETE
a) Brisanje redova pod uslovom: DELETE FROM `objekat` WHERE `objekat`.`id_objekta` = 4;

b) Brisanje svih redova iz cele tabele: DELETE FROM `objekat`;

3.4 SELECT
a) Izdvajanje podataka iz više tabela pod nekim uslovom

1.SELECT upit izdvaja podatke o objektima (ID objekta, njegov naziv, tip objekta, destinaciju u
koju se nalazi) koji imaju balkon. Za date podatke potrebne su 4 tabele.
SELECT objekat.id_objekta as 'ID', naziv as 'NAZIV', tip_objekta as 'TIP', naziv_destinacije
AS 'DESTINACIJA', balkon as 'BALKON'
FROM objekat join smestajna_jedinica on objekat.id_objekta = smestajna_jedinica.id_objekta
JOIN objekat_destinacija on objekat.id_objekta = objekat_destinacija.id_objekta JOIN
destinacija on objekat_destinacija.id_destinacije = destinacija.id_destinacije
WHERE balkon = 'da'
GROUP BY objekat.naziv
ORDER BY objekat.id_objekta ASC;
Listing 7: Odabir svih objekata sa balkonom grupisan po nazivu sortiran od najmanjeg do
najveceg ID-a

Slika 2: Rezultat select upita

b) Statistika (AVG, COUNT, SUM, MIN, MAX)

b1) Upit koji izdvaja smeštajnu jedinicu sa najvećom cenom noćenja.

SELECT objekat.id_objekta as 'ID', naziv as 'NAZIV', tip_objekta as 'TIP', naziv_destinacije


AS 'DESTINACIJA', smestajna_jedinica.cena_nocenja AS 'CENA NOCENJA'
FROM objekat JOIN smestajna_jedinica ON objekat.id_objekta =
smestajna_jedinica.id_objekta JOIN objekat_destinacija ON objekat.id_objekta =
objekat_destinacija.id_objekta JOIN destinacija ON objekat_destinacija.id_destinacije =
destinacija.id_destinacije
HAVING smestajna_jedinica.cena_nocenja =
(SELECT MAX(smestajna_jedinica.cena_nocenja)
FROM smestajna_jedinica);
Listing 8: Select upit koji izdvaja smestajnu jedinicu sa najvecom cenom nocenja

Slika 3: Rezultat select upita B1

b2).Upit koji izdvaja najmanju cenu noćenja.

SELECT objekat.id_objekta as 'ID', naziv as 'NAZIV', tip_objekta as 'TIP', naziv_destinacije


AS 'DESTINACIJA', smestajna_jedinica.cena_nocenja AS 'CENA NOCENJA'
FROM objekat JOIN smestajna_jedinica ON objekat.id_objekta =
smestajna_jedinica.id_objekta
JOIN objekat_destinacija ON objekat.id_objekta = objekat_destinacija.id_objekta
JOIN destinacija ON objekat_destinacija.id_destinacije = destinacija.id_destinacije
GROUP BY objekat.naziv
HAVING smestajna_jedinica.cena_nocenja = (SELECT
MIN(smestajna_jedinica.cena_nocenja) FROM smestajna_jedinica);
Listing 8: Rezultat upita smestajnih jedinica sa najmanjom cenom

Slika 4: Rezultat select upita B2

b3). Upit koji računa ukupan trošak svih putovanja jednog gosta.

SELECT gost.id_gosta AS 'ID GOSTA', gost.ime AS 'IME',


(SELECT SUM(rezervacija.ukupna_cena)
FROM rezervacija
WHERE rezervacija.id_gosta = gost.id_gosta) AS 'UKUPNA CENA SVIH PUTOVANJA'
FROM gost;
Listing 9: Prikaz ukupnog troska svih korisnika

Slika 5: Rezultat select upita B3

(Na primer Dunja ima dve rezervacije i tu je prikazan njihov zbir)

C) Upit sa pod upitom.

B4) Upit koji računa koliko je za koji objekat uneto filtera u bazi, kao i prikaz koji su to filteri u
pitanju
SELECT objekat.naziv AS 'NAZIV OBJEKTA',
(SELECT COUNT(id_filtera)
FROM filter_objekta
WHERE objekat.id_objekta = filter_objekta.id_objekta) AS 'BROJ FILTERA', filter.naziv AS
'NAZIV FILTERA' FROM objekat, filter, filter_objekta
WHERE filter_objekta.id_filtera = filter.id_filtera
AND filter_objekta.id_objekta = objekat.id_objekta
GROUP BY filter.naziv
ORDER BY objekat.id_objekta;
Listing 9: Upit sa podupitom

Slika 6: Rezultat upita sa podupitom

3.5 POGLED
-Kreiran pogled izdvaja i prikazuje podatke o gostu (id gosta, ime, prezime, email), nazivu
destinacije na koju putuje, ukupnu cenu rezervacije, kao i vreme dolaska i odlaska sa putovanja.

CREATE VIEW gost_info


AS
SELECT gost.id_gosta AS 'ID gosta', gost.ime AS 'Ime', gost.prezime AS 'Prezime',
gost.email AS 'E-mail', destinacija.naziv_destinacije AS 'Destinacija', objekat.naziv AS
'Objekat', rezervacija.ukupna_cena AS 'Ukupna cena', rezervacija.vreme_dolaska AS 'Vreme
dolaska', rezervacija.vreme_odlaska AS 'Vreme odlaska'
FROM gost JOIN rezervacija
ON gost.id_gosta = rezervacija.id_gosta
JOIN smestajna_jedinica
ON rezervacija.id_smestajne_jedinice = smestajna_jedinica.id_smestajne_jedinice JOIN
objekat ON smestajna_jedinica.id_objekta = objekat.id_objekta JOIN objekat_destinacija ON
objekat.id_objekta = objekat_destinacija.id_objekta JOIN destinacija ON
objekat_destinacija.id_destinacije = destinacija.id_destinacije
ORDER BY gost.ime ASC;
Listing 10: Kreiranje pogleda
Pozivanje pogleda: SELECT * FROM gost_info

Brisanje pogleda: DROP VIEW gost_info


Slika 7: Rezultat pogleda

3.6 USKLADIŠTENA PROCEDURA


-Kreirana uskladištena procedura koristi se za unošenje podataka o novom gostu u bazu
podataka.

DELIMITER $$ Slika 8: Uskladištena procedura


CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertGost`(IN `id_gosta` INT(10)
UNSIGNED, IN `ime` VARCHAR(25), IN `prezime` VARCHAR(30), IN `email`
VARCHAR(40), IN `broj_telefona` VARCHAR(15))
insert into gost (id_gosta, ime, prezime, email, broj_telefona) values (id_gosta, ime, prezime,
email, broj_telefona)$$DELIMITER ;
Listing 11: Kreiranje procedure za unos gosta u bazu
Komanda za brisanje: DROP PROCEDURE

Komanda za unos gosta: InsertGost; Primer unosa: SET @p0 = 10; SET @p1 = 'Jovan'; SET
@p2 = 'Jovanovic'; SET @p3 = 'jovan@gmail.com'; SET @p4 = '0644444412'; call InsertGost
(@p0, @p1, @p2, @p3, @p4);
Slika 9: pozivanje uskladištene procedure

3.7 OKIDAČ
CREATE TRIGGER `proveraDatuma`
BEFORE INSERT ON `rezervacija`
FOR EACH ROW BEGIN
IF NEW.vreme_dolaska < Now() OR NEW.vreme_odlaska < NEW.vreme_dolaska
THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Unet je pogresan datum.';
END IF; END
Listing 12: Krieranje okidaca za proveru datuma
Slika 10: Okidač

PROVERA: (Unet je datum koji je prošao)

Slika 11: Rezultat okidača

Brisanje: DROP TRIGGER IF EXISTS `proveraDatuma`


4. Rad sa korisnicima baze podataka
KORISNIK SELECT INSERT UPDATE DELETE
Korisnik/gost Sve tabele Rezervacija Nema prava Rezervacija
Vlasnik objekta Sve tabele Smeštajna Objekat, Nema prava
jedinica smeštajna
jedinica
Admin Sve tabele Sve tabele Sve tabele Sve tabele
Tabela 1: Dozvole/zabrane korisnicima baze

CREATE USER 'Admin'@'%' IDENTIFIED VIA mysql_native_password USING '***';


GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,
PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE
TEMPORARY TABLES, LOCK TABLES, REPLICATION SLAVE, REPLICATION
CLIENT, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER
ROUTINE, CREATE USER, EXECUTE ON *.* TO 'Admin'@'%' REQUIRE NONE WITH
GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;GRANT ALL
PRIVILEGES ON `booking.com`.* TO 'Admin'@'%';

CREATE USER 'Vlasnik_Objekta'@'%' IDENTIFIED VIA mysql_native_password USING


'***';GRANT SELECT ON *.* TO
'Vlasnik_Objekta'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CON
NECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 
0;
Listing 13: Kreiranje korisnika vlasnik objekta

Slika 12: Komande GRANT INSERT i GRANT UPDATE


CREATE USER 'Korisnik'@'%' IDENTIFIED VIA mysql_native_password USING
'***';GRANT SELECT ON *.* TO
'Korisnik'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTI
ONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
Listing 14: Kreiranje korisnika gost/korisnik

Slika 13: Komande GRANT INSERT i GRANT DELETE

GRANT DELETE ON rezervacija TO 'Vlasnik_Objekta'@'localhost';
REVOKE DELETE ON rezervacija FROM 'Vlasnik_Objekta'@'localhost';
DROP USER 'Vlasnik_Objekta'@localhost';
Listing 15: Brisanje dozvole vlasniku objekta na brisanje iz tabele rezervacija I dodavnja
dozvole

5. Obrada transakcija i zaključavanje baze podataka


Kreirana transakcija upisuje nov objekat u bazu podataka, zatim se za taj objekat unose podaci o
njegovim smeštajnim jedinicama, kao i o filterima.

SET AUTOCOMMIT=0;
START TRANSACTION;
SELECT CASE WHEN id_objekta IS NULL THEN id_objekta=1 ELSE
@id_objekta:=max(id_objekta)+1 END FROM objekat;
LOCK TABLES objekat WRITE;
SET @naziv='Vila Jana';
SET @tip_objekta = 'Vila';
SET @broj_smestajnih_jedinica = 5;
SET @mesto = 'Tara';
SET @lokacija = 'Kopaonicka 2';
INSERT INTO objekat (id_objekta, naziv, tip_objekta, broj_smestajnih_jedinica,
mesto,lokacija)
VALUES (@id_objekta, @naziv, @tip_objekta, @broj_smestajnih_jedinica, @mesto,
@lokacija);
SELECT CASE WHEN id_smestajne_jedinice IS NULL THEN @id_smestajne_jedinice=1
ELSE @id_smestajne_jedinice:=max(id_smestajne_jedinice)+1 END FROM
smestajna_jedinica;
LOCK TABLES smestajna_jedinica WRITE;
SET @vrsta_smestaja='Vila';
SET @broj_soba = 2;
SET @kapacitet = 3;
SET @cena_nocenja = 5000;
SET @wifi = 'da';
SET @parking = 'ne';
SET @balkon = 'da';
SET @kucni_ljubimci = 'ne';
INSERT INTO smestajna_jedinica (id_smestajne_jedinice ,id_objekta, vrsta_smestaja,
broj_soba, kapacitet,cena_nocenja,wifi,parking,balkon,kucni_ljubimci)
VALUES (@id_smestajne_jedinice, @id_objekta, @vrsta_smestaja, @broj_soba, @kapacitet,
@cena_nocenja, @wifi, @parking, @balkon, @kucni_ljubimci);
LOCK TABLES filter_objekta WRITE;
INSERT INTO filter_objekta (id_objekta, id_filtera) VALUES (@id_objekta, 3);
INSERT INTO filter_objekta (id_objekta, id_filtera) VALUES (@id_objekta, 2);
INSERT INTO filter_objekta (id_objekta, id_filtera) VALUES (@id_objekta, 1);
UNLOCK TABLES;
COMMIT;
ROLLBACK;
SET AUTOCOMMIT = 1;
Listing 16: Kreiranje i zakljucavanje transakcije

Slika 14: Pokretanje transakcije


Slika 15: Pokretanje transakcije

I tako dalje za svaku liniju..

Slika 16: Podaci o unetom objektu nakon izvršene transakcije

Slika 17: Podaci o smeštajnoj jedinici unetog objekta

Slika 18: Uneti filteri za kreirani objekat


6. Opis korišćenog softvera i alata za rukovanje bazama
podataka
PhpMyAdmin je besplatni softverski alat napisan u PHP-u, namenjen za upravljanje MySQL-om
preko Veba. Često korišćene operacije poput upravljanja bazama podataka, tabelama, kolonama,
odnosima, indeksima, korisnicima, dozvolama… se mogu izvoditi preko korisničkog interfejsa,
dok postoji i mogućnost da se direktno izvrši bilo koja SQL naredba.[1]

Da bi se olakšalo korišćenje širokom spektru ljudi, phpMyAdmin se prevodi na 72 jezika i


podržava i LTR i RTL jezike.[1]

Projekat phpMyAdmin je član Softvare Freedom Conservancy. SFC je neprofitna organizacija


koja pomaže u promovisanju, poboljšanju, razvoju i odbrani projekata besplatnog i otvorenog
koda softvera.[1]

Karakteristike:

o Podržava većinu MySQL karakteristika:


- create, copy, drop, rename i alter baza, tabela, polja, indeksa
- održavanje servera, baza podataka i tabela, sa predlozima konfiguracije servera
- izvršite, uredite i obeležite bilo koji SQL iskaz
- upravljanje MySQL korisničkim nalozima i privilegijama
- upravljanje uskladištenim procedurama i okidačima
o Exportovanje podataka u različitim formatima
o Administriranje više servera
o Kreiranje grafike izgleda baze podataka u različitim formatima...
7. Literatura
[1] https://www.phpmyadmin.net/

You might also like