Oheismateriaalia |
|
SQL-tietokannassa on kahden tyyppisiä tauluja: perustauluja ja johdettuja tauluja. Johdetut taulut määritellään kyselyn avulla. Näkymät (views) ovat johdettuja tauluja, joita ei tallenneta mihinkään. Ne ovat olemassa vain määritelminä. Näkymäksi määriteltyä taulua voi käyttää kyselyissä kuten perustauluja. Niille voidaan antaa käyttöoikeuksia samoin kuin perustauluille. Jopa näkymään kohdistuvat ylläpito-operaatiotkin ovat rajoitetusti mahdollisia.
Näkymä määritellään seuraavasti
Esimerkki N1. (ks. esimerkkikannan kaavio)
muoto |
create view näkymän_nimi [(sarakenimilista)] as kysely |
esimerkki | create view tyhja_kurssi (kurssikoodi, lukuvuosi,lukukausi,kurssinumero) as select kurssikoodi,lukuvuosi,lukukausi,kurssinumero from kurssi where (kurssikoodi,lukuvuosi,lukukausi,kurssinumero) not in (select kurssikoodi,lukuvuosi,lukukausi,kurssinumero from ilmoittautuminen where perumisaika is null) |
Esimerkissä määritellään tyhjä kurssi sellaiseksi kurssiksi, jolle ei ole ilmoittautumisia.
Syitä näkymien käyttöön ovat
Jos kyselyt kohdistuvat näkymiin perustaulujen asemasta, voidaan perustaulujen rakennetta muuttaa ilman, että kyselyjä muutetaan. Perustaulujen muutoksen jälkeen määritellään niihin perustuvat näkymät uudelleen.
Oletetaan, että OPISKELIJA-taulu jaetaan kahdeksi rakenteeltaan alkuperäisen mukaiseksi tauluksi AKTIIVISET ja PASSIIVISET. Nyt tauluun OPISKELIJA kohdistuvat kyselyt eivät enää toimi. Ne saadaan toimimaan kun määritellään näkymä OPISKELIJA seuraavasti
Esimerkki N2. (ks. esimerkkikannan kaavio)
create view opiskelija as select * from aktiiviset union select * from passiiviset |
Taulun rakenteen muutoksiin voi varautua määrittelemällä taululle sen kanssa identtisen näkymän.
Esimerkki N3. (ks. esimerkkikannan kaavio)
create view Teacher (opetunnus,sukunimi,etunimet,kotiosoite, tyohuone,tyopuhelin,sahkoposti,kotipuhelin) as select opetunnus,sukunimi,etunimet,kotiosoite, tyohuone,tyopuhelin,sahkoposti,kotipuhelin from opettaja |
Käyttöoikeudet voidaan antaa näkymiin kohdistuvina. Tällöin oikeudet voidaan rajata taulun joihinkin osiin tai vain yhteenvetotietoihin. Seuraavassa esimerkissä opettajien työosoitetiedot määritellään julkisesti luettaviksi näkymän OPEkautta.
Esimerkki N4. (ks. esimerkkikannan kaavio)
create view ope (sukunimi,etunimet, tyohuone,tyopuhelin,sahkoposti) as select sukunimi,etunimet, tyohuone,tyopuhelin,sahkoposti from opettaja; grant select on ope to public; |
Vaikka tiedot kurssien osallistujista eivät olikaan julkisia voidaan osallistujamäärät silti määritellä julkisiksi seuraavasti
Esimerkki N5. (ks. esimerkkikannan kaavio)
create view osallistujat (kurssinimi, lukuvuosi, lukukausi, koodi, lkm) as select nimi_suomeksi, kurssi.kurssikoodi, lukuvuosi, lukukausi, count(ilm_aika) opiskelijoita from opintojakso, kurssi left outer join ilmoittautuminen i on kurssi.kurssikoodi= i.kurssikoodi and kurssi.lukuvuosi= i.lukuvuosi and kurssi.lukukausi=i.lukukausi and kurssi.kurssinumero= i.kurssinumero where perumisaika is null and opintojakso.kurssikoodi=kurssi.kurssikoodi group by nimi_suomeksi, kurssi.kurssikoodi, lukuvuosi, lukukausi; grant select on osallistujat to public; |
Näkymien sisältö voidaan määritellä myös käyttäjäriippuvana, esimerkiksi luennoijan kurssit määriteltäisiin seuraavasti
Esimerkki N6. (ks. esimerkkikannan kaavio)
create view omat_kurssit (kurssikoodi,nimi,lukuvuosi,lukukausi,kurssinumero) as select kurssikoodi,nimi_suomeksi,lukuvuosi, lukukausi,kurssinumero from opintojakso,kurssi,opetustehtava,tyo where opintojakso.kurssikoodi=kurssi.kurssikoodi and opetustehtava.kurssikoodi=kurssi.kurssikoodi and opetustehtava.lukuvuosi=kurssi.lukuvuosi and opetustehtava.lukukausi=kurssi.lukukausi and opetustehtava.tyyppi='luento' and opetustehtava.kurssikoodi=tyo.kurssikoodi and opetustehtava.lukuvuosi=tyo.lukuvuosi and opetustehtava.lukukausi=tyo.lukukausi and opetustehtava.kurssinumero=tyo.kurssinumero and opetustehtava.opetusnumero=tyo.opetusnumero and tyo.opettaja = user |
Tässä kyselyssä käytetään funktiota user, joka antaa käyttäjän tietokantakäyttäjätunnuksen. Oletetaan, että opettajatunnukset ovat samalla tietokantakäyttäjätunnuksia. Silloin tämä näkymä antaa tyhjän tulostaulun, jos käyttäjällä ei ole luennoitavia kursseja.
Kun taulujen väliset monimutkaiset liitosehdot määritellään valmiiksi näkymiin helpottuu kyselyjen tekeminen. Näkymien käyttö ei kuitenkaan tehosta kyselyjä, sillä näkymiä käytetään siten, että näkymää käyttävässä kyselyssä korvataan näkymä sen määrittelyllä ja sitten laaditaan toteutussuunnitelma tällaiselle muokatulle kyselylle. Tallennettuja johdettuja tauluja (vedoksia, snapshots) käytetään sensijaan juuri kyselyjen tehostamiseen.
Joissakin tietokannan hallintajärjestelmissä on mahdollista kohdistaa ylläpito-operaatioita näkymiin. Operaatio kohdistuu tällöin näkymän perustana olevaan perustauluun. Kaikkien näkymien kautta ei voi suorittaa ylläpitoa. Ylläpito-operaatioiden kohteeksi soveltuvat vain sellaiset näkymät, joiden kohdalla on yksiselitteisesti pääteltävissä miten perustaulua on muutettava. Esimerkiksi yhteenvetotietoja sisältäviin näkymiin ei voi kohdistaa ylläpito-operaatioita kuten ei myöskään liitokseen tai yhdisteeseen perustuviin näkymiin.
Ylläpito on yleensä mahdollista vain, jos