Käsitetaso (autoja...) Rakennetaso (Taulu Auto(r..)) Talletustaso (Tiedosto Auto levyllä...) TIETOKANTAJÄRJESTELMÄ(DBS) Sovellusohjelmat Tietokannanhallintajärjestelmä(TKHJ) / (DBMS) Tietokanta KESKUSKONEMALLI (esim. WWW) pääte pääte pääte | | | sovellusohjelmat <--keskuskone TKHJ | tietokanta TIEDOSTOPALVELINMALLI (esim. lähiverkko) sov.ohj sov.ohj sov.ohj TKHJ TKHJ TKHJ | | | //tiedostot/lohkot Tiedostopalvelin | tietokanta ASIAKAS-PALVELIN-MALLI (työkuorma jaetaan palvelimen ja päätteiden kesken) sov.ohj sov.ohj sov.ohj TK asia- TK asia- TK asia- kasliit- kasliit- kasliit- tymä tymä tymä | | | //palvelupyynnöt, rajatut tiedot TK palvelinliittymä TKHJ | tietokanta create identified by ; //käyttäjälle annetaan tunnus ja salasana grant ; alter user identified by ; //salasanan vaihto drop user [cascade]; //käyttäjän poisto. cascade-sanalla poistetaan //myös käyttäjään liittyvät taulut. käyttäjää ei //voi poistaa, ilman cascadea, jos siihen littyy tauluja grant on to { | | public} //jaettavat oikeudet revoke on from {... //kumottavat oikeudet KAAVIOT create schema authorization //luodaan drop schema [cascade] //poistetaan TAULUT CREATE TABLE kurssi ( koodi numeric(8) NOT NULL //decimal, int, smallint. numeric([pituus],[tarkkuus]) CHECK koodi between 1 and 100, nimi varchar(40) NOT NULL //bit = kuva,video,ääni DEFAULT 'WIIBL' , ? aika date NOT NULL , //time, timestamp, interval PRIMARY KEY (koodi), FOREIGN KEY (luennoija) REFERENCES opettaja ON DELETE cascade //restrict (=esto, oletus) | nullify (=tyhjä arvo) ON UPDATE restrict ); + nimi number(4) NOT NULL, alter table Kurssi add Luentotunnit numeric(2); //sarakkeen lisäys alter table Kurssi modify Nimi varchar(60); //sarakkeen pituuden muutos. lyhennys //tai tyypin muunto ei yleensä toimi, jos taulussa jo rivejä alter table Kurssi drop Opintoviikot; //sarakkeen poisto SELECT //tulostietomäärittely FROM //kohdetaulut WHERE //valintaehdot GROUP BY //ryhmitystekijät GROUP BY A / BY A,B,C.. n-1 saraketta HAVING //ryhmärajoitteet ORDER BY [ascending]//järjestysperusta [descending] tai [asc], [desc] Sukunimi||' '||Etunimi AS Nimi //merkkien yhteen liittäminen MATEMAATTISIA FUNKTIOITA abs(luku) //luvun itseisarvo floor(luku) //suurin kokonaisluku, joka on pienempi tai yhtäsuuri kuin luku mod(luku1,luku2) //jakojäännös kun luku1 jaetaan luvulla2 round(luku, tarkkuus) //pyöristys tarkkuuden osoittamaan desimaalitarkkuuteen truncate(luku, tarkkuus)//katkaisu --||-- concat(mjono1, mjono2) //liittää merkkijonot peräkkäin length(mjono) //merkkijonon pituus tietokanta.kaavio.taulu.sarakenimi //täydellinen sarakeviittaus luku in (12,34,62,1) (alikysely) [ [as] alias [(sarakeluettelo)] ] //alikyselyt taulu1 JOIN taulu2 [ ON ] //liitos = inner | left outer | right outer | full outer //liitoksen tyypit SELECT kurssi.nimi, opettaja.nimi //esim FROM opettaja JOIN kurssi ON luennoija=opetunnus ORDER BY kurssi.nimi jos tilalla olisi LEFT OUTER JOIN, saataisin myös kurssit, joiden arvona null jos tilalla olisi RIGHT OUTER JOIN, saataisin myös opettajat, joiden arvona null JOS MONIA MONIMUTKAISIA LIITOKSIA, PIIRRÄ LUOKKAKAAVIO SELECT * FROM harjoitusryhmä //kahden arvon vertaus samalta riviltä WHERE (kurssikoodi, ryhmanro) NOT IN (SELECT kurssikoodi, ryhmanro FROM ilmoittautuminen) where opetunnus = SOME (select luennoija from...) //joku. /ANY where opetunnus > ALL (select luennoija from...) //kaikki SELECT nimi FROM opettaja //+NOT EXISTS WHERE EXISTS //jos alikysely tuottaa yhdenkin rivin (SELECT luennoija FROM kurssi //EXISTS = true. WHERE luennoija=opettaja.opetunnus) //EXISTS-lausetta käytettäessä alikysely viittaa ulomman kyselyn taulujen sarakkeisiin TAULUJEN YHDISTÄMINEN Yhdiste (UNION) //Karsii toistuvat rivit. union tekee lisää rivejä, ei Leikkaus (INTERSECT) //sarakkeita Erotus (EXCEPT) -Oraclessa MINUS SELECT nimi, maksi //sarakkeen nimeäminen FROM kurssi K, (SELECT max(opintoviikot) maksi FROM kurssi) M WHERE K.opintoviikot = M.maksi SELECT nimi, nro, count(*) //järjestys sarakkeen count(*) perusteella ... ORDER BY count(*) //count(*) laskee edellisten select-sarakkeiden määrät ei voi olla Funktio(Funktio(*)) //kahta funktiota sisäkkäin/peräkkäin Commit; //tapahtuman alkuun ja loppuun Commit [work]; (puolipiste mukaan) INSERT UPDATE //tapahtuman voi lopettaa: Rollback [work]; . peruu edelliseen committiin asti DELETE Commit; INSERT INTO kurssi (koodi, nimi) //sarakenimet pakolliset jos vain osalle sarakkeista arvot VALUES (666, 'Dimmu ja ruoanlaitto') INSERT INTO kurssi (koodi, opettaja) SELECT 122, nimi FROM opettaja WHERE nimi = 'Busta' UPDATE kurssi //jos WHERE-ehto puuttuu, tehdään muutos jokaiseen riviin SET opintoviikot = opintoviikot +1 WHERE nimi = 'Phffrrtt' DELETE FROM harjoitusryhmä //jos valintaehto puuttuu, poistetaan kaikki rivit WHERE (kurssikoodi, ryhmanro) not in (SELECT kurssikoodi, ryhmanro (FROM ilmoittautuminen) SIIRTO INSERT INTO ilmohistoria // SELECT * FROM ilmoittautumiset WHERE ilm_aika < '1.1.1999' DELETE FROM ilmoittautumiset WHERE ilm_aika < '1.1.1999' Projektio = valitut rivit yhdestä relaatiosta. OPERAATIOSYMBOLI = pii Yhdiste Leikkaus Erotus = X - S. ne X-alkiot, jotka eivät kuulu S:ään Ristitulo Valinta = normaali SQL. OPERAATIOSYMBOLI = pikku sigma Sijoitus = nimetään uudelleen relaation sarakkeet Liitos = yhdistää taulut ehdon mukaan. -> yksi taulu, jossa molempien taulujen sarakkeet ja riveinä vain ne, joissa on kaikissa uusissa sarakkeissa arvo. Yhdistää siis kahden eri taulun samojen avainten rivit yhteen. (Joissa sama avain) Luonnollinen liitos = ei tarvitse antaa liitosehtoa. muuten sama TIETOKANNAN SUUNNITTELUA -tietosisällön kartoitus -loogisten rakenteiden suunnittelu -teknisten rakenteiden suunnittelu FUNKTIONAALINEN RIIIPPUVUUS MERKITÄÄN A->B //attribuutti A = määrääjä. A:n tilalla voi olla myös attribuuttiyhdistelmä Jos jokainen A:n arvo kuvautuu yhdelle B:n arvolle, eli jos riveillä r ja s attribuutilla A on sama arvo (r.A = s.A), niin näillä riveillä täytyy myös B-attribuuteilla olla keskenään sama arvo (r.B = s.B). Jos B on funktionaalisesti riippuva A:sta tuottaa ylläoleva kysely joko yhden tai ei yhtään tulosriviä, mutta ei koskaan enempää. BOYCE-CODD NORMAALIMUODON SÄÄNTÖ Relaatiokaavion R attribuutit kuuluvat yhteen, jos kaavion attribuutteihin on funktionaalinen riippuvuus vain ja pelkästään sen avaimista. (avaimet eivät tietenkään itse ole riippuvaisia itsestään) esim. KurssinOsallistujat(kurssinNimi, ajankohta, osallistujia, ilmoittautuneita) (kurssinNimi, ajankohta) -> osallistujia --||-- -> ilmoittautuneita