Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! 345396! killedwhale@kapsi.fi! Henri Nurmi! 345545! henri.nurmi@kapsi.fi!



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

CSE-A1200 Tietokannat

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

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

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

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

Tietokannat II -kurssin harjoitustyö

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

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

CSE-A1200 Tietokannat

SQL - STRUCTURED QUERY LANGUAGE

TIETOKANTOJEN PERUSTEET MARKKU SUNI

SELECT-lauseen perusmuoto

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

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

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

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Opintopiiritehtävä 3: Verkkohuutokauppa

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

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

Liitokset - haut useaan tauluun

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

OUTER JOIN se vanha kunnon kaveri

HELIA 1 (11) Outi Virkki Tiedonhallinta

Tietokannat II -kurssin harjoitustyö

2. Käsiteanalyysi ja relaatiomalli

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

CSE-A1200 Tietokannat

Relaation tyhjyyden testaaminen

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

Lohdutus - tietokantadokumentti

INSERT INTO koulutus VALUES ( Helsinki, 22.6, 4);

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

CSE-A1200 Tietokannat

Duplikaattien havaitseminen ja poisto DataFlux välinein

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

PISKI HANKE - SATEENVARJO:

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

Denormalisointia turvallisesti. Ougf syysseminaari Pörssitalo Helsinki Timo Raitalaakso

HELIA 1 (14) Outi Virkki Tiedonhallinta

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

INTINU13A6 Java sovellukset

Yhdiste, leikkaus, erotus ym.

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

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

Opiskeluoikeuksien maaran tiedonkeruu

Oripään kirjaston käyttösäännöt. Oripään kunnankirjasto ja muut Loimaan seutukunnan kirjastot muodostavat yhdessä Loisto-kirjastot.

1. KÄYTTÖKONTEKSTI. jamkad VAATIMUSMÄÄRITTELY. Liite1_Vaatimusmaarittely_Elainklinikka.doc Filename: Last saved:

VINKKI: Katso Kentät Muistioon -painikkeella, mikä on taulukon nimen oikea kirjoitusasu.

KUHMON KAUPUNGINKIRJASTO KIRJASTON PALVELUT. Tervetuloa!

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

Etsi aineistoa, uusi lainoja, tee varauksia. Onnistuneita hetkiä Juolukan parissa!

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Majoitustoiminta ja palveluosaaminen

HELIA 1 (14) Outi Virkki Tiedonhallinta

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

HELIA 1 (12) Outi Virkki Tiedonhallinta

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

Copyright 2008 Ab Axiell Kirjastot Oy

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 32

Tietokantakurssit / TKTL

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

CSE-A1200 Tietokannat

KUHMON KAUPUNGINKIRJASTO KIRJASTON PALVELUT. Tervetuloa!

Java ja tietokannan käsittely (JDBC)

GALERIE EXHIBITIONS (13) 1 2 EXHIBITIONS 2

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

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

Makrojen mystinen maailma lyhyt oppimäärä

Palaute - Koha-Suomi - Support #1510 Tukipyynnöt: Kohan raportit

HELIA 1 (17) Outi Virkki Tiedonhallinta

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

Kyselyn yleisrakenne:

17 BUDJETOINTI. Asiakaskohtainen Budjetti Ylläpito-ohjelma. Dafo Versio 10 BUDJETOINTI. Käyttöohje. BudgCust Yleistä

Virta_Latausraportti - Tarkistukset

Excel-taulukkoon X- ja Y-sarakkeisiin tallennettujen koordinaattien muuntaminen paikkatietokohteiksi

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

CS-A1150 Tietokannat CS-A1150 Tietokannat / 54

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

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

Verkkokirjaston hakuohjeet

Kansallinen hankintailmoitus: Mikkelin ammattikorkeakoulu Oy : Palvelimet ja kytkin

OHJE TILAAJALLE: YHTEISLAINATILAUKSEN TEKEMINEN

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

SPARQL-workshop. Sini Pessala Kirjastoverkkopäivät KANSALLISKIRJASTO - Kirjastoverkkopalvelut

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

Transkriptio:

Harjoitustyö CSE-A1200 Tietokannat Jasse Lahdenperä 345396 killedwhale@kapsi.fi Henri Nurmi 345545 henri.nurmi@kapsi.fi 1

Ensimmäisen vaiheen ratkaisu ER-Kaavio 2

