Käsiteanalyysi (suunnitteluputki)
Käsiteanalyysi (suunnitteluputki)
Käsiteanalyysi (suunnitteluputki)
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
© JOUNI HUOTARI & ARI HOVI<br />
2000 - 2009
TIETOKANTOJEN PERUSTEISSA OSATTAVA<br />
• <strong>Käsiteanalyysi</strong>n ja käsitemallinnuksen perusidea:<br />
– Käsitteiden tunnistaminen<br />
– Yhteyksien muodostaminen<br />
– Tietojen eli ominaisuuksien lisääminen<br />
– Moni-moneen-yhteyksien purkaminen<br />
– Käsitemallin ”piirtäminen”<br />
• Tietokannan määrittely:<br />
– Käsitteistä tulee tauluja<br />
– Tiedoista sarakenimet tauluun<br />
– Yhteyksien luominen perus- ja viiteavaimien avulla<br />
© Jouni Huotari & Ari Hovi
SUUNNITTELUPUTKI<br />
Määrittely & suunnittelu<br />
Käyttäjien<br />
näkemykset<br />
Näytöt, raportit<br />
<strong>Käsiteanalyysi</strong><br />
Tarveanalyysi<br />
Normalisointitarkistus<br />
Käsitemalli<br />
Käsitemalli, täydennetty<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
3. normaalimuodossa<br />
olevat käsitteet<br />
Toteutus<br />
Tietokannan<br />
fyysinen suunnittelu<br />
Suorituskyvyn<br />
viritys<br />
Relaatiotietokanta<br />
© Jouni Huotari & Ari Hovi
TIETOKANTAPROJEKTIN VAIHEET: INKREMENTAALINEN<br />
JA ITERATIIVINEN LÄHESTYMISTAPA<br />
Määrittely<br />
Suunnittelu<br />
Toteutus (ml. prototyypit/inkrementit)<br />
Käyttöliittymä<br />
v<br />
a<br />
i<br />
h<br />
e<br />
e<br />
t<br />
Sovellus<br />
Tietokanta<br />
Testaus<br />
© Jouni Huotari & Ari Hovi<br />
Käyttöönotto<br />
Ylläpito<br />
t
TIETOKANNAN ELINKAARI<br />
Tietokantojen (TK) perusteet<br />
SQL<br />
TK-ohjelmointi<br />
TK-suunnittelu<br />
TK-käsittely<br />
Käsite-ja tarveanalyysi<br />
(Conceptual and logical design)<br />
Ohjelmistosuunnittelu<br />
DBMSympäristön<br />
suunn<br />
Normalisointi<br />
Tietoturva<br />
Varmistukset<br />
-suunn.<br />
Fyysinen suunn<br />
(Physical)<br />
Kannan<br />
toteutus<br />
Tietojenkeruu<br />
Suunn+testaus<br />
Mittaus,<br />
säädöt,<br />
muutokset<br />
Kuormitustesti<br />
Tuotantotesti<br />
Tietoturva<br />
Varmistukset<br />
Arkkitehtuurit<br />
Infra-suunn<br />
DBA<br />
Kehitys<br />
Tuotanto<br />
- OLTP<br />
- DW<br />
© Jouni Huotari & Ari Hovi<br />
Helia / Martti Laiho; täydentänyt JAMK / Jouni Huotari
KÄSITEMALLI ON KUVAUS TIETOKANNAN TOTEUTUSTA VARTEN<br />
Käsitemalli<br />
Tietokannan taulut<br />
© Jouni Huotari & Ari Hovi
Käsitemalli<br />
Reaalimaailma<br />
Kohdealue<br />
Tietokanta<br />
KOHDEALUEEN VALINNASTA<br />
KÄSITEMALLIN KAUTTA<br />
TOTEUTETTAVAAN TIETOKANTAAN<br />
© Jouni Huotari & Ari Hovi
SYSTEEMIMETODOLOGIAN MALLI<br />
© Jouni Huotari & Ari Hovi
TERMEJÄ<br />
• Käsite = kohde (Entity) = yksilö- tai oliotyyppi ~ luokka<br />
– johdetaan yksittäisistä olioista (esiintymät, ilmentymät, instanssit)<br />
• <strong>Käsiteanalyysi</strong> = kohdeanalyysi<br />
• Käsitemalli (ER-malli, tietomalli)<br />
• ER-kaavio ~ luokkakaavio: graafinen esitys<br />
• Yhteys = riippuvuus = assosiaatio = suhde (Relationship)<br />
• Ominaisuus = tieto = attribuutti (Attribute)<br />
• Lukumääräsuhde = kardinaliteetti<br />
• Notaatio = kuvaustekniikka<br />
Ks. Tietoanalyysi (Soini)<br />
© Jouni Huotari & Ari Hovi
KÄSITEANALYYSI<br />
• <strong>Käsiteanalyysi</strong> on tietokantoihin johtavan<br />
suunnitteluprosessin ensimmäisiä vaiheita<br />
• Selvitetään, mitä tietoja tietokantaan talletetaan<br />
• Aloitetaan karkealla tasolla; toisaalta yksittäisten<br />
olioiden tunnistaminen auttaa käsitteiden löytymistä<br />
• Tuloksena on käsitemalli<br />
“Mitkä ovat tietokantaan talletettavat tiedot ja niiden väliset<br />
riippuvuudet tietyllä karkeustasolla”<br />
“Tietokannan piirustukset”<br />
“Yhteinen näkemys (tai sopimus) kohdealueesta”<br />
© Jouni Huotari & Ari Hovi
KÄSITEANALYYSISTÄ<br />
• Selventää kohdealueen käsitteistöä<br />
– yhteinen kieli<br />
– kohdealueen sanakirja<br />
• On täysin riippumaton tulevasta teknisestä toteutuksesta ja<br />
tietokannan hallintajärjestelmistä<br />
• Kuvittele, että käsitemalli toimii äärettömän tehokkaassa koneessa<br />
– ei suorituskykypohdintoja vielä<br />
– kaikki tiedot esiintyvät vain kertaalleen - ei toistoa<br />
• <strong>Käsiteanalyysi</strong>ä ei kannata jatkaa liian pitkään<br />
– tee välillä muita systeemityön alueita<br />
– toteuta prototyyppi ja paranna käsitemallia<br />
© Jouni Huotari & Ari Hovi
KÄSITTEEN TUNNISTAMINEN<br />
• Osoitettavissa oleva reaalimaailman objekti, kuten<br />
työntekijä, tuote, asiakas tai organisaatioyksikkö<br />
• Abstrakti tai kuvitteellinen asia, kuten tulosyksikkö,<br />
vakuutuskorvaus tai budjettikuukausi<br />
• Pysyvän luontoinen, kuten asiakas, tuote tai<br />
tapahtumatyyppinen, kuten tilausrivi, tilitapahtuma<br />
• Käsite ilmaisee jotain asiaa, josta haluamme tallettaa<br />
tietoa tulevaa käyttöä varten<br />
• Käsite on lauseessa substantiivi<br />
– Asiakas tekee tilauksia<br />
© Jouni Huotari & Ari Hovi
TEHTÄVÄ 1: KÄSITTEIDEN TUNNISTAMINEN<br />
• Tee lista toimeksiantoon liittyvistä käsitteistä (nk. käsiteehdokkaiden<br />
kirjaus)<br />
– Voit käyttää joko kynää ja paperia tai listata käsitteet tietokoneella<br />
– Tee lista nopeasti miettimättä aluksi kovin tarkkaan mikä olisi paras<br />
nimitys eri käsitteille<br />
– Lopuksi voit hieman ryhmitellä käsitteitä (esim. mind-map) ja miettiä<br />
oliko kirjaamasi käsite paras mahdollinen vaihtoehto<br />
• Ratkaisuehdotus toisessa moduulissa (yhtä ainutta oikeata<br />
vastausta ei ole olemassa)<br />
• Näistä käsite-ehdokkaista mietitään, mitkä käsitteet ovat<br />
yläkäsitteitä ja mitkä kuuluvat yläkäsitteen alle<br />
© Jouni Huotari & Ari Hovi
KÄSITEMALLINNUS
ESIMERKKEJÄ KUVAUSTEKNIIKOISTA ELI NOTAATIOISTA<br />
Käsite<br />
ASIAKAS<br />
ASIAKAS<br />
Yhteys eli<br />
riippuvuus<br />
ASIAKAS<br />
1:1<br />
tekee<br />
0:N<br />
TILAUS<br />
ASIAKAS<br />
TILAUS<br />
ASIAKAS<br />
tekee<br />
*<br />
TILAUS<br />
© Jouni Huotari & Ari Hovi
YHTEYS ELI RIIPPUVUUS<br />
• Riippuvuus ilmaisee yhteyttä tai suhdetta käsitteiden<br />
välillä<br />
• Yhteyttä voi kuvata verbillä<br />
– Isällä on monta lasta<br />
– Asiakas tekee monta tilausta<br />
– Myyjä myy monta tuotetta<br />
– Tilin avaa yksi henkilö<br />
• Muista lukea lause molempiin suuntiin ja kysyä<br />
(toimeksiantajalta) esim.:<br />
– Voiko lapsella olla monta isää<br />
– Voiko yhdessä tilauksessa olla monta asiakasta<br />
– Voiko samaa tuotetta myydä moni myyjä<br />
– Voiko yksi henkilö avata monta tiliä<br />
© Jouni Huotari & Ari Hovi<br />
Mieti, mihin tarkoitukseen<br />
tietokanta tulee<br />
Tee myös päätös: halutaanko<br />
historiatietoa tallentaa (esim.<br />
tuotteen myyntihistoria)
YHTEYKSIEN MERKINTÄTAPOJA<br />
• Yhden suhde moneen -yhteys, 1:M, voidaan ilmaista<br />
lukuisilla eri tavoilla riippuen käytettävästä notaatiosta,<br />
esim.<br />
© Jouni Huotari & Ari Hovi
2 VAIHTOEHTOISTA SUOSITUSTA YHTEYKSIEN KUVAAMISEKSI<br />
”harakanvarvasnotaatio”<br />
UML-notaatio<br />
yksi-yhteen<br />
yksi-moneen<br />
moni-moneen<br />
*<br />
*<br />
*<br />
”crow’s feet”<br />
© Jouni Huotari & Ari Hovi
KÄSITEMALLI VOIDAAN JOHTAA ESIINTYMISTÄ, ESIM. PANKKITILIT<br />
Esiintymiä:<br />
Pekka<br />
Joki<br />
203040-<br />
43567<br />
Pirkko<br />
Joki<br />
203050-<br />
77564<br />
Käsitemalli:<br />
HENKILÖ<br />
TILI<br />
© Jouni Huotari & Ari Hovi
MALLINNUSTEHTÄVÄ 2<br />
a) Mallinna toimeksiantoon liittyvien käsitteiden väliset<br />
yhteydet<br />
© Jouni Huotari & Ari Hovi
KÄSITEMALLI, VERSIO 0.1 (KÄSITTEET JA NIIDEN VÄLISET YHTEYDET)<br />
© Jouni Huotari & Ari Hovi
TIEDOT ELI OMINAISUUDET<br />
• Käsitteisiin liittyy tietoja eli ominaisuuksia (attribute)<br />
• Käsitteellä on oltava yksilöivä tunniste eli perusavain (primary key, PK)<br />
– pakollinen, yksilöivä tieto<br />
– voi koostua useasta tiedosta<br />
– voi olla luonnollinen tai ns. surrogaatti (johdettu)<br />
– ei saa olla tyhjä; moniosaisen perusavaimen kohdalla edes osittain<br />
– Voidaan merkitä esim. alleviivaamalla tai lihavoimalla<br />
• Joukko “tavallisia” tietoja (non-key attributes)<br />
• Viiteavaimet (foreign key, FK)<br />
– voi olla osa perusavainta<br />
– voidaan merkitä esim. laittamalla kirjaimet FK tai kursivoimalla<br />
• Tiedot kuvaavat käsitettä, johon ne liittyvät<br />
© Jouni Huotari & Ari Hovi
ESIMERKKEJÄ<br />
ASIAKAS<br />
asiakastunnus<br />
asiakas_nimi<br />
puhelinnumero<br />
asiakasluokka<br />
perustamispvm<br />
ASIAKAS<br />
asiakastunnus<br />
asiakas_nimi<br />
puhelinnumero<br />
asiakasluokka<br />
perustamispvm<br />
ASIAKASRYHMA<br />
Perusavain<br />
Muut tiedot<br />
Viiteavain<br />
ASIAKAS<br />
as_tunnus<br />
as_nimi<br />
as_osoite<br />
ryhmatunnus (FK)<br />
© Jouni Huotari & Ari Hovi<br />
ryhmatunnus<br />
asryhmanNimi
MALLINNUSTEHTÄVÄ 2 (JATKUU)<br />
b) Mitä ominaisuuksia liittyy mallinnustehtävässä 2 a<br />
tunnistettuihin käsitteisiin Kirjaa ne käsitteiden viereen.<br />
© Jouni Huotari & Ari Hovi
KÄSITEMALLI, VERSIO 0.2 (LISÄTTY KÄSITTEISIIN LIITTYVÄT TIEDOT)<br />
© Jouni Huotari & Ari Hovi
TARKEMPAA KÄSITEMALLINNUSTA<br />
• Ehdollisuus; riippumattomat ja riippuvat käsitteet<br />
• Moni-moneen-yhteys ja sen purkaminen<br />
• Yksi-yhteen-yhteys<br />
• Esimerkkejä<br />
• Yhteys itseensä; hierarkkiset rakenteet<br />
• Käsitteiden yhdistäminen<br />
© Jouni Huotari & Ari Hovi
YHTEYKSIEN PAKOLLISUUS / EHDOLLISUUS<br />
OSASTO<br />
osasto_id<br />
osastonimi<br />
OSASTO<br />
osasto_id<br />
osastonimi<br />
”voi<br />
kuulua”<br />
HENKILO<br />
henkilotunnus<br />
etunimi<br />
Sukunimi<br />
osasto_id<br />
Henkilö voi kuulua osastoon<br />
(ei siis ole pakko kuulua)<br />
0..1 0..*<br />
”on<br />
kuuluttava”<br />
HENKILO<br />
henkilotunnus<br />
etunimi<br />
Sukunimi<br />
osasto_id<br />
Henkilö kuuluu osastoon<br />
(ei voi tallettaa henkilöä<br />
antamatta samalla osastoa)<br />
1..1 0..*<br />
0:1 0:M<br />
© Jouni Huotari & Ari Hovi
KÄSITETYYPIT<br />
1) Moni-moneen-yhteydet => assosiatiiviset käsitteet<br />
• Esimerkiksi projektin ja henkilön välillä on moni-moneen-yhteys<br />
• Tämän yhteyden nimi on esim. ”osallistuu”<br />
• Tästä voidaan johtaa assosiatiivinen käsite osallistuminen<br />
HENKILO<br />
PROJEKTI<br />
ptun<br />
pnimi<br />
osallistuu<br />
HENKILO<br />
htun<br />
etunimi<br />
sukunimi<br />
osoite<br />
PROJEKTI<br />
ptun<br />
pnimi<br />
htun<br />
etunimi<br />
sukunimi<br />
osoite<br />
OSALLISTUMINEN<br />
OsallistumisID<br />
ptun<br />
htun<br />
Tunnit<br />
KirjausPvm<br />
© Jouni Huotari & Ari Hovi
KÄSITETYYPIT (JATKOA)<br />
2) Riippumattomat käsitteet eli ydinkäsitteet (Independent entities)<br />
• Käsitteen perusavaimessa ei tarvita muiden käsitteiden tietoja<br />
• Käsite ei ole riippuvainen muista käsitteistä<br />
(voi tallettaa tietoja muista välittämättä)<br />
3) Riippuvat eli karakteristiset käsitteet<br />
• Käsitteen moniosaisessa perusavaimessa on<br />
mukana isä-käsitteen perusavain<br />
• Käsite ei voi olla olemassa, jos ei isää ole<br />
(ei voida tallettaa projektitunteja jollei<br />
projektia ole olemassa)<br />
PROJEKTI<br />
ptun<br />
pnimi<br />
OSALLISTUMINEN<br />
ptun<br />
htun<br />
Tunnit<br />
KirjausPvm<br />
HENKILO<br />
htun<br />
etunimi<br />
sukunimi<br />
osoite<br />
© Jouni Huotari & Ari Hovi
SUHTEISTA<br />
Monta riippuvuutta samojen käsitteiden välillä:<br />
Asiakas<br />
omistaa<br />
käyttää<br />
=> Jos on monta riippuvuutta, nimeä riippuvuudet<br />
Tili<br />
Moni-moneen-yhteys: muista purkaa, jos ollaan tekemässä relaatiotietokantaa!<br />
Asiakas<br />
Tili<br />
ASIAKAS<br />
TILI<br />
TILITAPAHTUMA<br />
© Jouni Huotari & Ari Hovi<br />
Lapsen nimivaihtoehtoja:<br />
ASIAKAS_TILI<br />
Asiakkaan tilit
c) Miten purat M:N-yhteydet<br />
MALLINNUSTEHTÄVÄ 2<br />
• Kun M:N-yhteydet puretaan ja ominaisuudet lisätään,<br />
syntyy nk. kohdemalli<br />
• Tee omasta harjoitustyöaiheestasi vaatimusmäärittely ja<br />
1. käsitemalli<br />
© Jouni Huotari & Ari Hovi
ESIMERKKI YKSI-YHTEEN-YHTEYDESTÄ<br />
MAA<br />
PÄÄ-<br />
KAUPUNKI<br />
© Jouni Huotari & Ari Hovi
ESIMERKKI: OSA TILAUSTENKÄSITTELYSTÄ UML:N LUOKKAKAAVIONA<br />
Luokan nimi<br />
Omainaisuudet<br />
Minkälaisiin tilanteisiin oliopohjainen suunnittelu soveltuu<br />
Metodit (toiminnot)<br />
Onko olemassa hybridiratkaisuja<br />
© Jouni Huotari & Ari Hovi
ESIMERKKI 4: MARTININ ERD NOTAATIO (KOPIO<br />
VISION HELPISTÄ)<br />
© Jouni Huotari & Ari Hovi
4 MAHDOLLISTA VAIHTOEHTOA<br />
OSASTO<br />
osasto_id<br />
osastonimi<br />
OSASTO<br />
osasto_id<br />
osastonimi<br />
OSASTO<br />
osasto_id<br />
osastonimi<br />
OSASTO<br />
osasto_id<br />
osastonimi<br />
HENKILO<br />
henkilotunnus<br />
etunimi<br />
sukunimi<br />
HENKILO<br />
henkilotunnus<br />
etunimi<br />
sukunimi<br />
HENKILO<br />
henkilotunnus<br />
etunimi<br />
sukunimi<br />
HENKILO<br />
henkilotunnus<br />
etunimi<br />
sukunimi<br />
© Jouni Huotari & Ari Hovi
HIERARKIAT JA BOM-RAKENNE<br />
kuuluu yhtiöön<br />
omistaa yhtiöitä<br />
YRITYS<br />
•Yritystunnus<br />
•Emon_yritystunnus (FK)<br />
Esimerkki hierarkiasta: yritys voi omistaa monta<br />
muuta yritystä; yksi yritys voi kuulua<br />
yhteen “emoyhtiöön”.<br />
YRITYS<br />
yritystun<br />
kauprekno<br />
nimi<br />
osoite<br />
puhelin<br />
tase<br />
liikevaihto<br />
Esimerkki BOM-rakenteesta (bill-of.material):<br />
Yritys voi omistaa monta muuta yritystä;<br />
yksi yritys voi kuulua moneen “emoyhtiöön”.<br />
YRITYS<br />
yritystun<br />
kauprekno<br />
nimi<br />
osoite<br />
puhelin<br />
tase<br />
liikevaihto<br />
kuuluu yhtiöön<br />
omistaa yhtiöitä<br />
YRITYSSUHDE<br />
yritystun1<br />
yritystun2<br />
omistuspros<br />
© Jouni Huotari & Ari Hovi
ASIAKAS<br />
TIETOJEN TOISTAMISTA<br />
•astun<br />
•osoite<br />
Saaako asiakkaan osoitteen<br />
kopioida tilaukseen Eikö ole<br />
”kiellettyä” toistamista<br />
TILAUS<br />
•tilnro<br />
•toimitusosoite<br />
TILAUSRIVI<br />
•tilnro<br />
•rivinro<br />
•hinta<br />
TUOTE<br />
•tkoodi<br />
•hinta<br />
Entä hinta<br />
© Jouni Huotari & Ari Hovi
KÄSITTEIDEN YHDISTÄMINEN<br />
Ennen:<br />
ASIAKAS YHTEISTYOKUMPPANI TOIMITTAJA<br />
Nyt:<br />
OSAPUOLI<br />
Ennen:<br />
1_neljannes<br />
2_neljannes<br />
3_neljannes<br />
4_neljannes<br />
tulos<br />
tase<br />
tulos<br />
tase<br />
tulos<br />
tase<br />
tulos<br />
tase<br />
Nyt:<br />
Neljannes<br />
neljannes_tunnus<br />
tulos<br />
tase<br />
© Jouni Huotari & Ari Hovi
MÄÄRITTELYISTÄ<br />
Yrityksemme kanssa liikesuhteessa<br />
oleva luonnollinen henkilö, yhteisö<br />
tai yritys.<br />
ESIM. Oy Kala Ab, Joutsenon kunta,<br />
Pekka Jokinen, Shakkipojat ry<br />
Anna käsitteille määritelmät + kirjoita esimerkkejä<br />
© Jouni Huotari & Ari Hovi
TÄHÄN PÄÄTTYY TIETOKANTOJEN PERUSTEET (TIETOKANNAT)<br />
-OPINTOJAKSON SUUNNITTELUOSA<br />
• Loput kalvot on tarkoitettu<br />
– Tietokantojen suunnittelu –opintojakson opiskelijoille ja<br />
– niille, jotka haluavat tietää enemmän tietokantojen<br />
suunnittelusta ja siitä, kuinka käsitemallista luodaan varsinainen<br />
tietokanta (käsitteistä tulee tauluja …)<br />
© Jouni Huotari & Ari Hovi
SUUNNITTELUPUTKI<br />
Käyttäjien<br />
näkemykset<br />
Näytöt, ikkunat<br />
Raportit<br />
<strong>Käsiteanalyysi</strong><br />
Tarveanalyysi<br />
Normalisointitark.<br />
Tietokannan<br />
fyysinen suunnittelu<br />
Suorituskyvyn<br />
viritys<br />
Käsitemalli<br />
Käsitemalli, täydennetty<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
3. normaalimuodossa<br />
olevat käsitteet<br />
Relaatiokanta<br />
© Jouni Huotari & Ari Hovi
TARVEANALYYSIN TAVOITTEET<br />
• Tarkistaa, että kaikki tietotarpeet toteutuvat käsitemallin<br />
pohjalta: mitä tietoja mistäkin käsitteistä<br />
• Täydentää käsitemallia lisäämällä<br />
– uusia tietoalkioita ja<br />
– mahdollisesti myös uusia käsitteitä ja yhteyksiä<br />
• Selvittää<br />
– mitä hakuja ja missä järjestyksessä<br />
– tieto-, käyttäjä- ja tapahtumamäärät<br />
– (kuinka usein) tietoja haetaan ja päivitetään<br />
© Jouni Huotari & Ari Hovi
Käsitemalli<br />
TIETOTARVEANALYYSI<br />
Tietotarpeet<br />
Näytöt<br />
Ikkunat<br />
Eräajot<br />
Listat<br />
Raportit<br />
• Tietotarpeita ovat suunnitellut sovelluksen ikkunat tai näytöt,<br />
raportit, eräajot ja kaikki muutkin ohjelmat, jotka tulevat<br />
käsittelemään tietokantaa.<br />
Pyydä toimeksiantajalta raportit ym.<br />
tiedostoina (esim. Word-asiakirjoina)<br />
© Jouni Huotari & Ari Hovi
ANALYSOI TIETOTARPEET JA TEE TARVITTAESSA MUUTOKSET<br />
KÄSITEMALLIIN<br />
Näytöt<br />
Lomakkeet<br />
Käyttöliittymä<br />
Eräajot<br />
Listat<br />
Raportit<br />
Kortistot<br />
© Jouni Huotari & Ari Hovi
TARVEANALYYSI KÄYTÄNNÖSSÄ<br />
1. Ota käsittelyyn tietotarve, esimerkiksi jokin sovelluksen<br />
ikkuna.<br />
2. Ota myös tämän hetkinen käsitemalli esille.<br />
3. Tarkista, löytyvätkö kaikki ko. ikkunassa tarvittavat<br />
yksittäiset tiedot käsitemallista (useimmiten käsitemallin käsitteistä<br />
puuttuu vielä runsaasti tietoja – käsitemallihan oli vielä karkealla tasolla).<br />
4. Lisää puuttuvat tiedot käsitteiden yhteyteen. Joskus myös<br />
kokonainen käsite tai yhteys puuttuu ja ne on myös lisättävä käsitemalliin.<br />
5. Ota seuraava tietotarve ja tee samat asiat (kohdat 2-4).<br />
6. Näin jatketaan, kunnes kaikki tietotarpeet on läpikäyty<br />
© Jouni Huotari & Ari Hovi
ESIMERKKIRAPORTTI JA TEHTÄVÄ<br />
• Täydennä Demox Oy:n käsitemallia kuvan raportista<br />
löytämilläsi uusilla tiedoilla<br />
© Jouni Huotari & Ari Hovi
SUUNNITTELUPUTKI<br />
Käyttäjien<br />
näkemykset<br />
Näytöt, ikkunat<br />
Raportit<br />
<strong>Käsiteanalyysi</strong><br />
Tarveanalyysi<br />
Normalisointitark.<br />
Tietokannan<br />
määrittely<br />
Suorituskyvyn<br />
viritys<br />
Käsitemalli<br />
Käsitemalli, täydennetty<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
3. normaalimuodossa<br />
olevat käsitteet<br />
Relaatiokanta<br />
© Jouni Huotari & Ari Hovi
NORMALISOINNIN TARKOITUS<br />
• Normalisointi (normalisation) on menetelmä, jonka avulla<br />
tietorakenteita voidaan jalostaa ”parempaan”<br />
tallennusmuotoon<br />
• Parempi tarkoittaa tässä yhteydessä rakennetta,<br />
– jossa on tietojen toistaminen (redundanssi) minimoitu<br />
– joka on tehokas päivitysten kannalta<br />
– joka on helpompi pitää yhdenmukaisena, sillä tiedot tarvitsee<br />
päivittää vain yhteen paikkaan<br />
– joka on muutosjoustava<br />
© Jouni Huotari & Ari Hovi
NORMALISOINTIVAIHEET<br />
1. Normaalimuoto<br />
Erota toistuvat ryhmät ja moniarvoiset sarakkeet<br />
omaksi käsitteekseen<br />
2. Normaalimuoto<br />
Jokaisen ei-avaintiedon tulee olla riippuvainen<br />
koko perusavaimesta<br />
3. Normaalimuoto<br />
Poista sisäiset (ei-avaimeen kohdistuvat)<br />
riippuvuudet<br />
© Jouni Huotari & Ari Hovi
1. NORMAALIMUOTO<br />
HENKILÖ<br />
Htun Nimi Palkka Pvm_1 Palkka_1 Pvm_2 Palkka_2<br />
1. Normaalimuoto :<br />
Poista toistuvat ryhmät ja moniarvoiset sarakkeet<br />
HENKILÖ<br />
PALKKAHISTORIA<br />
Htun Nimi Palkka Htun Pvm Palkka<br />
© Jouni Huotari & Ari Hovi
FUNKTIONAALINEN RIIPPUVUUS<br />
A<br />
B<br />
Sarake B on funktionaalisesti riippuvainen A:sta, jos A:ta<br />
kohti on korkeintaan yksi B:n arvo kunakin ajanhetkenä.<br />
HENKILÖ ( Htun, Nimi, Osoite )<br />
HENKILÖ ( Htun, Nimi, Osoite )<br />
<br />
© Jouni Huotari & Ari Hovi
2. NORMAALIMUOTO<br />
TILAUS<br />
ToimNro Osanro Nimi Osoite Tilattu_kpl<br />
Mitä mieltä olet kenttien nimistä<br />
Ymmärrätkö mitä ne<br />
tarkoittavat<br />
2. Normaalimuoto:<br />
Jos avain koostuu useasta sarakkeesta, on jokaisen<br />
muun sarakkeen oltava riippuvainen koko avaimesta.<br />
TOIMITTAJA<br />
ToimNro Nimi<br />
Osoite<br />
TILAUS<br />
ToimNro Osanro<br />
Tilattu_kpl<br />
• Mitä jos näin ei tehdä<br />
– Ei voida tallettaa toimittajatietoja etukäteen<br />
– Vanhoja tilauksia poistettaessa tietyn toimittajan tiedot voivat häipyä<br />
– Toimittajan osoitteen muutos tulee moneen paikkaan<br />
© Jouni Huotari & Ari Hovi
3. NORMAALIMUOTO<br />
TOIMITTAJA<br />
ToimNro Nimi Katuosoite Postinro Posti<br />
122 Oy Fi Koekatu 3B 00530 Hki<br />
3. Normaalimuoto:<br />
TOIMITTAJA<br />
Kaikkien sarakkeiden tulee olla riippuvia<br />
vain perusavaimesta.<br />
ToimNro Nimi Katuosoite Postinro<br />
122 Oy Fi Koekatu 3B 00530<br />
• Mitä jos näin ei tehdä<br />
POSTI<br />
Postinro<br />
00530 Hki<br />
– Postitoimipaikkoja ei voida tallettaa ennen toimittajan<br />
talletusta<br />
Postitoimip<br />
– Postitoimipaikan nimen muutos tulee moneen paikkaan<br />
© Jouni Huotari & Ari Hovi
3NM JA KÄSITTEET<br />
• Suunnitteluputkessa normalisoidaan käsitteitä<br />
– Normalisointi voi tarvittaessa myöhemmin kohdistua tauluihin,<br />
tietueisiin jne.<br />
– Käsitemallin normalisointi tarkistetaan käsite käsitteeltä<br />
– Melko työlas operaatio, mutta vaivannäkö yleensä kannattaa<br />
• Yhteenvetona (NM = normaalimuoto): kaikkien eiavaintietojen<br />
tulee olla funktionaalisesti riippuvia<br />
– perusavaimesta (1. NM),<br />
– koko perusavaimesta (2. NM) ja<br />
– vain perusavaimesta (3. NM)<br />
© Jouni Huotari & Ari Hovi
TEHTÄVÄ: NORMALISOINTI<br />
• Tarkista tekemäsi käsitemalli<br />
– missä normaalimuodossa malli on<br />
– olisiko järkevää normalisoida mallia pitemmälle<br />
– mitä etuja tai haittoja pitkälle normalisoidusta ratkaisusta<br />
on<br />
• Vinkki: usein tehdään nk. ideaalimalli, jossa<br />
normalisointi on ulotettu ”kaikkiin” tilanteisiin ja sen<br />
jälkeen tehdään perustellut rajaukset siitä, mikä tulee<br />
olemaan toteutettava ratkaisu (ts. palataan lähelle<br />
toista normaalimuotoa)<br />
• Lisätehtävä: Tee kirjan (Hovi et. al. 2003) harjoitukset 9 ja 10<br />
© Jouni Huotari & Ari Hovi
SUUNNITTELUPUTKI<br />
Käyttäjien<br />
näkemykset<br />
Näytöt, ikkunat<br />
Raportit<br />
<strong>Käsiteanalyysi</strong><br />
Tarveanalyysi<br />
Normalisointitark.<br />
Tietokannan<br />
määrittely<br />
Käsitemalli<br />
Käsitemalli, täydennetty<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
3. normaalimuodossa<br />
olevat käsitteet<br />
Relaatiokanta<br />
Suorituskyvyn<br />
viritys<br />
© Jouni Huotari & Ari Hovi
• Käsitteistä tulee taulu!<br />
KÄSITTEISTÄ TAULUIKSI<br />
OSASTO<br />
•Osastotunnus<br />
•Osaston_nimi<br />
Osastot<br />
Osastotunnus<br />
Osaston_nimi<br />
Käsitteen tiedot (ominaisuudet) sarakkeiksi (kentiksi, field)<br />
Käsitteen yksilöivä tieto taulun perusavaimeksi (primary key)<br />
© Jouni Huotari & Ari Hovi
RIIPPUVUUDET<br />
• Isä-lapsisuhteesta (1:M) tulee viiteavain lapsitauluun<br />
OSASTO<br />
osastotun<br />
osastonimi<br />
jne.<br />
OSASTO<br />
osastotun osastonimi jne<br />
Käsitemallin yhden-suhde-moneen yhteys muunnetaan<br />
lapsi-taulun viiteavaimeksi (isätaulun perusavain)<br />
HENKILO<br />
htun<br />
sukunimi<br />
etunimi<br />
HENKILO<br />
htun sukunimi etunimi osastotun<br />
HUOM. jos viiteavain on jo lapsitaulussa perusavaimen osana, ei viiteavainta<br />
tietenkään enää tarvitse lisätä.<br />
© Jouni Huotari & Ari Hovi
• Taulun sarake voi olla<br />
– Perusavain<br />
– Viiteavain<br />
– Toissijainen hakuavain<br />
• tarvitaan nopea haku<br />
SARAKKEIDEN ROOLIT<br />
• edellyttää usein indeksin<br />
– “Tavallinen tieto”<br />
• Sarake voi kuulua moniosaiseen perusavaimeen ja olla<br />
samalla viiteavain (ks. seuraava kuva)<br />
© Jouni Huotari & Ari Hovi
PROJEKTI<br />
ptun<br />
pnimi<br />
HENKILO<br />
htun<br />
etunimi<br />
sukunimi<br />
osoite<br />
Perusavain<br />
OSALLISTUMINEN<br />
ptun<br />
htun<br />
tunnit<br />
Viiteavain Projektiin<br />
Viiteavain Henkilöön<br />
PERUSAVAIN VOI MUODOSTUA VIITEAVAIMISTA<br />
© Jouni Huotari & Ari Hovi
USEITA YHTEYKSIÄ: USEITA VIITEAVAIMIA<br />
ASIAKAS<br />
tilaa<br />
vastaanottaa<br />
maksaa<br />
KULJETUS-<br />
TILAUS<br />
kolme viiteavainta<br />
tilausnro pvm ... astun_tilaaja astun_maksaja astun_vast_ottaja<br />
© Jouni Huotari & Ari Hovi
PERUSAVAIN-RESEPTI<br />
• Määrittele perusavain pakolliseksi<br />
– CREATE TABLE lasku<br />
– (laskunro integer NOT NULL, ….<br />
• Määrittele perusavain SQL:lla<br />
– …, PRIMARY KEY (htun, ptun), ….<br />
• Joissakin tuotteissa on vielä perustettava UNIQUE- indeksi<br />
– esim. DB2, SQLBase<br />
– Oracle ja SQL Server perustavat automaattisesti<br />
perusavainindeksin<br />
– CREATE UNIQUE INDEX prhe_ind ON PRHE(ptun, htun)<br />
© Jouni Huotari & Ari Hovi
VIITEAVAIN-RESEPTI<br />
• Määrittele viiteavaimet pakollisiksi (NOT<br />
NULL) vain, jos viiteavain ei saa puuttua<br />
• Kuvan mukaan ei-pakollinen yhteys,<br />
Henkilö-taulussa:<br />
– ostun CHAR (4), -- ei siis NOT NULL<br />
CONSTRAINT henkilo_os_fk<br />
FOREIGN KEY (ostun)<br />
REFERENCES Osasto(ostun) ...<br />
• Perusta viiteavaimille indeksi; yleensä ei<br />
UNIQUE<br />
– parantaa liitosten tehokkuutta<br />
huomattavasti<br />
© Jouni Huotari & Ari Hovi<br />
”voi<br />
kuulua”<br />
Osasto<br />
Henkilö<br />
• ostun<br />
• htun<br />
• ostun (FK)
SUUNNITTELUPUTKI<br />
Käyttäjien<br />
näkemykset<br />
Näytöt, ikkunat<br />
Raportit<br />
<strong>Käsiteanalyysi</strong><br />
Tarveanalyysi<br />
Normalisointitark.<br />
Tietokannan<br />
määrittely<br />
Käsitemalli<br />
Käsitemalli, täydennetty<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
Perusavain<br />
Tieto1<br />
Tieto2<br />
3. normaalimuodossa<br />
olevat käsitteet<br />
Relaatiokanta<br />
Suorituskyvyn<br />
viritys<br />
© Jouni Huotari & Ari Hovi
SUORITUSKYVYN VIRITYS<br />
• Ennen kuin tietokanta otetaan tuotantokäyttöön, pitäisi<br />
sen suorituskyky testata todellisilla volyymeillä<br />
(mielellään jo protoiluvaiheessa)<br />
• Useissa tietokantatuotteissa on erillinen “performance<br />
analyzer”, joka antaa suosituksia mm. indeksien<br />
perustamiseksi<br />
© Jouni Huotari & Ari Hovi
LISÄTIETOJA<br />
• Hovi, Huotari, Lahdenmäki: Tietokantojen suunnittelu &<br />
indeksointi, Docendo (2003, 2005)<br />
• Hovi, Ari. SQL-opas, Docendo (2004)<br />
• Connolly & Begg: Database Systems, Addison Wesley<br />
(2003)<br />
• Soini, Tapani. Tietoanalyysi, Weilin&Göös (1984)<br />
© Jouni Huotari & Ari Hovi