24.04. Ažuriranje podataka kroz pogled (VIEW)
Uvod
U prethodnoj lekciji upoznali smo se sa pojmom pogleda (VIEW) i naučili da on predstavlja virtuelnu tabelu zasnovanu na SELECT upitu.
Sada se postavlja važno pitanje:
Da li možemo menjati podatke preko pogleda?
Odgovor je: Možemo – ali ne uvek.
1. Osnovna ideja
Kada radimo:
UPDATE naziv_pogleda
SET kolona = vrednost
mi zapravo: menjamo podatke u originalnoj tabeli, a ne u samom pogledu.
Dakle: VIEW je samo "prozor" – stvarni podaci su u tabeli.
2. Kada promena podataka kroz pogled NIJE DOZVOLJENA?
U slučaju da se koriste složeni upiti u kojima se koriste
✘ DISTINCT ✘ agregatne funkcije ✘ GROUP BY
3. Primer – dozvoljeno ažuriranje
Kreiranje pogleda:
CREATE VIEW vw_Glumci
AS
SELECT GlumacID, Ime, Prezime
FROM Glumac;
UPDATE preko pogleda:
UPDATE vw_Glumci
SET Ime = 'Petar'
WHERE GlumacID = 1;
✔ Ova promena će biti izvršena u tabeli Glumac
4. INSERT kroz VIEW
INSERT INTO vw_Glumci (GlumacID, Ime, Prezime)
VALUES (200, 'Marko', 'Marković');
✔ Novi red se dodaje u tabelu Glumac
5. DELETE kroz VIEW
DELETE FROM vw_Glumci
WHERE GlumacID = 200;
✔ Briše podatak iz osnovne tabele
6. Primer – nedozvoljeno ažuriranje
create view vwBrojFilmovaPoZanru
as
select z.NazivZanra, Count(f.Naziv) as BrojFilmova
from Zanr z, Film f
where z.ZanrID=f.ZanrID
group by z.NazivZanra;
Pokušaj UPDATE:
update vwBrojFilmovaPoZanru
set NazivZanra='aakcija'
where BrojFilmova=3
❌ Ovo neće raditi (greška), jer pogled koristi agregatnu funkciju (count)
Zadaci
Zadatak 1 - Kreirati pogled nad tabelom Film (Naziv, DatumIzlaska).
Zadatak 2 - Promeniti naziv jednog filma preko pogleda.
Zadatak 3 - Dodati novi film preko pogleda.
Zadatak 4 - Obrisati film preko pogleda.
Zadatak 5 - Napraviti pogled sa JOIN i pokušati UPDATE – objasniti grešku.
Dodatni zadaci za vežbu
Zadatak 1 - Kreirati pogled nad tabelom Glumac (Ime, Prezime).
Zadatak 2 - Promeniti prezime jednog glumca preko pogleda.
Zadatak 3 - Dodati novog glumca preko pogleda.
Zadatak 4 - Obrisati glumca preko pogleda.
Zadatak 5 - Objasniti:
-
Zašto neki pogledi ne dozvoljavaju izmene?
-
Kada je bezbedno koristiti VIEW za ažuriranje?
Zadaci za rad kod kuće (ako ne stignemo na času)
Zadatak 1 - Kreirati pogled nad tabelom Producent.
Zadatak 2 - Dodati novog producenta preko pogleda.
Zadatak 3 - Napraviti pogled sa JOIN i pokušati INSERT.
Zadatak 4 - Objasniti razliku:
-
ažuriranje preko VIEW
-
ažuriranje direktno nad tabelom
Rešenja
Zadatak 1
CREATE VIEW vw_Filmovi
AS
SELECT Naziv, DatumIzlaska
FROM Film;
Zadatak 2
UPDATE vw_Filmovi
SET Naziv = 'Novi naziv'
WHERE Naziv = 'Kum';
Zadatak 3
INSERT INTO vw_Filmovi (Naziv, DatumIzlaska)
VALUES ('Novi film', '2020-01-01');
Zadatak 4
DELETE FROM vw_Filmovi
WHERE Naziv = 'Novi film';