Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

4.1-SQL-toimintoja Teuhola 2012231 4.1. Relaatioskeemaa täydentäviä piirteitä: Näkymät (views) Näkymä on johdettu relaatio, jota ei fyysisesti ole välttämättä.

Samankaltaiset esitykset


Esitys aiheesta: "4.1-SQL-toimintoja Teuhola 2012231 4.1. Relaatioskeemaa täydentäviä piirteitä: Näkymät (views) Näkymä on johdettu relaatio, jota ei fyysisesti ole välttämättä."— Esityksen transkriptio:

1 4.1-SQL-toimintoja Teuhola 2012231 4.1. Relaatioskeemaa täydentäviä piirteitä: Näkymät (views) Näkymä on johdettu relaatio, jota ei fyysisesti ole välttämättä olemassa. Kutsutaan myös virtuaaliseksi relaatioksi. Näkymä voidaan johtaa talletetuista perusrelaatioista ja/tai muista näkymistä. Johtaminen tapahtuu SQL-kyselyn avulla: CREATE VIEW AS SELECT … ; Näkymää voi kyselyissä käyttää kuten perusrelaatioita. Käyttökelpoisen näkymän määrittely lyhentää sitä hyödyntäviä kyselyitä. Tarpeeton näkymä voidaan poistaa: DROP VIEW ;

2 4.1-SQL-toimintoja Teuhola 2012232 Esimerkki näkymän määrittelystä Relaatiot: –Tuote (Tno, Tnimi, Valmistaja, Hinta) –Asiakas (Ano, Animi, Paikka) –Tilaus (Ano, Tno, Kpl, Pvm) Näkymä ‘Tilaajat’ = Jotain tilanneet asiakkaat. CREATE VIEW Tilaajat ASSELECT Ano, Animi, Paikka FROM Asiakas AS a WHERE EXISTS (SELECT * FROM Tilaus AS t WHERE t.Ano = a.Ano );

3 4.1-SQL-toimintoja Teuhola 2012233 Näkymän käyttö Vrt. Edellisen sivun näkymä: Hae turkulaiset asiakkaat, jotka ovat tilanneet jotain: SELECT* FROMTilaajat WHEREPaikka = ‘Turku’; Poista asiakkaat, jotka eivät ole tilanneet mitään: DELETEFROM Asiakkaat WHEREAno NOT IN (SELECT Ano FROM Tilaajat);

4 4.1-SQL-toimintoja Teuhola 2012234 Näkymän päivitys Näkymärelaation päivitys pitäisi ‘projisoida’ perusrelaatioiden päivitykseksi. Onnistuu yksinkertaisissa tapauksissa (näkymä määritelty esim. projektion & valinnan avulla, ja pääavain mukana tuloksessa). PostgreSQL: Näkymän päivitystä ei voi automaattisesti palauttaa perusrelaatioiden päivitykseksi, mutta voidaan kirjoittaa sääntöjä (rule), mitä eri tilanteissa tehdään.

5 4.1-SQL-toimintoja Teuhola 2012235 Esimerkki näkymän päivityssäännöstä (PostgreSQL) Jos ‘tilaajat’-näkymään yritetään lisätä jotain, tehdäänkin vastaava lisäys ‘asiakas’-relaatioon: CREATE RULE tilaajan_lisays AS ON INSERT TO tilaajat DO INSTEAD INSERT INTO asiakas VALUES (new.ano, new.animi, new.paikka); Säännön poisto: DROP RULE tilaajan_lisays ON tilaajat;

6 4.1-SQL-toimintoja Teuhola 2012236 Näkymän päivitys (jatk.) Päivitys mahdollinen vain, jos vaikutus perus- relaatioihin on yksikäsitteinen ja pääteltävissä. Hankala tapaus: Näkymä usean relaation liitos Päivitys mahdoton jos näkymässä käytetty koostefunktioita (COUNT, SUM, ym.). Näkymärelaation päivitys ei ole suositeltavaa muuten kuin poikkeustapauksissa.

7 4.1-SQL-toimintoja Teuhola 2012237 Näkymän päivitys (jatk.) Esimerkki tulkinnallisesti epämääräisestä päivityksestä: CREATE VIEW TYÖTUNNIT AS SELECT FNAME, LNAME, PNAME, HOURS FROM EMPLOYEE, PROJECT, WORKS_ON WHERE SSN = ESSN AND PNO = PNUMBER;  Näkymään TYÖTUNNIT listataan kunkin työntekijän tekemät työtunnit eri projekteihin. Yritetään nyt päivittää tätä näkymää, joka selvästikin sisältää taulujen välisiä liitoksia, seuraavalla operaatiolla:

8 4.1-SQL-toimintoja Teuhola 2012238 Näkymän päivitys (jatk.) UPDATE TYÖTUNNIT SET PNAME = ‘ProductY’ WHERE LNAME = ‘Smith’ AND FNAME = ‘John’ AND PNAME = ‘ProductX’;  Ilmeisestikin (?) tällä päivityksellä haluttaisiin siirtää John Smithin työtunnit projektista nimeltä ’ProductX’ projektiin nimeltä ’ProductY’.  Tällöin näkymän päivityksen pitäisi johtaa ratkaisuun:

9 4.1-SQL-toimintoja Teuhola 2012239 Näkymän päivitys (jatk.) UPDATE WORKS_ON SET PNO = (SELECT PNUMBER FROM PROJECT WHERE PNAME = ’ProductY’) WHERE ESSN IN (SELECT SSN FROM EMPLOYEE WHERE LNAME = ’Smith’ AND FNAME = ’John’) AND PNO = (SELECT PNUMBER FROM PROJECT WHERE PNAME = ’ProductX’);

10 4.1-SQL-toimintoja Teuhola 2012240 Näkymän päivitys (jatk.) MUTTA: Myös seuraava varsinaisten relaatioiden päivitysoperaatio toteuttaisi näkymäpäivityksessä annetut ehdot: UPDATE PROJECT SET PNAME = ‘ProductY’ WHERE PNAME = ‘ProductX’; Jälkimmäinen toteutus tuntuu intuitiivisesti typerältä, sillä se nimeäisi ‘ProjectX’:n uudelleen samalle nimelle, kuin toinen jo olemassa oleva projekti on.

11 4.1-SQL-toimintoja Teuhola 2012241 Tiedon salaus näkymien avulla Sisällytetään näkymään vain ne tiedot, jotka saavat näkyä muille, esim. salataan asiakkaiden paikkakunta: CREATE VIEW AsiakasNäkymä ASSELECT Ano, Animi FROM Asiakas; Annetaan erikseen oikeuksia näkymän käyttöön: GRANT SELECT ON AsiakasNäkymä TO Esa; Oikeuden saaja voi olla yksittäinen käyttäjä, käyttäjä- ryhmä tai PUBLIC. Oikeus voidaan myöntää eri operaatioihin: GRANT SELECT / INSERT / DELETE /...

12 4.1-SQL-toimintoja Teuhola 2012242 Relaatioskeemaa täydentäviä piirteitä: Rajoitteet eli väittämät (assertions) Yleisimmät eheyssäännöt (CONSTRAINT) määritellään relaation luonnin yhteydessä (mm. PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL). Väittämät ovat loogisia lausekkeita, joiden tulee olla aina tosia, paitsi tilapäisesti transaktion suorituksen aikana. Määrittely: CREATE ASSERTION CHECK ( );

13 4.1-SQL-toimintoja Teuhola 2012243 Väittämät: esimerkki Turkulaisten asiakkaiden tilausten minimikoko on 5 kpl per tuote. CREATE ASSERTION TilausRaja CHECK ( NOT EXISTS ( SELECT* FROMAsiakas AS a, Tilaus AS t WHEREa.Paikka=‘Turku’ ANDa.Ano=t.Ano ANDt.Kpl < 5 ) ) Huom! Yksinkertaiset CHECK-määreet (jotka koskevat yksittäistä attribuuttia tai riviä) voidaan sijoittaa CREATE TABLE –lauseisiin.

14 4.1-SQL-toimintoja Teuhola 2012244 Relaatioskeemaa täydentäviä piirteitä: Herätteet (triggers) Heräte (‘liipaisin’) on nimettyihin päivitys- operaatioihin liittyvä, mahdollisesti ehdollinen lisätoimenpide. Tarvitaan esimerkiksi redundantin tiedon ylläpitämiseksi ajan tasalla, tai kompensoivien toimenpiteiden suorittamista, jos jokin oikeellisuussääntö on vaarassa rikkoontua. Määrittely CREATE TRIGGER –lauseella.

15 4.1-SQL-toimintoja Teuhola 2012245 Esimerkki herätteestä Oletetaan, että kullekin asiakkaalle ylläpidetään tilausten summaa (Asiakas-relaatiossa). [Oraclen syntaksi …] CREATE TRIGGER TilSummaLisays AFTER INSERT ON Tilaus FOR EACH ROW UPDATE Asiakas AS a SET TilSumma = TilSumma + ( SELECTt.Hinta * NEW.Kpl FROMTuote AS t WHERENEW.Tno=t.Tno) WHERE a.Ano = NEW.Ano;

16 4.1-SQL-toimintoja Teuhola 2012246 Herätteen toteutus PostgreSQL:n RULE-määrettä käyttäen. CREATE RULE TilSummaLisays AS ON INSERT TO tilaus DO ALSO UPDATE asiakas a SET tilsumma = (SELECT SUM(ti.kpl * tu.hinta) FROM tilaus AS ti, tuote AS tu WHERE ti.ano = NEW.ano AND ti.tno = tu.tno) WHERE a.ano = NEW.ano;

