Johdanto Kiinteistöhuoltoyhtiö tarvitsee järjestelmän huoltopyyntöjen hallinnointiin Asiakas voi tehdä huoltopyynnön lähettämällä kirjeen tai sähköpostin? Asiakas voi tehdä huoltopyynnön soittamalla puhelinvastaajaan?
Johdanto Ongelma: Vapaamuotoisen tiedon (esimerkiksi puhe, teksti tai kuva) koneellinen käsittely vaikeaa Sisältö on jäsentämätöntä Jotain säännönmukaisuuksia esiintyy (merkistö, tiedoston tallennusformaatti...) Voidaan säilyttää kokonaisuutena
Johdanto Kiinteistöhuoltoyhtiö tarvitsee järjestelmän huoltopyyntöjen hallinnointiin Asiakas voi täyttää lomakkeen netissä? Asiakas voi soittaa huoltoyhtiössä olevalle toimistotyöntekijälle joka kirjaa huoltopyynnöt? ja kysyy tarvittavat tiedot.
Johdanto Jos tiedetään tarvittu data eli tieto, (esimerkiksi asiakkaan nimi, kohteen sijainti, asiakkaan yhteystiedot), voidaan se säilöä jäsenneltynä Tiedolle voidaan määritellä rakenne Koneellinen käsittely helppoa On mahdollista hakea vain tiettyä kenttää, eli tiedon osiin pääsee käsiksi helpommin kuin jäsentämättömässä datassa (esimerkiksi yhteystietojen hakeminen)
Tiedon säilöminen Ratkaisu: Säilötään järjestelmän tiedot ohjelman sisäisiin tietorakenteisiin Esim. Lista-rakenne Huoltopyynto-olioita Huoltopyynto-luokka määrittelee tiedot, joita huoltopyyntö-oliolla on (esim asiakas, asiakkaan puhelinnumero, kohde,...)
Tiedon säilöminen Ratkaisu: Säilötään järjestelmän tiedot ohjelman sisäisiin tietorakenteisiin Ongelma: tietorakenteet käytettävissä vain kun ohjelmaa suoritetaan Tiedot menetetään kun ohjelman suoritus päättyy voi tapahtua sekä kontrolloidusti että kontrolloimattomasti Käyttäjä sulkee ohjelman Ohjelma kaatuu... Ratkaisu?
Tiedon säilöminen Tieto tulee tallentaa pysyväismuistiin (tiedosto kiintolevyllä, ssd-levyllä, usb-tikulla...) Mahdollisuus tallentaa olioita suoraan levylle sarjallistamalla (Java: rajapinta Serializable) Kiinteistöhuoltoyhtiö toivoo että tietoa pystyy käsittelemään tulevaisuudessa muillakin ohjelmilla Tallennusmuodon tulee olla toteutuksesta eli ohjelmasta riippumaton Tallennetaan tiedostoon jolla määritelty rakenne
Tiedoston rakenne CSV-muoto (comma-separated values) Tekstitiedosto, tietoon liittyvät kentät erotettu toisistaan pilkuilla Jokaisella rivillä oma tietue (olio, instanssi,...) Ensimmäinen rivi voi usein otsikkorivi jossa kenttien selitykset Jos kentässä on erikoismerkkejä, kenttä ympäröidään lainausmerkeillä
Tiedoston rakenne CSV-muoto (comma-separated values) Otsikkorivi ja kaksi huoltopyyntöä: asiakas, kohde, ongelma arto, exactum, tulostinpaperi loppunut luokassa B221 arto, exactum, CK112 ilmastointilaite jäätävän tehokas CSV-formaatti sopii hyvin taulukkomuotoisen tiedon tallentamiseen Entä jos asiakas haluaa lisätä useita kohteita? Klassinen CSV-ratkaisu: kohteet eritelty välilyönneillä tai muilla erikoismerkeillä Onko tiedostomuoto tällöin toteutuksesta riippumaton?
Tiedoston rakenne XML-muoto (extensible markup language) Tekstitiedosto, tiedon merkitys kuvataan tiedon kanssa Paljon käytetty, mm. järjestelmien välisenä tiedonsiirtoformaattina XML-dokumentti alkaa otsakkeella (prologi, header,...), joka sisältää XML-version <?xml version="1.0">
Tiedoston rakenne XML-muoto (extensible markup language) Otsakkeen jälkeen alkaa data Data koostuu elementeistä Elementit kuvaavat rakennetta ja niillä on alku- ja lopputagi (<elementti>, </elementti>) Elementtien attribuutit ja sisäiset tekstikentät kuvaavat tietoa <?xml version="1.0"> <elementti attribuutti= attribuutin arvo >teksti</elementti>
Tiedoston rakenne XML-muoto (extensible markup language) Elementtejä voi olla rajattomasti sisäkkäin, tekstikenttiä yleensä vain sisimmällä tasolla <?xml version="1.0"> <elementti attribuutti= attribuutin arvo > <toinen_elementti>teksti</toinen_elementti> </elementti> XML on puumainen rakentenne Ensimmäinen elementti on juurielementti, jonka sisällä oksat viimeinen, sisin taso, sisältää lehdet
Tiedoston rakenne XML-muoto (extensible markup language) Hyvin muodostettu (well-formed) XML-dokumentti täyttää seuraavat säännöt Dokumentissa on tasan yksi juurielementti Elementeillä on sekä alku- että loppumerkki (tyhjät elementit poikkeustapaus: <elementti />) Jokainen attribuutti on lainausmerkkien sisällä Elementit voivat olla sisäkkäisiä, mutta ne eivät saa mennä ristiin toisten elementtien kanssa. EI: <elementti1> <elementti2>arvo</elementti1> </elementti2>
Tiedoston rakenne Huoltoyhtiön huoltopyynnot, esimerkiksi: <?xml version="1.0"> <huoltopyynto> <asiakas>arto</asiakas> <kohde>exactum</kohde> <ongelma>tulostinpaperi loppunut luokassa B221</ongelma> </huoltopyynto> <huoltopyynto> <asiakas>arto</asiakas> <kohde>exactum</kohde> <ongelma>ck112 ilmastointilaite jäätävän tehokas</ongelma> </huoltopyynto> Onko ylläoleva XML-dokumentti hyvin muodostettu?
Tiedoston rakenne Ei ole. Dokumentissa pitää olla tasan yksi juurielementti, edellisessä on kaksi. Korjataan... <?xml version="1.0"> <huoltopyynnot> <huoltopyynto> <asiakas>arto</asiakas> <kohde>exactum</kohde> <ongelma>tulostinpaperi loppunut luokassa B221</ongelma> </huoltopyynto> <huoltopyynto> <asiakas>arto</asiakas> <kohde>exactum</kohde> <ongelma>ck112 ilmastointilaite jäätävän tehokas</ongelma> </huoltopyynto> </huoltopyynnot>
Tiedoston rakenne <?xml version="1.0"> <huoltopyynnot> <huoltopyynto> <asiakas>arto</asiakas> <kohde>exactum</kohde> <ongelma>tulostinpaperi loppunut luokassa B221</ongelma> </huoltopyynto> <huoltopyynto> <asiakas>arto</asiakas> <kohde>exactum</kohde> <ongelma>ck112 ilmastointilaite jäätävän tehokas</ongelma> </huoltopyynto> </huoltopyynnot> Huomaa myös kuvaava elementtien nimentä.
Tiedoston rakenne Toisen kohteen lisääminen? <?xml version="1.0"> <huoltopyynnot> <huoltopyynto> <asiakas>arto</asiakas> <kohde>exactum</kohde> <kohde>physicum</kohde> <ongelma>tulostinpaperi loppunut luokassa B221</ongelma> </huoltopyynto>... </huoltopyynnot>
Tiedoston rakenne Toisen kohteen lisääminen? <?xml version="1.0"> <huoltopyynnot> <huoltopyynto> <asiakas>arto</asiakas> <kohteet> <kohde>exactum</kohde> <kohde>physicum</kohde> </kohteet> <ongelma>tulostinpaperi loppunut luokassa B221</ongelma> </huoltopyynto>... </huoltopyynnot>
Tiedoston rakenne Entä jos halutaan tallentaa kohteet erikseen? Eräs ratkaisu: kaksi XML-dokumenttia toisessa huoltopyynnöt, toisessa kohteet kohde tunnistetaan huoltopyynnöissä tunnuksen perusteella Huoltopyynnössä viite kohteeseen
Tiedoston rakenne Tiedosto 1: Huoltopyynnöt <?xml version="1.0"> <huoltopyynnot> <huoltopyynto> <asiakas>arto</asiakas> <kohde>1</kohde> <ongelma>...</ongelma> </huoltopyynto>... </huoltopyynnot> Tiedosto 2: Kohteet <?xml version="1.0"> <kohteet> <kohde> <tunnus>1</asiakas> <nimi>exactum</nimi>... </kohde>... </kohteet>
Tiedoston rakenne Ongelmia XML-formaatissa? Elementit vievät paljon tilaa (huoltopyyntöesimerkissä vain noin 30% XML-dokumentista oleellista informaatiota) Lukeminen hidasta täytyy lukea koko tiedosto jotta tiedetään mitä se sisältää XML-standardia tukevat ohjelmakirjastot eivät ole täydellisiä yhteensopivuusongelmat muiden kirjastojen kanssa Muita ratkaisuja rakenteellisen tiedon esittämiseen: JSON
Johdanto Kiinteistöyhtiö kiittää järjestelmästä.
Johdanto Ja palaa takaisin muutaman kuukauden kuluttua: Ohjelma tekee koneesta hitaan. Meillä on nyt kymmeniä ellei satoja tuhansia huoltopyyntöjä. Kun ohjelma on päällä kone hidastuu huomattavasti. Tarvitsemme konetta myös muuhun, joten käynnistämme ohjelman vain tarpeen vaatiessa. Ongelma: Kun ohjelma on päällä, tiedostot on ladattu keskusmuistiin joka ilmeisesti loppuu kesken Ratkaisu?
Johdanto Järjestelmää muutetaan siten, että se lukee tiedostoa kovalevyltä vain kun on tarve. Kiinteistöhuoltoyritys: Tietojen hakeminen ja lisääminen on liian hidasta. Ohjelma ei toimi! Ongelma: Pysyväismuistista lukeminen on huomattavasti hitaampaa kuin keskusmuistista lukeminen tässä tapauksessa liian hidasta Ratkaisu?
Johdanto Kaikkea ei voida pitää muistissa, mutta tiedoston lukeminen levyltä on hidasta Tiedostoon perustuvassa ratkaisussa muitakin ongelmia: Mitä käy jos useampi ohjelma kirjoittaa samaan tiedostoon samaan aikaan? Ohjelmat yhä riippuvaisia tiedoston määrittelystä jos tiedostomuoto muuttuu, täytyy ohjelmaa muuttaa Tarvitaan välimuoto, jonka avulla voidaan käyttää vain osaa tiedosta kerrallaan
Johdanto Luodaan erillinen ohjelma, joka hallinnoi tietoa Ohjelma pitää yllä tietorakenteita, jotka mahdollistavat nopean levyltä hakemisen Muistissa pidetään vain hakua helpottavia tietorakenteita, itse data on tallennettuna levylle Useampia tietorakenteita joista kukin mahdollistaa tietyt hakuoperaatiot (kriteereihin perustuvat haut) Haku aikavälin perusteella Haku asiakkaan perusteella Haku kohteen perusteella...
Johdanto Luodaan erillinen ohjelma, joka hallinnoi tietoa Mahdollistaa tiedon käytön useamman ohjelman toimesta samanaikaisesti Jos tietuetta muokataan, ohjelma lukitsee tietueen vain muutoshetkeksi Tarjoaa erilaisia näkymiä tiedosta ohjelmille Hallinnointiohjelma näkee eri tiedot kuin vikailmoitusohjelma Tietoa käyttävillä ohjelmilla voi olla erilainen käsitys tiedon rakenteesta Varmuuskopiointi: Käyttöhistoria Mahdollisuus tietoturvaan ja käyttäjien hallintaan
Johdanto Keksittiin pyörä uudestaan Tietokannanhallintajärjestelmät on luotu juuri tarvettamme varten
Tietokanta (Database) Tietokanta muodostuu kokoelmasta toisiinsa liittyviä säilytettäviä tietoja Rakenne suunnitellaan yleensä tiettyä käyttötarkoitusta varten (asiakasrekisterit, pankkijärjestelmät, puhelinluettelot, kurssikirjanpidot,...)
Tietokannanhallintajärjestelmä Toimii rajapintana tietokannan ja sovellusohjelmien välillä Tarjoaa palveluita tietokannan käsittelyyn Suorakäyttöliittymät Kyselyiden ajaminen tietokannassa Hallintaliittymät Tietokannan rakenteiden muokkaus, käyttöoikeudet, tietokannan asetukset Ohjelmointirajapinnat Mahdollistavat tietokannan käytön sovellusten kautta
Tietokantajärjestelmä Sisältää Tietokannan Tietokannanhallintajärjestelmän Tietokantaa käyttäviä sovellusohjelmia
Tietomalli Tietomallilla (data model) tarkoitetaan tiedon rakenteen ja tiedolle suoritettavan käsittelyn määrittelevää käsitteistöä Tietoa voidaan tutkia eri näkökulmista, eri abstraktiotasoilla Tavoitteena jakaa tiedon kuvaaminen ja määrittely osiin, hajoita ja hallitse, ja tätä kautta yksinkertaistaa tietokuvauksia Tarvitaan useampia -- eri abstraktiotasojen -- kuvauksia
Abstraktiotasot Tietoa mallinnettaessa tieto jaetaan perinteisesti kolmeen tasoon Käsitetaso (conceptual level) Rakennetaso (structural level, logical level) Talletustaso (physical level, storage level)
Käsitetaso Ohjelmistosta riippumaton kuvaus tiedosta Järjestelmässä on tietoa kiinteistöjen laitteistoista, huoltotapahtumista ja huoltohenkilökunnasta. Laitteistoista tallennetaan merkki, ostovuosi, ja sijainti. Huoltohenkilökunnasta tallennetaan nimi, puhelinnumero, aloitusvuosi, lopetusvuosi. Huoltotapahtumat liittyvät aina laitteeseen ja ne suoritetaan tietyn huoltohenkilön toimesta.
Käsitetaso Ohjelmistosta riippumaton kuvaus tiedosta Miten tiedot liittyvät yhteen Mitä sääntöjä tietoihin liittyy (esim huoltotapahtumassa pitää olla aina tapahtuman suorittaja) Mitä tietoja käsitellään Millainen on se kohde, jota tiedoilla pitäisi kuvata Asiat, joita pitäisi esittää Minkälaisia arvoja tiedon elementit voivat saada, ja mitä arvot tarkoittavat
Rakennetaso Minkälaisia käsiteltäviä rakenteita tiedot muodostavat Esim ohjelmointikielen näkemys tiedosta Tietokannan rakenne Minkälaisina rakenteina ohjelmoijat näkevät tiedot
Rakennetaso Laite Merkki Ostovuosi Sijainti Huoltotapahtuma Laite Huoltohenkilö Kuvaus Huotohenkilö Nimi Puhelinnumero Aloitusvuosi Lopetusvuosi
Rakennetaso Tietokantataulut Laite (id, merkki, ostovuosi, sijainti) Huotohenkilö (id, nimi, puhelinnumero, aloitusvuosi,...) Huoltotapahtuma (laite id, henkilö id, kuvaus)
Talletustaso Fyysinen kuvaus tiedosta levyllä Tiedosto laitteet.xml levyllä /fs/, toteuttaa määritelmän...
Abstraktiotasot tiedon käsittelyssä Käsitetaso Tietosisällön suunnittelu Rakennetaso Ohjelmointi, rajapinnat, kyselyt Talletustaso Tallennustapa, tehokkuus, hajauttaminen useille levypalvelimille
Mitä malleja eri abstraktiotasoilla? Käsitetaso Oliomallit (UML) ER-mallit (Entity-Relationship) Semanttiset tietomallit (RDF) Rakennetaso Relaatiomalli, Oliomallit, XML,... Talletustaso Toimittaja- ja laitekohtaiset käsitteet