Relaatiomalli: Loanable(Id, MaximumLoanTime) Writing(Id, Name, Producers, Description, Class) Loan(Id, LoanDate, DueDate, Returned) Reservation(Id, DueDate) Customer(SSN, Name, Address, PhoneNumber) Office(Name, Address) Payment(Id, Amount, Reason, DueDate, DateOfPayment) Transport(Date, fromoffice, tooffice) CustomerHasPayment(SSN, PaymentId) CustomerHasLoan(SSN, LoanId) CustomerHasReservation(SSN, reservationid) LoanIsTypeLoanable(LoanId, LoanableId) ReservationHasWriting(ReservationId, WritingId) ReservationHasOffice(ReservationId, OfficeName) OfficeHasManyLoanable(OfficeName, LoanableId) OfficeStartsFromTransport(OfficeName, Date) TransportEndsToOffice(OfficeName, Date) TransportHasLoanable(LoanableId, Date) WritingIsTypeLoanable(WritingId, LoanableId) Kysymyksiä ja vastauksia: Mitä funktionaalisia riippuvuuksia tietokannassa vallitsee? Kaikilla avainatribuuteilla on funktionaalinen riipuvuus muihin atribuutteihin. Onko suunnitellussa tietokannassa anomalioita? Ei, tieto ei toistu, joten päivitysanomalioilta vältytään Myöskään poistoanomalioita ei ole sillä minkään datan poisto ei aiheuta muun datan menetystä Tosin esim. asiakkaan poistaminen saa aikaan poistorekursion Onko tietokanta Boyce-Codd-normaalimuodossa? Kyllä on 3

Ratkaisujen perusteluita: Toimiston nimi oletetaan muuttumattomaksi Jokaiselle suhteelle oma relaatio, kuten luentokalvoissa käsketään Suurin osa suhteista olisi kyllä järkevämpi (ainakin tilankäytön ja selkeyden kannalta) hoitaa foreignkeyllä lukuunottamatta seuraavia TransportHasLoanable tarvii oman taulunsa, koska loanable ei välttämättä kuulu mihinkään kuljetukseen Tämä siksi, että esim. Payment tai Loan liitetään suoraan yhteen asiakkaaseen Tosin voisi joissain tapauksissa aiheuttaa hassuja ristiriippuvuuksia Kuljetukset ajoitetaan niin ettei kahta kuljetusta lähde tismalleen samaan aikaan, jolloin kuljetuksen ajankohtaa voidaan käyttää avaimena Lainan Returned arvo on tyypiltään DateTime, joka on NULL jos lainaa ei ole vielä palautettu Maksun DateOfPayment on myös DateTime toimii kuten edellämainittu DataTimejen käytöllä saadaan ylläpidettyä historiaa lainoista ja maksuista näppärästi Writing on yksittäinen teos, joka on lainattavissa. Sen class-attribuutti kertoo sen tyypistä, eli siitä onko kyseessä esim CD vaiko kirja. 4

Päivitetty ER-Kaavio Lisättiin Loanable - Reservation relaatio ja lisättiin Reservable atribuutti Loanable taululle. Loan olisi toteutettavissa myös heikoilla yksilöjoukoilla, mutta nykyratkaisun avulla pystymme säilyttämään lainaushistorian. 5

Tyypilliset haut: Kirjaston tietokannasta pääsääntöisesti asiakkaan näkökulmasta etsitään lainattavia teoksia tiettyjen kriteerien perusteella, joita ovat esimerkiksi teoksen nimi, tekijä tai toimipiste jossa teos sijaitsee. Tietokannasta tullaan myös hakemaan asiakkaiden tietoja, näiden maksuja, lainaushistoriaa ja teosten kuljetuksia. Hakemistot: Avainten lisäksi hakemistot on päätetty luoda seuraaviin tauluihin: writing Indeksoidaan name ja producers. Koska näiden tietojen perusteella haetaan useimiten teoksia. loanable Indeksoidaan writing_id. Koska teoksen id:n peruustella haetaan toistuvasti lainattavia teoksia. reservation Indeksoidaan myös writing_id. Näkymät: Tietokantaan luotiin näkymät, jotka lajittelevat eri tyyppiset teokset omiin näkymiinsä atribuutin class perusteella. books dvds cds magazines Tyypilliset käyttötapaukset: Asiakas rekisteröityy kirjaston jäseneksi ja hänet tallennetaan kirjaston tietokantaan INSERT INTO customer (ssn, name, address, phone_number) VALUES ('123456-321D', 'Pekka Puupää', 'Otaniemi, 12345 Turku', '0700123123') ; Kirjasto perustaa uuden toimipisteen INSERT INTO office (name, address) VALUES ('Aalto-kirjasto', 'Otakaari 69, 00100 Espoo') ; 6

Kirjastoon tulee uusia teoksia ja lisätään näitä lainattaviksi eri toimipisteisiin INSERT INTO writing (name, producers, description, class) VALUES ('Gamasutra', 'Porno Tähti; Liekki Rakel', 'Book about positions', 'book'), ('Art of goatse', 'Tẑe Goa', 'Man sees best with open hole', 'book') ; INSERT INTO loanable(writing_id, office_name) VALUES (1, 'Aalto-kirjasto'), (1, 'Aalto-kirjasto'), (2, 'Aalto-kirjasto'), (3, 'TAIK-kirjasto'), (3, 'TAIK-kirjasto'), (3, 'TAIK-kirjasto') ; Asiakas lainaa teoksen toimipisteestä INSERT INTO loan(loanable_id, customer_ssn) VALUES (1, '110265-123M'), (2, '110265-123M') ; Kirjaston henkilökunta hakee palauttamattomat lainat, joiden palautuspäivämäärä on umpeutunut SELECT * FROM loan WHERE due_date < DATETIME('now') AND returned IS NULL; Tulos: 3 2014-04-01 13:37:00 2014-05-01 13:37:00 3 110265-123M Heti lainattavien teosten haku tekijän perusteella SELECT * FROM loanable LEFT JOIN writing ON writing.id == loanable.writing_id WHERE loanable.reservation_id IS NULL AND loanable.id NOT IN (SELECT loanable_id FROM loan WHERE returned IS NULL) AND writing.producers LIKE '%Jorma%' ; Tulos: 4 30 TRUE 3 TAIK-kirjasto 3 Suklaapuput Tillikka Jorma Kuuma elokuva suklaapupuista dvd 5 30 TRUE 3 TAIK-kirjasto 3 Suklaapuput Tillikka Jorma Kuuma elokuva suklaapupuista dvd 6 30 TRUE 3 TAIK-kirjasto 3 Suklaapuput Tillikka Jorma Kuuma elokuva suklaapupuista dvd 17 30 FALSE 3 Aalto-kirjasto 3 Suklaapuput Tillikka Jorma Kuuma elokuva suklaapupuista dvd 7

Lisätään lasku asiakkaalle myöhästyneestä palautuksesta INSERT INTO payment (amount, reason, due_date, customer_ssn) VALUES (5.20, "Muistutusmaksu", 1412553600, '110265-123M') ; Asiakas maksettua laskun, päivitetään lasku maksetuksi UPDATE payment SET date_of_payment = date('now') WHERE id = 2 ; Henkilökunta hakee maksamattomat laskut, joiden eräpäivä on mennyt umpeen SELECT * FROM payment, customer WHERE payment.customer_ssn = customer.ssn AND due_date < date('now') AND date_of_payment IS NULL ; Tulos: 1 5.2 Muistutusmaksu 1412553600 110265-123M 110265-123M Matti Haavikko Via Dolorosa 2 A, 00100 Espoo 401234567 Toimipisteen heti lainattavissa olevat teokset SELECT id FROM loanable WHERE office_name = 'Aalto-kirjasto' AND reservable='true' AND reservation_id IS NULL EXCEPT SELECT loanable.id FROM loan, loanable WHERE loan.loanable_id = loanable.id AND loanable.office_name = 'Aalto-kirjasto' AND returned IS NULL ; Tulos: 7 8 8

Alli hakee cd:tä nimeltä mesmerize ja toteaa että kyseistä teosta löytyy vai TAIKkirjastosta (writing_id = 7) SELECT loanable.writing_id AS writing_id, writing.name AS name, writing.description AS description, writing.class AS class, loanable.maximum_loan_time AS maximum_loan_time, loanable.reservable AS reservable, loanable.office_name AS office_name, COUNT(*) AS count, loanable.id IN (SELECT loanable_id FROM loan WHERE returned IS NULL) AS is_loaned, loanable.reservation_id IS NOT NULL AS is_reserved FROM loanable LEFT JOIN writing ON writing.id == writing_id WHERE class IS 'cd' AND name LIKE 'hypnotize' GROUP BY maximum_loan_time, reservable, writing_id, office_name, is_loaned ; Tulos: 7 Hypnotize cd - good music cd 30 TRUE TAIK-kirjasto 2 0 0 Alli tekee cd:lle varauksen ja haluaa sen kuljetettavan Aalto-kirjastoon INSERT into RESERVATION (customer_ssn, writing_id, office_name) VALUES ('715517-LUL3', 7, 'Aalto-kirjasto') ; INSERT INTO transport(date, start_office_name, end_office_name) VALUES (DATETIME('2014-05-22'), 'TAIK-kirjasto', 'Aalto-kirjasto') ; Lainattava täytyy myös merkitä kuljetukseen UPDATE loanable SET reservation_id = 1, transport_date = DATETIME('2014-05-22 00:00:00') WHERE id IN (SELECT id FROM loanable WHERE writing_id == 7 AND office_name == 'TAIK-kirjasto' AND id NOT IN (SELECT loanable_id FROM loan WHERE returned IS NULL) LIMIT 1) ; Muodostetaan asiakkaan lainaushistoria SELECT * FROM loan WHERE customer_ssn = 110265-123M ; Tulos: 1 2014-05-11 20:28:28 2014-06-10 20:28:28 1 110265-123M 2 2014-05-11 20:28:28 2014-06-10 20:28:28 2 110265-123M 3 2014-04-01 13:37:00 2014-05-01 13:37:00 3 110265-123M 9

SELECT name, address FROM office; Tulos: Aalto-kirjasto Otakaari 69, 00100 Espoo TAIK-kirjasto Arabianranta 12, 715517 Helsinki T-Talon kirjasto T-Talo Haetaan kaikkien toimipisteiden yhteistiedot 10