Uploaded by Milan Vasić

Administriranje-BP-ispit

advertisement
1. Na osnovu prikazanog relacionog modela Instagram, kreirati pogled koji
sadrzi sve korisnike (username) koi su postavili komentar u 2016 a zatim
pozivajuci taj pogled ukupan broj korisnika koji su postavili komentar 2016.
(15 poena)
create view Komentari_2016 as
select username
from users inner join comments
on users.id=comments.user_id
where year(created_at)=2016;
select count(username)
from Komentari_2016;
2. Kreirati cluster indeks za kolonu user_id u tabeli comments. Objasniti koje
su prednosti a koji nedostaci upotrebe indeksa. (10 poena)
create clustered index index_comments_user_id
on comments (user_id);
Prednost indeksa je brze citanje podataka iz baze a nedostatak sporije upisivanje
podataka u bazu.
3. U sledecem primeru objasniti razliku u rezultatu izmedju dva upita i
objasniti koji upit ce se brze izvrsiti. (10 poena)
select users.id, users.username
from Users
where year(users.created_at)=2020
order by users.id asc
select distinct users.id, users.username
from Users
where year(users.created_at)=2020
Prvi primer ce vratiti korisnicko ime i id korisnika koji su napravili nalog u 2020.
godini po uzlaznom redosledu na osnovu id korisnika. A drugi primer ce vraatiti
ime i id korisnika koji su napravili nalog u 2020. godini bez duplikata.
4. Ukoliko naziv svake fortografije sadrzi broj, lokaciju i naziv u formatu 2
Srbija Priroda. Prikazati za svaku fotografiju samo naziv. Preporuka je da se
koriste funkcije za rad sa tekstom u MySql(length, left, right, locate, ...). (15
poena)
select SUBSTRING_INDEX(caption, ’ ’, -1) from photos;
5. Kreirati funkciju za bazu ig_clone koja ce na osnovu username korisnika
da vrati broj lajkova koje je taj korisnik postavio. (25 poena)
delimiter $$
create function broj_lajkova(v_username varchar(40))
returns integer
deterministic
begin
declare v_broj_lajkova intger;
select count(*) into v_broj_lajkova
from users inner join likes
on users.id=likes.user_id
where username=v_username;
return v_broj_lajkova;
end
$$ delimiter;
6. Kreirati proceduru koja ce na osnovu imena korisnika (username) da vrati
broj njegovih slika i broj njegovih lajkova. (25 poena)
delimiter $$
create procedure broj_slika_i_lajkova(
in v_username varchar(40),
out broj_lajkova int,
out broj_slika int)
begin
--lajkovi
select count(*) into broj_lajkova
from users inner join likes
on users.id=likes.user_id
where username=v_username;
--slike
select count(*) into brooj_slika
from users inner join photos
on users.id=photos.user_id
where username=v_username;
end$$
delimiter;
7. Kreirati trigger koji ce za svaku novu postavljenu sliku da napise prvi
komentar koji ce da sadrzi info o korisniku koji je postavio sliku (username) u
polju comment_text
delimiter $$
create trigger ‘dodavanjePrvogKomentara’
after insert on ‘photos’ for each row
begin
declare ime varchar(20);
select username into ime
from users where id=new.user_id;
insert into comments(comment_text, created at, photo_id, user_id)
values(ime, new.created_at, new.id, new.user_id);
end$$
delimiter ;
Download