Arvutiteaduse instituut
  1. Kursused
  2. 2024/25 kevad
  3. Andmebaasid (LTAT.03.004)
EN
Logi sisse

Andmebaasid 2024/25 kevad

  • Kursuse korraldus
  • Loengud
  • Praktikumid
  • Kodulugemised (autorid: Margus Roo ja Piret Luik)
  • Rühmatöö

Vaadete muutmine ja vaate kaudu põhitabeli andmete muutmine

Vaate muutmine

Vaadet saab ka mingil määral muuta. Lause:

CREATE [ OR REPLACE ] VIEW vaate_nimi
    AS (SELECT lause);

OR REPLACE selles lauses loob või uuendab olemasoleva vaadet. Kui olemasolevat vaadet uuendatakse, siis uue vaate päringus peavad sisalduma eelmise vaate päringu väljad samas järjekorras. Uusi väljasid tohib lisada lõppu.

Uuendame eelnevalt loodud vaadet v_isikudklubid lisades ränkingu.

CREATE OR REPLACE VIEW v_isikudklubid(isik_nimi, isik_id, synniaeg, klubi_nimi, klubi_id, ranking) AS
SELECT isikud.perenimi || ', ' || isikud.eesnimi, isikud.id, synniaeg, klubid.nimi, klubid.id, ranking 
FROM isikud JOIN klubid ON isikud.klubis = klubid.id;

Kontrollime, kas päringu muudatus õnnestus. Võime kohe pärida vaadet või DBeaveri kaudu vaadata detailsemat informatsiooni päringu kohta. Samas paneme tähele, et kuigi lisatud ranking oleks sobinud enam kas pärast isiku nime või isiku id'd, siis sinna me seda lisada ei saanud, sest lisada saab uusi välju ainult lõppu.

Vaate uuendamisel aga ei saa kustutada mõnda eelnevalt vaate päringus kasutatud veergu!

Saab kasutada ka lauset

ALTER VIEW — vaate muutmine

Siiski ka sellega on piiratud võimalused. Saame lisada vaikeväärtust veerule või veergu ümber nimetada. Viimasel juhul peab eelnevalt veenduma, et seda vaadet ei kasuta mõni teine vaade või rakendus, kus need veergude nimed on päringulauses!

Näiteks nimetame loodud vaates ranking veeru ümber elo'ks. NB! Nagu öeldud, kui seda vaate veergu on kasutatud mõnes päringus või teises vaates, peame ka seal hiljem vastava muudatuse tegema!

ALTER VIEW v_isikudklubid RENAME ranking TO elo;

Vaadet saab kustutada DROP VIEW <vaate_nimi>.

Seega kui me soovime kustutada mõnda veergu vaatest, siis algselt peame kustutama kogu vaate ning siis looma uuesti selle juba vähemate veergudega.

Vaate kaudu põhitabeli andmete sisestamine, uuendamine ja kustutamine

Kuigi põhiliselt kasutatakse vaadet ikkagi päringutes, siis teatud tingimustel saab läbi vaate baastabelisse andmeid lisada, muuta ja kustutada. Vaade, mille kaudu saab baastabelisse andmeid sisestada, muuta ja kustutada peab olema loodud nii, et:

  • vaates kasutatavas SELECT lause FROM osas on ainult üks tabel (või üks vaade);
  • SELECT lauses ei ole kasutatud meile teadaolevatest GROUP BY, HAVING, LIMIT, DISTINCT, UNION, INTERSECT ega EXCEPT;
  • SELECT lauses ei ole kasutatud agregeerivaid funktsioone (näiteks SUM, COUNT jms);
  • ei ole kasutatud alampäringuid ja erinevaid OUTER JOIN’i.

Erinevatel andmebaasi juhtimissüsteemidel on need tingumused ka veidi erinevad.

Soovitav on kasutada vaadete puhul, mille kaudu baastabelite andmeid saab muuta või sisestada WITH CHECK OPTION kitsendust. Näiteks loome vaate v_knimed, millesse võtame isikud, kelle puhul nii ees- kui ka perenimi algab K-tähega:

CREATE VIEW v_knimed AS
SELECT eesnimi, perenimi 
FROM isikud
WHERE eesnimi LIKE 'K%' AND perenimi LIKE 'K%'
WITH CHECK OPTION;

Lisame selle vaate kaudu tabelisse Isikud isiku nimega Kalle Kusta.

INSERT INTO v_knimed (eesnimi, perenimi) VALUES ('Kalle', 'Kusta');

Võite kontrollida päringuga tabelist isikud, kas vastav kirje on olemas.

Tahame aga lisada ka Mari Maasika.

INSERT INTO v_knimed (eesnimi, perenimi) VALUES ('Mari', 'Maasikas');

Siis sellisel juhul saame veateate:

Ehk siis kuna meie poolt soovitav kirje Mari Maasikas ei vasta vaate tingimustele (ees- ja perenimi ei alga K-tähega), siis lisamist ei teostada. Kui me poleks vaate loomisel lisanud lõppu kitsenduse WITH CHECK OPTION, oleks saanud vabalt ka Mari Maasika vaate kaudu lisada.

Miks seda vaja on? Näiteks on meil korterite andmebaas. Igal korteri omanikul peab olema luba lisada oma korterisse elanikke (saab vaate kaudu). Samas ei tohi keegi ju lisada elanikke naaberkorterisse.

Läbi vaate saab ka kirjeid uuendada ning kustutada. Uuendame kirjet vaate kaudu:

UPDATE v_knimed SET eesnimi = 'Kalle Kalvi' 
WHERE eesnimi='Kalle' AND perenimi='Kusta';

Samamoodi kuna meil on vaatel v_knimed kitsendus peal, siis ei saaks me muuta Kalle Kusta nime aga näiteks Malle Kustaks või Kalle Maasikaks.

Kirje kustamisel vaate kaudu:

DELETE FROM v_knimed 
WHERE eesnimi='Kalle Kalvi' AND perenimi='Kusta';

Kontrollimaks, kas said vaate teemast aru ava soovi korral test.
AVA TEST

Vaadete loomineFunktsioonide loomine
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused