Tietokannan suunnittelu
Jostakin syystä koko luento ei päätynyt minidiscille asti.
Korvikkeeksi voi kuunnella myös
viimevuotista vastaavaa luentoa.
Tietokannan suunnittelun vaiheet (Leppänen, 2001):
- Vaatimusten
määrittely ja analyysi
- Haastatteluin, kirjalliseen materiaaliin tutustumalla ja
keskusteluin selvitetään järjestelmältä
vaadittavat ominaisuudet. Apuna käytetään usein käyttötapaus-tekniikkaa.
- Käsitteellinen
mallintaminen
- Laaditaan käsitekaava, joka kuvaa tietokannan
sisällön ja rakenteen. Tehdään joko
käsiteanalyysina tai oliomallinnuksena.
- Tehtävä- ja
transaktiosuunnittelu
- Mallinnetaan tehtävät ja transaktiot, joilla
tietokannan tietoja käytetään
- Käyttöliittymän suunnittelu
- Suunnitellaan sovelluksen rakenne ja sovellukseen kuuluvien
näyttöjen sisältö ja rakenne
- Tietokannan looginen suunnittelu
- käsitekaavan pohjalta laaditaan sisällöstä
ja rakenteesta relaatiokaava käytettävissä olevalla
DDL:llä (Data Definition Language)
- Komponenttien suunnittelu
- Kiinnitetään käytettävä arkkitehtuuri,
muodostetaan komponentteja ja määritellään
ne
- Fyysinen suunnittelu
- päätetään tietokannan tallennusrakenteista
ja saantimenetelmistä. Tarkoituksena on tuottaa suorituskyvyn
ja muistitilan käytön suhteen optimaalinen fyysinen
rakenne tietokannalle.
- Toteutus
- Toteutetaan edellisten osien suunnitelmat
ohjelmointikielillä ja testataan toteutuksen toimivuus.
Käsitteellinen mallintaminen (ER-malli)
Kohdetyypit (entity types)
- tunnistettavissa oleva asia tai tapahtuma
- Helposti havaittavia kohdetyyppejä ovat käyttäjien puheissa
esiintyvät henkilöt, esineet, tilat ja tuotteet. Hankalampia ovat
käsitteelliset kohdetyypit kuten tilaus tai sopimus.
- Kohdetyypit ovat sellaisia, joista halutaan tallettaa tietoja pysyvästi tietokantaan. Raportit ja tulosteet eivät ole kohdetyyppejä vaan tietokannan tiedoista johdettuja tulostietoja
- heikko tyyppi (weak entity type)
- olemassaolo riippuu toisesta kohteesta eli ei voi olla olemassa
jos tätä toista kohdetta ei ole myös olemassa.
- esim. tenttitulosta ei voi olla olemassa ilman
tenttijää
suhdetyypit (relationship types)
- vähintään kahden kohteen välillä
vallitseva riippuvuus
- Suhde voi merkitä olemassaoloa, toiminnallista suhdetta tai tapahtumaa
- suhteen aste määräytyy suhteeseen liittyvien
kohteiden lukumäärän mukaan.
- Jos jokaista suhteeseen liittyvää kohdetta A vastaa
vähintään yksi kohde B on kyseessä täysi
suhde (pakollinen suhde) muussa tapauksessa osittainen suhde
- suhdeen kardinaalisuus (cardinality):
- yhden suhde yhteen (one-to-one, 1-to-1)
- yhden suhde moneen (one-to-many, 1-to-M) (monen suhde yhteen
(many-to-one, M-to-1))
- monen suhden moneen (many-to-many, M-to-M)
ominaisuudet (properties, attributes)
- jokaisella samantyyppisellä kohteella on tiettyjä
yhteisiä ominaisuuksia
- opiskelijoilla on kaikilla nimi, sotu, osoite yms
- Ominaisuuksien joukosta valitaan avaimeksi sopivat
- Avaimen pitää olla yksilöivä, uniikki
- Jokainen ominaisuus saa arvonsa (value) tietystä
arvojoukosta (domain)
- ominaisuudet voivat olla koottuja useasta osasta tai
yksittäisiä.
- Nimi voi koostua etu- ja sukunimestä.
- Ominaisuus voi olla yksi- tai moniarvoinen
- Sallitaanko ominaisuuksille tyhjät arvot
- Sallitaaanko tuntemattot arvot (NULL)
- Ominaisuudet voivat olla johdettuja
- esim. tilausten kokonaislukumäärä lasketaan
yksittäistilausten kappalemääristä.
Alityypit
- perintä
- Jokainen kohde on vähintään yhtä
kohdetyyppiä mutta voi olla samaan aikaan useampaakin
- ohjelmoija on on työntekijä eli ohjelmoija on
alityyppi työntekijän ollessä ylityyppi
- ohjelmoijalla on kaikki työntekijän ominaisuudet
mutta ei päinvastoin
- tyyppihierarkia
ER-kaavioiden piirtäminen
- Kohteet
- Jokainen kohde esitetään suorakulmiona jonka
sisällä lukee kyseisen kohteen kohdetyyppi.
- heikoilla kohdetyypeillä suorakulmion kehä
kaksinkertaistetaan
- ominaisuudet
- esitetään ellipseillä jotka on liitetty
jatkuvalla viivalla kohteeseen tai suhteeseen. Ellipsin
sisällä lukee ominaisuuden nimi.
- perityt ominaisuudet liitetään katkoviivalla
- moniarvoiset ominaisuudet liitetään kaksinkertaisella
viivalla
- koottujen ominaisuuksien osaset esitetään kukin omana
ellipsinään jotka liitetään jatkuvilla
viivoilla koostettuun ominaisuuteen.
- Avaimina toimivat ominaisuudet alleviivataan.
- suhteet
- Jokainen suhde esitetään timanttikuviona jonka
sisällä lukee suhteen nimi
- Jos suhde on heikon kohteen ja "vahvan" kohteen
välillä niin timanttikuvion kehä
kaksinkertaistetaan.
- suhteeseen liittyvät kohteet liitetään siihen
jatkuvalla viivalla joista jokaisen kohdalla lukee 1 tai M riippuen
siitä onko kyseessä yhden suhde yhteen, yhden suhde
moneen vai monen suhde moneen.
- suhteen ja kohteen välinen viiva kaksinkertaistetaan jos
kyseessä täysi suhde
- alityypit
- alityyppi yhdistetään ylityyppiin
yhtenäisellä viivalla jonka toisessa
päässä on nuoli (ylityypin
päässä).
Esimerkkikaavio
Suunnitellaan tietokanta pienen yrityksen tietojen ja projektien hallintaan. Yksinkertaistettu versio tietokannan vaatimusmäärittelystä on seuraavanlainen:
- Työntekijöistä talletetaan nimi (etunimi, toinen nimi, sukunimi), puhelinnumerot, palkka ja tieto mahdollisista lapsista.
- Jokainen työntekijä toimii jollakin osastolla.
- Projekteissa työskentelee yksi tai useampia työntekijöitä. Sama työntekijä voi olla yhtäaikaa monessa projektissa.
- Jokaisella projektilla on yksi projektipäällikkö.
- Projekteissa rakennetaan monenlaisia laitteita. joihin tarvitaan tietty määrä tietynlaisia osia. Osia projekteille toimittavat monet eri toimittajat, joiden yhteystiedot pitää tallettaa järjestelmään. Järjestelmän pitää sisältää tieto siitä, mitä osia ja miltä toimittajalta on toimitettu millekin projektille.
- Jotkut osat koostetaan itse muista osista. Tietokannan pitää siis sisältää tieto myös osien koostumuksesta.
- Järjestelmästä pitää selvitä myös, mitkä toimittajat pystyvät toimittamaan mitäkin osia.

Esimerkkinä laaditaan pienen ääniterekisterin ER-kaavio. Tietokannan vaatimusmäärittely on seuraavanlainen:
- Tietokantaan halutaan tallentaa äänitteen nimi, tyyppi, julkaisuvuosi, kestoaika, julkaisija
- Jokaisesta äänitteestä pitää tietää myös minkä yhtyeen levy on kyseessä. Jokaisesta yhtyeestä halutaan tallentaa tieto yhtyeen kotimaasta, yhtyeen jäsenien nimistä, kunkin jäsenen päätehtävä yhtyeessä, jäsenten kotimaasta
- Jokaisesta kappaleesta halutaan tallentaa nimi, kestoaika, säveltäjä(t), sanoittaja(t), esittäjä(t) ja mahdollisia muitakin vastaavia tietoja