17 4.1-SQL-toimintoja Teuhola 2012247 Tilauksen poistoon liittyvä heräte (PostgreSQL) CREATE RULE TilSummaVahennys AS ON DELETE TO tilaus DO ALSO UPDATE asiakas a SET tilsumma = (SELECT SUM(ti.kpl * tu.hinta) FROM tilaus AS ti, tuote AS tu WHERE ti.ano = OLD.ano AND ti.tno = tu.tno AND NOT ti.tno = OLD.tno) WHERE a.ano = OLD.ano;

18 4.1-SQL-toimintoja Teuhola 2012248 Relaatioskeemaa täydentäviä piirteitä: Talletetut proseduurit ja funktiot Tietokannan yhteyteen palvelimelle voidaan tallettaa valmiiksi käännettyjä proseduureja ja funktioita, joita voidaan kutsua SQL:stä tai sovelluksista käsin. Etuja: –Useiden sovellusten tarvitsemat käsittelyrutiinit vain kertaalleen palvelimessa. –Talletetut proseduurit/funktiot suoritetaan palvelimessa ja voivat näin ollen pienentää työaseman ja palvelimen välistä liikennettä. –Voidaan mallintaa monimutkaisempia johdettuja asioita kuin näkymillä. –Voidaan tarkistaa monimutkaisia oikeellisuusehtoja.

19 4.1-SQL-toimintoja Teuhola 2012249 Esimerkki johdetusta funktiosta (PostgreSQL) Funktio, joka laskee asiakkaan tietyn tilauksen arvon. Parametreina asiakas- ja tuotenumero (integer-tyyppisiä) CREATE FUNCTION arvo(integer, integer) RETURNS integer AS 'SELECT tu.hinta * ti.kpl FROM Tilaus AS ti, Tuote AS tu WHERE ti.ano = $1 AND ti.tno = $2 AND ti.tno = tu.tno;' LANGUAGE SQL;

20 4.1-SQL-toimintoja Teuhola 2012250 Esimerkki johdetun funktion kutsusta (PostgreSQL) Laskettava asiakkaan 111 kaikkien tilausten arvot. SELECT tno, kpl, arvo(ano, tno) FROM tilaus WHERE ano = 111; AnoTnoKplPvm 11112341002007-02-12 11134561002007-02-13 ………… TnoTnimiValmistajaHinta 1234PulttiVipu Oy20 2345RuuviJenka Oy10 3456MutteriVipu Oy10 TilausTuote TnoKplArvo 12341002000 34561001000

21 4.1-SQL-toimintoja Teuhola 2012251 Talletetut proseduurit ja funktiot (jatk.) Talletetut proseduurit/funktiot voidaan kirjoittaa jollain yleiskäyttöisellä ohjelmointikielellä tai SQL:llä. Uudemmat SQL-standardit sisältävät laajennuksen (PSM = Persistent Stored Modules), joka tekee SQL:stä ‘täydellisen’ ohjelmointikielen, sisältäen mm. lauseet –IF … THEN … ELSEIF … THEN … END IF –WHILE … DO … END WHILE –REPEAT … UNTIL … END REPEAT –FOR … AS … CURSOR FOR … DO … END FOR

22 4.1-SQL-toimintoja Teuhola 2012252 Käytännön tilanne SQL-ohjelmointi- kielissä Valmistajakohtaisia laajennettuja kieliä: –Oracle: PL/SQL –Microsoft/Sybase: T-SQL –PostgreSQL: PL/pgSQL PSM-standardin mukaisia (osittaisia) toteutuksia: –DB2: SQL PL –MySQL: SQL/PSM –PosgreSQL: PL/pgPSM (pieniä eroja PL/pgSQL:ään)

23 4.1-SQL-toimintoja Teuhola 2012253 Esimerkki PL/pgSQL-ohjelmointikielestä CREATE LANGUAGE plpgsql; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CREATE OR REPLACE FUNCTION terve(a integer) RETURNS varchar AS $$ DECLARE nimi varchar; BEGIN nimi := (SELECT animi FROM asiakas WHERE ano = a); RETURN 'Terve ' || nimi || ‘!’; END; $$ LANGUAGE plpgsql; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Kutsu:SELECT terve(111); Tulos:Terve Aalto!

24 4.1-SQL-toimintoja Teuhola 2012254 Johtopäätös SQL-ohjelmoinnista Talletetut proseduurit, funktiot, säännöt, rajoitteet ja herätteet ovat hyödyllisiä, kun määritellään tietokantaan liittyviä lisätoimintoja palvelimella. Varsinainen sovellusohjelmointi tehdään usein mieluummin yleisillä ohjelmointikielillä (Java, C++, ym.), joista käsin voidaan kutsua SQL-operaatioita, mukaan lukien edellä mainitut lisätoiminnot.


Lataa ppt "4.1-SQL-toimintoja Teuhola 2012231 4.1. Relaatioskeemaa täydentäviä piirteitä: Näkymät (views) Näkymä on johdettu relaatio, jota ei fyysisesti ole välttämättä."

Samankaltaiset esitykset


Iklan oleh Google