Professional Documents
Culture Documents
Booking
Arhitektura sistema za rukovanje bazama podataka
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
--
-- Database: `booking.com`
--
-- --------------------------------------------------------
--
-- Table structure for table `destinacija`
--
-- --------------------------------------------------------
--
-- Table structure for table `filter`
--
--
-- Table structure for table `filter_objekta`
--
-- --------------------------------------------------------
--
-- Table structure for table `gost`
--
-- --------------------------------------------------------
--
-- Table structure for table `objekat`
--
-- --------------------------------------------------------
--
-- Table structure for table `objekat_destinacija`
--
-- --------------------------------------------------------
--
-- Table structure for table `placanje`
--
-- --------------------------------------------------------
--
-- Table structure for table `rezervacija`
--
-- --------------------------------------------------------
--
-- Table structure for table `smestajna_jedinica`
--
--
-- 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;
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_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
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
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
rezervacija
Nul Defaul Comment Medi
Column Type Links to
l t s a type
id_rezervacije (Primary
int(10) No
)
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
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
--
-- Database: `booking.com`
--
--
-- Dumping data for table `destinacija`
--
--
-- Dumping data for table `filter`
--
--
-- Dumping data for table `filter_objekta`
--
--
-- Dumping data for table `gost`
--
--
-- Dumping data for table `objekat`
--
--
-- Dumping data for table `objekat_destinacija`
--
--
-- Dumping data for table `placanje`
--
--
-- Dumping data for table `rezervacija`
--
--
-- Dumping data for table `smestajna_jedinica`
--
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;
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
b3). Upit koji računa ukupan trošak svih putovanja jednog gosta.
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
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.
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č
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
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
Karakteristike: