HELIA 1 (14) Luento Näkymät... 2 Relaatiotyypit... 2 Taulu - Tallennettu relaatio... 3 Näkymä - Virtuaalirelaatio... 3 Tulosrelaatio - Kyselyn tulos... 3 Otetaulut - Tauluun tallennettu kyselyn tulos... 4 Työtaulut - Väliaikaisiksi luodut taulut... 4 Näkymien määrittely... 5 Ominaisuuksien uudelleen nimeäminen... 6 Näkymien poisto... 7 Näkymien käsittely... 8 Päivitettävyys / SQL-92... 9 Hyödyt... 10 Vaarat... 13 Suositus... 14
HELIA 2 (14) Näkymät Relaatiotyypit 1. Taulut Table 2. Näkymät View 3. Tulosrelaatiot Query result 4. Otetaulut Snapshot 5. Työtaulut Temporary table
HELIA 3 (14) Taulu - Tallennettu relaatio Nimetty Itsenäinen Fyysisesti olemassa, ts. RDBMS tallentaa taulut ja niiden sisällön johonkin fyysiseen paikkaan levyllä. Tietojen olemassaolo riippuu taulun olemassaolosta Määritellään CREATE TABLE lauseella Näkymä - Virtuaalirelaatio Nimetty Johdettu kyselyn avulla Ei fyysisesti olemassa Tietojen olemassaolo ei riipu näkymän olemassaolosta Näyttää tietosisällön ajantasaisesti Määritellään CREATE VIEW lauseella Tulosrelaatio - Kyselyn tulos Tietyn kyselyn tulos Määritellään SELECT lauseella
HELIA 4 (14) Otetaulut - Tauluun tallennettu kyselyn tulos Tilannevedos, snapshot Nimetty Johdettu kyselyn avulla On fyysisesti olemassa Vain luku sallittu Virkistetään (refresh) määräajoin Ei SQL-92 standardissa! Työtaulut - Väliaikaisiksi luodut taulut Temporary table Nimetty Tuhotaan automaattisesti määriteltynä hetkenä esim. commit:n yhteydessä
HELIA 5 (14) Näkymien määrittely SQL-92 syntaksi CREATE VIEW <view_name> [ <left paren> <view column list> <right paren>] AS <query expression> CREATE VIEW v_lehtori AS SELECT opettajanro, sukunimi, etunimi, puh FROM Opettaja WHERE nimike = LEHTORI Ä Kaikenlaiset SQL-lauseet kelpaavat: (toimittajakohtaisia rajoituksia voi olla...) Laskutoimitukset ( col1 + col2 ) * 1,22 Funktiot NVL( col1, 0 ) Valintalauseet WHERE col5 > 10 Ryhmitys GROUP BY Liitokset FROM table1 JOIN table2 Joukko-operaatiot UNION / INTERSECT /... Alikyselyt Duplikaattien karsinta DISTINCT Ä Order by määritystä ei voi antaa!
HELIA 6 (14) Ominaisuuksien uudelleen nimeäminen Kyselyssä poimitut ominaisuudet voidaan nimetä uudelleen Ä Etenkin johdetut kentät (esim. laskutoimitukset) kannattaa nimetä Standardin mukaan nimeäminen tehdään a) määrittelemällä sarakenimien lista (kaikki) suluissa näkymän nimen jälkeen CREATE VIEW v_esim (sukupuoli) AS SELECT DISTINCT sp FROM henkilo b) antamalla itse kyselyssä kentälle toinen nimi as -lausekkeella CREATE VIEW v_esim AS SELECT DISTINCT sp AS sukupuoli FROM henkilo Ä Tietokantatoimittajilla on (myös) standardista poikkeavia kenttien uudelleennimeämistapoja
HELIA 7 (14) Näkymien poisto DROP VIEW <view_name>; Vain määrittely poistetaan; dataan ei kosketa
HELIA 8 (14) Näkymien käsittely Näkymät voivat olla myös uusien kyselyjen (ja näkymien) lähtökohtana aivan kuten taulut SELECT sukunimi, etunimi puh FROM v_lehtori WHERE puh = 300 Näkymät eivät aseta rajoituksia kyselyille Näkymät asettavat rajoituksia päivitettävyydelle (erilaisia eri tietokantatuotteissa)
HELIA 9 (14) Päivitettävyys / SQL-92 1. Kysely kohdistuu vain 1 tauluun 2. Distinct määrettä ei saa käyttää 3. Group by ei saa olla käytössä 4. Where-ehdossa ei saa olla alikyselyä 5. Kyselyssä valittavien kenttien tulee kattaa kaikki ko. relaation not null määritetyt kentät joille ei ole määritelty oletusarvoa Ä Päivitettävyyden ehdot vaihtelevat eri RDBMS:ssä
HELIA 10 (14) Hyödyt Käyttäjä(ryhmä)kohtainen näkökulma Eri käyttäjät voivat nähdä saman datan sovitettuna omaan näkökulmaansa Tietoriippumattomuuden lisääminen Mikäli tietokantaan joudutaan tekemään muutoksia, näkymän avulla voidaan käyttäjälle / Ohjelmille tarjota entisenkaltainen rajapinta tietoon. Ts. muutokset tietokannan tauluissa eivät välttämättä aseta muutosvaatimuksia sovellusohjelmille / käyttäjien kyselyille
HELIA 11 (14) Tietorakenteen yksinkertaistaminen Eri tauluihin kootut tiedot voidaan yhdistää näkymässä ts. purkaa tietokannan monimutkaisuutta tiedon luotettavuuden (ristiriidattomuuden) kärsimättä Ä (keskeinen osassa Data Warehouse tuotteita, esim. Business Objects) Monimutkaisten kyselyjen tallentaminen näkymiksi a) vähentää virhemahdollisuuksia b) parantaa hallittavuutta modulaarisempi rakenne! + SQL:n rajoitusten kiertäminen (tyypillisesti ryhmäfunktioiden yhteydessä) Tietosuojan rakentaminen Näkymien avulla voidaan rajata a) Kenttiä b) Tietueita Jotka ovat eri käyttäjäryhmien nähtävissä / päivitettävissä (...tähän palataan tarkemmin myöhemmin...)
HELIA 12 (14) Esim. 1: Rakenteen yksinkertaistaminen TUOTERYHMÄ (tuoteryhma#, tuoteryhman_nimi) TUOTE (tuote#, tuotteen_nimi, tuoteryhma#) CREATE VIEW W_TUOTTEET (tuoteno, nimi, ryhma) AS SELECT t.tuote#,, t.tuotteen_nimi, tr.tuoteryhman_nimi FROM tuote t LEHT JOIN tuoteryhma tr ON t.tuoteryhma# = tr.tuoteryhma# ; Esim. 2: Koodiston avaaminen HENKILO (hetu, nimi, osoite, sukupuoli) CREATE VIEW W_HENKILOT (hetu, nimi, osoite, sukupuoli) AS SELECT hetu,, nimi, osoite, case sp when 'N' then 'nainen' when 'M' then 'mies' else 'muu' end FROM henkilo ;
HELIA 13 (14) Vaarat Hallittavuuden katoaminen Näkymien luonti kevytmielisesti jokaiseen tarpeeseen kasvattaa näkymien määrän kontrolloimattomaksi Näkymien kenttien nimeäminen toisistaan ja tietokannan tauluista poikkeavasti voi johtaa sekavuuteen Tehottomuus Kysely saattaa muodostua monesta päällekkäisestä kyselystä, joita RDBMS:n optimoijan voi olla vaikea optimoida Päivitettävyyden rajoitukset Näkymien suunnittelussa otettava huomioon päivitystarpeet ja valitun RDBMS:n tarjoamat mahdollisuudet
HELIA 14 (14) Suositus Tavoittele tietoriippumattomuutta! Ä Älä viittaa ohjelmissa koskaan suoraan tauluihin! Ä Käytä välissä näkymää