Lataa esitys
Esittely latautuu. Ole hyvä ja odota
51
Structured Query Language - SQL
Tiedon määrittely Data Definition Language (DDL) , Tiedon käyttö Data Manipulation Language (DML) Kyselyt Päivitykset Näkymät (view) + Lukemistoa
52
Historiaa 1970-luvulla IBM’n kokeellisessa järjestelmässä
Alkuperäinen nimi SEQUEL (Structured English QUEry Language) Kaupallisia toteutuksia 1980-luvulta lähtien Useita standardeja: SQL1 (1986; suppea) SQL2 (1992; laaja) SQL3 (1999; moniosainen, erittäin laaja) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
53
Ominaisuudet (kuva 8.1 ja taulu 8.2)
Tiedon määrittely CREATE, DROP, ALTER Kyselyt: SELECT-lause Korkean tason käsitteellinen ilmaus eli ”mitä?” Käyttäjän on määriteltävä haluttu tulos DBMS hoitaa optimoinnin ja kyselyn toteutuksen Päivitysoperaatiot INSERT, DELETE, UPDATE Näkymien (VIEW) määrittely 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
54
Käyttötavat (ks. luku 8.7 ja 9.3-9.6)
Itsenäisenä kysely- ja päivityskielenä Upotettuna johonkin isäntäkieleen Ongelmana ns. impedance mismatch eli tieto-rakenteiden yhteensopimattomuus DBMS:n ja ohjelmointikielen välillä Metodi- eli rutiinikutsuina isäntäkielestä käsin (ns. CLI = Call Level Interface). Talletettuina moduuleina palvelimella (PSM = Persistent Stored Modules) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
55
Muita ominaisuuksia Tietokanta koostuu kaavoista (schema), jotka puolestaan koostuvat tauluista (table) Taulu eroaa relaatiosta siinä, että duplikaatti-rivit ovat sallittuja Turvallisuutta ylläpidetään määrittelemällä kaavoille omistaja, joka voi antaa ja myös peruuttaa käyttöoikeuksia muille käyttäjille 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
56
Käyttäjien määrittely
Vain tietokannan valvoja (DBA) voi luoda ja poistaa käyttäjiä CREATE USER ... DROP USER ... Salasanan vaihto: ALTER USER ... 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
57
Tiedon määrittely Kaavan määrittely: CREATE SCHEMA <tietokannan_nimi> Kantataulun määrittely: CREATE TABLE <taulun_nimi> ( <sarakemäärittely 1> <sarakemäärittely 2> ... [ <rajoitus 1> <rajoitus 2> ... ] ) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
58
Sarakkeiden määrittely
<sarakenimi> <tyyppi> [NOT NULL] [DEFAULT <oletusarvo>] [<sarakerajoitukset>] Esimerkiksi: DNUMBER INT NOT NULL CHECK (DNUMBER >0 AND DNUMBER <21); Tai määritellään tietotyyppi ehtoineen erikseen: CREATE DOMAIN D_NUM AS INTEGER CHECK (D_NUM > 0 AND D_NUM < 21); Tietotyyppejä: Merkkijonot: CHAR, VARCHAR Numeeriset: INTEGER, SMALLINT, NUMERIC, DECIMAL, REAL, FLOAT, DOUBLE Boolean Bittijonot: BIT Aikatyypit: DATE, TIME, TIMESTAMP, INTERVAL 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
59
Sarakkeita koskevat rajoitukset
Sarakemäärittelyn yhteyteen (koskee vain ko. saraketta) Erikseen sarakemäärittelyjen jälkeen (koskee useampaa saraketta) Pääavain: PRIMARY KEY (<sarakelista>) Ehdokasavain: UNIQUE (<sarakelista>) Viiteavain: FOREIGN KEY (<sarakelista>) REFERENCES <taulu>(<sarakelista>) [ON DELETE | ON UPDATE {RESTRICT | CASCADE | SET NULL | SET DEFAULT}] Rajoitus voidaan nimetä, esim. CONSTRAINT <rajoituksen nimi> FOREIGN KEY (...) ... Lisärajoituksia tietueille Esim. CREATE TABLE DEPARTMENT -lauseen loppuun: CHECK (DEPT_CREATE_DATE < MGRSTARTDATE); Eli jos osastolla olisi “syntyhetki”, niin johtaja voidaan nimittää vain ko. ajankohdan jälkeen 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
60
Määrittelyn poistaminen
Tietokantakaavan poistaminen: DROP SCHEMA <tietokannan_nimi> Cascade (kaikki poistetaan viittauksineen) Restrict (vain jos kannassa EI ole yhtään elementtiä) Kantataulun poistaminen: DROP TABLE <taulun_nimi> Restrict (vain jos tauluun EI viitata mistään) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
61
Määrittelyn muutos Kantataulun määrittelyn muutos: ALTER TABLE <taulun_nimi> Sarakkeen lisäys: ADD Sarakkeen poisto: DROP CASCADE, RESTRICT Oletusarvon määrittely tai poisto: SET DEFAULT, DROP DEFAULT Sääntöjen lisäys tai poisto: ADD CONSTRAINT, DROP CONSTRAINT 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
62
Tiedon käyttö = kyselyt
SQL vs. Relaatioalgebra Relaatioalgebra: Määritellään käsittelyoperaatioiden järjestys yksikäsitteisesti SQL: Määritellään vain haluttu lopputulos Hallintajärjestelmä sisältää optimoijan Uudemmissa SQL-versioissa myös ’algebra-maisia’ piirteitä (mm. eksplisiittinen liitos) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
63
Yksinkertaiset kyselyt (kuva 8.3)
SELECT (”valitse”) Mitä tietoja haluat tulokseen (nimi, osoite, jne.)? FROM (”tauluista”) Mitä tauluja tarvitset tuloksen ”löytämiseksi”? WHERE (”jossa”) Minkä ehtojen täytyy olla tosia haettujen tietojen osalta? Vihje: Kuvittele FROM-osalle ristitulo. Saatu valtava tulos vertaillaan tiettyjen kenttien suhteen Esim. vertailu Employee.SSN=Works_on.ESSN 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
64
SELECT-lause vs. relaatioalgebra
SELECT-osa vastaa projektiota (), eli määritellään tulokseen halutut sarakkeet FROM-osa edustaa kohderelaatiota, useamman relaation karteesista tuloa tai liitosta WHERE-osa edustaa valintaa (), mutta mukana voi olla myös liitosehtoja, jos FROM-osassa oli useita relaatioita 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
65
Esimerkkikyselyjä (1/2)
Etsi John B. Smithin syntymäaika ja osoite SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME='John' AND MINIT='B' AND LNAME='Smith' Etsi tutkimusosaston työntekijöiden nimet ja osoitteet SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME='Research' AND DNUMBER=DNO 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
66
Esimerkkikyselyjä (2/2)
Etsi Staffordissa toimivien projektien numerot, vastaavat osastonumerot, ja ko. osastojen johtajien sukunimi, osoite ja syntymäaika Mieti vastausta ensin itse ja sitten katso vastaus: SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION='Stafford' 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
67
Erikoistapauksia WHERE-osa voi puuttua; etsi osastonimet: SELECT DNAME
FROM DEPARTMENT Projektio voi puuttua; etsi osaston 5 työntekijöiden kaikki tiedot: SELECT * FROM EMPLOYEE WHERE DNO = 5 Duplikaattirivien poisto: SELECT DISTINCT ... Samannimisten attribuuttien tarkennus: <relaationimi>.<attribuuttinimi> Tätä voi käyttää kaikkialla, missä attribuuttinimi voi esiintyä (lähinnä SELECT- ja WHERE-osat) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
68
Uudelleenimeämisestä
FROM-osassa voidaan nimetä taulut uudelleen joko helppokäyttöisyyden takia tai koska samaan tauluun viitataan monta kertaa (esim. rekursio, sisäkkäiset kyselyt) Operaattori AS valinnainen Etsi kunkin työntekijän ja hänen esimiehensä etu- ja sukunimet SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM EMPLOYEE AS E, EMPLOYEE AS S WHERE E.SUPERSSN=S.SSN Myös attribuuteille voidaan antaa uusi nimi Uudelleennimeäminen voidaan tehdä SELECT- tai FROM-osassa Esim. etsi osaston 5 projektinimet: SELECT PNIMI AS PROJEKTINIMI FROM PROJECT AS P(PNIMI, PNUMERO, PAIKKA, OSNRO) WHERE P.OSNRO = 5 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
69
Joukko-operaatiot SQL:ssä
Operandeina SELECT-lausekkeet, tulossarakkeiden on oltava yhteensopivia UNION (unioni) INTERSECT (leikkaus) EXCEPT (erotus) Joukko-operaatioista usein vain osa (yleensä UNION) toteutettu käytännön järjestelmissä 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
70
Esimerkki joukko-operaatiosta
Etsi niiden projektien numerot, joissa Smith on joko työntekijänä tai vastaavan osaston johtajana (SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith') UNION (SELECT PNUMBER FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME='Smith') 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
71
Merkkijonovertailut Huom! Merkkijonot ovat ”case-sensitive”, avainsanat eivät Osittainen täsmäys: LIKE-operaattori _ = mikä tahansa yksittäinen merkki % = mikä tahansa merkkijono Esim. Etsi työntekijät, joiden osoitteessa on ainakin teksti: Houston, Texas SELECT FNAME, LNAME FROM EMPLOYEE WHERE ADDRESS LIKE ’%Houston, Texas%’ 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
72
Aritmetiikka Numeerisilla arvoilla voidaan laskea, esim.
SELECT FNAME, LNAME, 1.1*SALARY FROM EMPLOYEE Lyhennysmerkintä arvovälitestille: BETWEEN SELECT * WHERE SALARY BETWEEN AND 40000 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
73
Tulosrivien lajittelu
ORDER BY –määre kyselyn lopussa Järjestys nouseva (ASC) tai laskeva (DESC) Tulosta työntekijöiden ja heidän osastojensa nimet osastonimen mukaan laskevassa ja työntekijän nimen mukaan nousevassa järjestyksessä SELECT DNAME, LNAME, FNAME FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER = DNO ORDER BY DNAME DESC, LNAME ASC, FNAME ASC 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
74
Kertausta (E)ER:stä SQL-määrittelyihin
(E)ER-mallin luominen Reaalimaailman kuvaus Relaatiokuvauksen tekeminen Käsitteellinen malli RDBMS:ssä SQL:n DDL-määrittelyt Näin luot relaatiojoukon oikeasti
75
CASE-esimerkki (1/6) (Mikko Savela)
Eräs palveluja tuottava ja myyvä yhdistys tarvitsi käyttöönsä tietokantaa, jonka avulla pidettiin kirjaa yhdistyksen jäsenistä, asiakkaista sekä annetuista palveluista. Järjestelmän suunnitteli ja toteutti tietokantoihin erikoistunut tietotekniikan palveluyritys. 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
76
CASE-esimerkki (2/6) (Mikko Savela)
Järjestelmän tietokantaan oli suunniteltu henkilö-entiteetti, joka sisälsi asiakkaiden henkilötietoja. Etunimi ja sukunimi oli jaettu kahteen attribuuttiin. Aluksi yhdistyksen toiminta oli varsin pienimuotoista ja palveluja myytiin vain jäsenille. Hieman myöhemmin palvelumyynti ulotettiin kattamaan myös yhdistyksen ulkopuolisia asiakkaita. Oletus tietokannassa: Asiakas on luonnollinen henkilö, joka on ko. yhdistyksen jäsen Alkuperäinen tiedon käyttötarkoitus muuttui Vastaako tietokanta enää reaalimaailman tilannetta? Pyrittiinkö tulevaisuuden tarpeet ottamaan huomioon alun perin? 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
77
CASE-esimerkki (3/6) (Mikko Savela)
Myöhemmin asiantuntijayritys teki yhdistyksen käyttöön kyselyn, jonka avulla voitiin luoda helposti postitustarrat asiakkaille tehtävää postittamista varten. Kyselyssä tarkistettiin, ettei postitustarroihin oteta mukaan kahta kertaa samoja osoitteita (postitusta ei haluttu tehdä moninkertaisina esimerkiksi yhden perheen kaikille jäsenille) sekä varmistettiin, ettei mikään postitukseen tarvittavista kentistä ole tyhjä (Etunimi, Sukunimi, Osoite, Postinumero ja Postitoimipaikka). Asiantuntijayritys päätti toteuttaa tyhjien kenttien tarkistuksen kyselyssä, koska yhdistyksessä oli käytössä tapa poistaa järjestelmästä sellaiset tiedot, joiden oikeellisuudesta ei voitu olla varmoja. Esimerkiksi kun posti palautti jonkin mainoksen tai kirjeen virheellisen osoitteen vuoksi, poistettiin kyseinen väärä tieto tietokannasta. 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
78
CASE-esimerkki (4/6) (Mikko Savela)
Myöhemmin yhdistys laajensi toimintaansa edelleen koskemaan myös asiakasyrityksiä. Nopeasti tilauksia käsittelevät henkilöt omaksuivat tavan tallentaa asiakasyrityksen nimitiedon etunimikenttään ja mahdollisen yhteyshenkilön nimen sukunimikenttään. Kaikissa asiakasyrityksissä ei kuitenkaan ollut yhteyshenkilöä, jolloin sukunimikenttä jäi tyhjäksi. Viimeistään aiheellista päivittää tietokannan rakennetta Postitustarrojen tekoon käytettiin edelleen vanhaa, hyvin toimivaksi todettua tarrakyselyä. Tiedon tallentamisen periaatteet olivat kuitenkin muuttuneet, joten kysely jätti automaattisesti pois myös ne yritykset, joilla ei ollut nimettyä yhteyshenkilöä. 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
79
CASE-esimerkki (5/6) (Mikko Savela)
Kyselyn pyynnöstä suorittanut toimistosihteeri ei missään vaiheessa epäillyt järjestelmän toimivuutta, vaikka osa asiakkaista jäikin ilman postitusta. Edellä esitetyssä esimerkissä käy ilmi mahdollisten virheiden ilmenemisen riskejä sekä niiden havaitsemisen vaikeus. Käyttäjät käyttivät järjestelmää totutunlaisesti, mutta tiedon tallentamisen periaatteissa tapahtui kuitenkin muutos. Tietokantaan ei tehty muutoksia ja käyttäjien oletus oli, että järjestelmää voidaan käyttää edelleen halutunlaisesti. Todellisuudessa kentän tyhjänä olemisen merkitys ei enää uudessa tilanteessa ollut yksiselitteinen ja tulosjoukosta (postitustarrat) jäi puuttumaan tarroja. 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
80
CASE-esimerkki (6/6) (Mikko Savela)
Kysymyksiä Kuka oli vastuussa tarrojen puuttumisesta? Keillä kaikilla oli mahdollisuus vaikuttaa virheen havaitsemiseen? Miksi virhe tapahtui? Miten virheen olisi voinut estää? Miten tietokanta olisi voitu suunnitella ja toteuttaa siten, ettei esitetty ilmiö olisi aiheuttanut virhetilannetta? Miten postitustarrojen tulostaja olisi voinut havaita virheen? Eräs opetus: mikäli tietokannassa on tietoja tai merkityksiä, joista voidaan päätellä ohjelmallisesti asioita, niin silloin tietokanta on suunniteltava ja toteutettava siten, ettei ohjelmointirajapintaa voi vahingossa ohittaa! DBMS 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
81
(E)ER-mallinnus (1/4) Täydellistä ratkaisua ei ole, vain hyviä ja huonoja Enemmän taidetta kuin tiedettä Pohdi vain kohteen luonnetta ja käyttäytymistä, älä toteutusta! Jos et tunne kohdetta, mallintaminen on miltei mahdotonta Kerää tietoa kohteesta Tietokannan voi rakentaa ilman (E)ER-mallia Mallinnus on vain työkalu kohteen ja sovellustarkoituksen pohtimiseen sekä sen muutoksen ennakointiin Ilman työkalua ratkaisun laatu lienee keskimäärin heikompi Kuinka paljon haluat maksaa laadusta? Virhe voi olla katastrofaalinenkin (vrt. Challenger) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
82
(E)ER-mallinnus (2/4) Vaikeita asioita mallinnustekniikassa
Entiteetti vs. liittymä? Attribuuttien määrä Avaimen valinta Luonnollisuus (ei mielellään ”ID”) Ei redundanssia (pvm) tai NULL-arvoja Vrt. avainkäsite relaatiomallin yhteydessä Täydellinen liittymä Kaikki ko. entiteetin instanssit mukana liittymässä Aliluokka vs. kategoria ”Vehicle” vs. ”Registered_vehicle” 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
83
(E)ER-mallinnus (3/4) Heikko entiteetti
Kokonaisuus, jolla ei ole riittävästi identifioivia attribuutteja, mutta jonka sisäinen rakenne tai käyttäytyminen puoltaa oman entiteetin kuvaamista “Heikkous” on siis oikeasti entiteetin ominaisuus, joka halutaan kuvata Kirjan COMPANY-kaavion DEPENDENT on oiva esimerkki heikosta entiteetistä: firman tarkoitus ei ole ylläpitää lähiomaisista kattavaa rekisteriä, vaan ainoastaan tarpeelliset tiedot suhteessa työntekijään Toki DEPENDENT voitaisiin mallintaa myös moniarvoisena yhdistelmäattribuuttina, mutta oma rakenne puoltaa heikon entiteetin esittämistä 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
84
(E)ER-mallinnus (4/4) Tiedon ja toiminnan mallintamisen sekoittaminen
Malli kuvaa tietoa, jota kannassa on tai tulee olemaan Mallinnuksen tarkoituksen unohtaminen Tieto on peräisin todellisesta maailmasta Kohteen rajaus tapahtuu viimeistään tietomallia luotaessa Tietoa, jota tarvitaan jostakin syystä, halutaan tallentaa ja ylläpitää 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
85
Relaatiomalli (1/2) Vain yksi mahdollinen tietomalli kolmikaava-arkkitehtuurin käsitetasolle Suosittu Säännöt, joita noudattamalla homma pysyy kasassa Arvojoukkorajoite attribuutit ovat arvojoukossaan Avainrajoite pääavaimissa ei duplikaatteja Olioeheys pääavaimissa ei NULL-arvoa Viite-eheys viiteavain viittaa olemassa olevaan pääavaimeen tai viiteavain on NULL (pääavain ei NULL) 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
86
Relaatiomalli (2/2) (E)ER-malli Relaatiomalli Entiteetti Relaatio
1:1 tai 1:N –liittymä Vierasavain M:N –liittymä Relaatio ja 2 vierasavainta N-asteinen liittymä Relaatio ja N kpl vierasavaimia Attribuutti Attribuutti Koosteinen attr. Kokoelma yksink. attribuutteja Moniarvoinen attr. Relaatio ja vierasavain Arvojoukko Arvojoukko Avainattr. Pää- tai toisioavain 2004 © Antti Tuomisto, 2001 © Jukka Teuhola muokattu 2005 (Tommi Tapanainen) Tietojenkäsittelytieteet, Turun yliopisto
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.