Tietokannat II -kurssin harjoitustyö



Samankaltaiset tiedostot
Tietokannat II -kurssin harjoitustyö

Tietokannat I. c 2007 Olli Luoma olli.luoma@it.utu.fi

YHTEYSSUHDE (assosiation)

Mikä yhteyssuhde on?

Relaatioalgebra. Luku Joukko-opilliset operaatiot Yhdiste eli unioni Leikkaus

1 Tehtävän kuvaus ja analysointi

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

CSE-A1200 Tietokannat

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL - STRUCTURED QUERY LANGUAGE

Ohjelmoinnin jatkokurssi, kurssikoe

Olio-ohjelmointi Javalla

Toteutusdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmistojen mallintaminen, olioja relaatiomallinnuksen suhteesta

3. Taulujen määrittely ja muuttaminen

2. Käsiteanalyysi ja relaatiomalli

Opintopiiritehtävä 3: Verkkohuutokauppa

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

HELIA 1 (12) Outi Virkki Tiedonhallinta

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Java ja tietokannan käsittely (JDBC)

Periytyminen (inheritance)

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

HELIA 1 (14) Outi Virkki Tiedonhallinta

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Listarakenne (ArrayList-luokka)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

HELIA 1 (19) Outi Virkki Tietokantasuunnittelu

HELIA 1 (17) Outi Virkki Tiedonhallinta

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JUnit ja EasyMock (TilaustenKäsittely)

HELIA 1 (11) Outi Virkki Tiedonhallinta

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

7. Näytölle tulostaminen 7.1

Ohjelmointi Tunnilla 1 (5) Viikko 7 tuntitehtäviä: metodien tekeminen Javalla

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

ITKP102 Ohjelmointi 1 (6 op)

HAAGA-HELIA TIKO-05 1 (19) ICT23a Tietokannan suunnittelu ja toteutus O.Virkki

Ohjelmointi 2 / 2010 Välikoe / 26.3

Tuotteiden tiedot: Lisää uuden tuotteen tiedot. Muuta tai poista tuotteen tiedot. Selaa kaikkien tuotteiden tietoja.

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

3. Käsiteanalyysi ja käsitekaavio

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

TIETORAKENTEET JA ALGORITMIT

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Lista luokan sisällä

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Luokat ja oliot. Ville Sundberg

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

TIEDONHALLINTA - SYKSY Luento 2. Pasi Ranne /8/17 Helsinki Metropolia University of Applied Sciences

4. Luokan testaus ja käyttö olion kautta 4.1

LINUX-HARJOITUS, MYSQL

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Lohdutus - tietokantadokumentti

UML ja luokkien väliset suhteet

Javan perusteita. Janne Käki

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Tietokantakurssit / TKTL

Liitokset - haut useaan tauluun

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

CSE-A1200 Tietokannat

public static void main (String [] args)

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Tietotekniikan laitos Käki-projekti TIETOKANTASUUNNITELMA. 1. Johdanto

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Luokan sisällä on lista

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Delegaatit ja tapahtumakäsittelijät

1. Mitä tehdään ensiksi?

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Relaatiomalli ja -tietokanta

KOHDELUOKAN MÄÄRITTELY

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

18. Abstraktit tietotyypit 18.1

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

Toteutusdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

TIEDONHALLINTA - SYKSY Luento 7. Pasi Ranne /10/17 Helsinki Metropolia University of Applied Sciences

Oliot viestivät metodeja kutsuen

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

ITKP102 Ohjelmointi 1 (6 op)

HAAGA-HELIA heti09 1 (27) ICT05 Tiedonhallinta ja tietokannat O.Virkki Relaatiomalli

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Tietokantasovellus: drinkkiarkisto

Transkriptio:

Tietokannat II -kurssin harjoitustyö Olli Opiskelija (123), olli.opiskelija@foo.fi Maija Mallioppilas (321), maija.mallioppilas@foo.fi 13.3. 2007 1

Sisältö 1 Tietokannan kuvaus 3 1.1 Tietokannan rakenne.................................. 3 1.2 Relaatiokaava ja relaatioiden kuvaus.......................... 3 2 Luokkien kuvaus 4 2.1 Asiakas........................................ 4 2.2 Tuote......................................... 5 2.3 Kanta......................................... 6 3 Testaus 7 A Tietokannan luontikomennot 9 B Tietokannan sisältö 9 C Ohjelmalistaukset 10 2

1 Tietokannan kuvaus 1.1 Tietokannan rakenne Työmme aiheeksi valitsimme pienen verkkokaupan tietokannan toteuttamisen. Kaupan tietokannassa on tarkoitus pitää yllä tietoja asiakkaista, tilauksista, tuotteista sekä tuotteiden toimittajista. Koska työn oli tarkoitus olla yksinkertainen, tietokantaa yksinkertaistettiin usealla tavalla. Niinpä tietokantaan ei tallenneta esim. tietoja tuotteiden varastosaldoista, asiakkaiden osoitteista tai hinnoista, joilla tuote on tilattu,vaikka käytännössä nämä tiedot olisivatkin tarpeen. Tietokannan ER-kaavio on esitetty kuvassa 1. Kuva 1: Tietokannan ER-kaavio. 1.2 Relaatiokaava ja relaatioiden kuvaus Tavallisia muunnossääntöjä käyttäen kuvassa 1 esitetty ER-kaavio muunnettiin seuraaviksi relaatioiksi: Asiakas(Id,Etunimi,Sukunimi) Tilaus(AsiakasId,TuoteId) Tuote(Id,Nimi,Kuvaus,ToimittajaId) Toimittaja(Id,Nimi) ER-kaavion perusteella määräytyivät myös tietokannan viiteavaimet, jotka on kohteineen lueteltu alla: AsiakasId Asiakas.Id TuoteId Tuote.Id ToimittajaId Toimittaja.Id 3

Relaatiot ja erityisesti niiden attribuuttien merkitys on kuvattu tarkemmin seuraavassa: Relaatio Asiakas vastaa asiakasta. Relaatiolla on avainattribuutti Id, joka vastaa asiakasnumeroa, sekä attribuutit Etunimi ja Sukunimi, jotka vastaavat asiakkaan nimeä. Tilaus liittää toisiinsa asiakkaan ja tuotteen. Relaatiolla on avainattribuutit AsiakasId ja TuoteId, jotka vastaavat tilaajan asiakasnumeroa ja tilatun tuotteen tuotenumeroa. Relaatio Tuote vastaa luonnollisesti tuotetta. Relaation avainattribuutti Id vastaa tuotenumeroa. Muita attribuutteja ovat Nimi, Kuvaus, Hinta ja ToimittajaId, joista viimeinen vastaa tuotetta toimittavan toimittajan tunnistetta. Relaatio Toimittaja vastaa toimittajaa. Relaatiolla on attribuutit Id ja Nimi, jotka vastaavat toimittajan tunnistetta ja nimeä. Attribuutti Id on relaation pääavain. 2 Luokkien kuvaus 2.1 Asiakas Luokka Asiakas vastaa ER-kaavion Asiakas-entiteettiä. Niinpä sillä on seuraavat jäsenmuuttujat: * Asiakkaan id tietokannassa. private int id; * Asiakkaan etunimi. private String etunimi; * Asiakkaan sukunimi. private String sukunimi; Asiakkaita voidaan luoda seuraavan konstuktorin avulla: * Luo asiakkaan. public Asiakas(int id, String etunimi, String sukunimi) Luokassa on seuraavat funktiot: * Palauttaa asiakkaan id:n tietokannassa. public int annaid() * Palauttaa asiakkaan etunimen. public String annaetunimi() 4

* Palauttaa asiakkaan sukunimen. public String annasukunimi() * Palauttaa asiakkaan tilaamat tuotteet. * Alkuehto: Tietokantayhteys on alustettu. public ArrayList<Tuote> annatuotteet() * Palauttaa asiakkaan merkkijonoesityksen. public String tostring() Lisäksi luokkaan kirjoitettiin seuraava proseduuri; koska tilaus lisätään tietokantaan, on tietokantayhteyden olatava alustettu: ** * Lisää asiakkaan tilauksiin tuotteen. * Alkuehto: Tietokantayhteys on alustettu ja tuote ei ole null. public void lisaatuote(tuote tuote) 2.2 Tuote Tuote-luokka mallintaa yksittäistä tuotetta. Luokalla on seuraavat jäsenmuuttujat: * Tuotteen id tietokannassa. private int id; * Tuotteen nimi. private String nimi; * Tuotteen kuvaus. private String kuvaus; * Tuotteen hinta. private double hinta; * Tuotteen toimittajan nimi. private String toimittaja; Tuotteita voidaan luoda seuraavan konstruktorin avulla: 5

* Luo tuotteen. public Tuote(int id, String nimi, String kuvaus, double hinta, String toimittaja) Tuote-luokassa on seuraavat funktiot: * Palauttaa tuotteen id:n tietokannassa. public int annaid() * Palauttaa tuotteen nimen. public String annanimi() * Palauttaa tuotteen kuvauksen. public String annakuvaus() * Palauttaa tuotteen hinnan. public double annahinta() * Palauttaa tuotteen toimittajan nimen. public String annatoimittaja() * Palauttaa tuotteen merkkijonoesityksen. public String tostring() 2.3 Kanta Luokan Kanta tarkoituksena on tarjota rajapinta tietokannan käsittelyyn. Luokan operaatiot on suunniteltu tukemaan tietokannan käyttöä kaupan asiakkaiden käyttämässä sovelluksessa. Niinpä esim. asiakkaiden tilausten tutkiminen ja tietokannan päivittäminen tuotteen tilaamista lukuunottamatta jätettiin toteuttamatta. Luokalla on seuraava jäsenmuuttuja: * Yhteys kantaan. private static Connection kanta; Luokassa on seuraavat staattiset funktiot; jokainen funktio tietysti vaatii yhteyden alustamista: * Palauttaa asiakkaan tilaamat tuotteet. Jos tilauksia ei ole, palauttaa tyhjän listan. * Alkuehto: Tietokantayhteys on alustettu ja asiakas ei ole null. public static ArrayList<Tuote> annatilaukset(asiakas asiakas) 6

* Palauttaa kaikki kaupan olevat tuotteet. * Jos tuotteita ei ole, palauttaa tyhjän listan. * Alkuehto: Tietokantayhteys on alustettu. public static ArrayList<Tuote> annatuotteet() * Palauttaa kaupan olevat tuotteet annetulta hintaväliltä. * Jos tuotteita ei ole, palauttaa tyhjän listan. * Alkuehto: Tietokantayhteys on alustettu. public static ArrayList<Tuote> annatuotteet(double minimi, double maksimi) Lisäksi luokassa on seuraavat proseduurit: * Alustaa tietokantayhteyden. public static void alusta() * Lisää asiakkaan tuotetilauksen. * Alkuehto: Tietokantayhteys on alustettu ja tuote tai asiakas ei ole null. public static void lisaatilaus(asiakas asiakas, Tuote tuote) * Sulkee yhteyden. * Alkuehto: Tietokantayhteys on alustettu. public static void sulje() 3 Testaus Tietokantayhteyden kokeilemiseksi suunniteltiin seuraava testaus: 1. Alustetaan tietokantayhteys. 2. Luodaan Hanhikki Hillosilmää vastaava asiakasolio. 3. Haetaan kaikki myytävänä olevat tuotteet. 4. Haetaan Hanhikin tilaukset tietokannasta; tuloksena pitäisi olla tyhjä lista. 5. Lisätään Hanhikille tilaukset joistakin tuotteista. 6. Haetaan Hanhikin tilaukset tietokannasta; tuloksena pitäisi olla lista, joka sisältää edellä lisätyt tuotteet. 7. Suljetaan yhteys. Edellisellä testausjärjestelyllä ohjelma tuotti seuraavan, oikeellisen tuloksen: 7

Yhteys avattu. Kaikki kaupan olevat tuotteet: [<1, Hilavitkutin, Orimattilan kone>, <2, Vimpain, Jaskan vimpain>, <3, Masiina, Jaskan vimpain>, <4, Jiirisaha, Orimattilan kone>] Asiakkaan <3, Hanhikki, Hillosilmä> tilaamat tuotteet: [] Asiakkaan <3, Hanhikki, Hillosilmä> tilaamat tuotteet: [<1, Hilavitkutin, Orimattilan kone>, <2, Vimpain, Jaskan vimpain>] Yhteys suljettu. Press any key to continue... 8

A Tietokannan luontikomennot Tietokanta luotiin seuraavilla komennoilla: CREATE TABLE asiakas ( id INT NOT NULL, etunimi TEXT NOT NULL, sukunimi TEXT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE toimittaja ( id INT NOT NULL, nimi TEXT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE tuote ( id INT NOT NULL, nimi TEXT NOT NULL, kuvaus TEXT NOT NULL, hinta NUMERIC NOT NULL, toimittajaid INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (toimittajaid) REFERENCES toimittaja ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE tilaus ( asiakasid INT NOT NULL, tuoteid INT NOT NULL, PRIMARY KEY (asiakasid, tuoteid), FOREIGN KEY (asiakasid) REFERENCES asiakas ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (tuoteid) REFERENCES tuote ON UPDATE CASCADE ON DELETE RESTRICT ); B Tietokannan sisältö Tietokannan sisältö ennen testiajoja oli seuraava: Kauppa=# select * from asiakas; id etunimi sukunimi ----+----------+------------ 1 Orimatti Teuras 2 Laupias Psaltari 3 Hanhikki Hillosilmä (3 rows) Kauppa=# select * from tilaus; asiakasid tuoteid -----------+--------- 1 1 2 1 2 3 9

(3 rows) Kauppa=# select * from tuote; id nimi kuvaus hinta toimittajaid ----+--------------+---------------------------------------+-------+-------------- 1 Hilavitkutin Laatuisa vitkutin 10.99 2 2 Vimpain Vimmattu vimpaaja 99.99 1 3 Masiina Tuotantoväline lisäarvon tuottamiseen 12.50 1 4 Jiirisaha Komea sähkötyökalu 0.99 2 (4 rows) Kauppa=# select * from toimittaja; id nimi ----+------------------ 1 Jaskan vimpain 2 Orimattilan kone (2 rows) Testiajojen jälkeen - eli kun Hanhikki Hillosilmä oli tilannut kaksi tuotetta - Tilaus-taulun sisältö oli seuraava: Kauppa=# select * from tilaus; asiakasid tuoteid -----------+--------- 1 1 2 1 2 3 3 1 3 2 C Ohjelmalistaukset Lopullisen työn paperiversiossa tähän kohtaan liitetään lähdekoodit. Koska koodirivit ovat usein pitkiä, on suositeltavaa, että koodit tulostetaan paperille pystysuunnassa. Tämä helpottaa koodin lukemista huomattavasti. 10