Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia

Samankaltaiset tiedostot
Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2004 Tietokannan suunnittelusta. Harri Laine 1

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokannan suunnittelusta Harri Laine 1

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, k 2006 relaatioalgebra. Harri Laine 1

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

On autoja, henkilöitä, Henkilöllä on nimi Autolla on omistaja, joka on henkilö. Taulu AUTO(rekno, malli) Taulu HENKILO(nimi, )

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

HELIA 1 (17) Outi Virkki Tiedonhallinta

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Mitä malleja olisi tarjolla? Abstraktiotasot tiedon käsittelyssä

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

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

millainen on se kohde, jota tiedoilla pitäisi kuvata asiat, joita pitäisi esittää Mitä tietoelementtien arvot tarkoittavat

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

Helsingin yliopisto/tktl Tietokantojen perusteet, k 2003 Relaatiomallin peruskäsitteet Harri Laine 1. Tietomallit. Näkökulmat tietoon

Tietokantojen suunnittelu, relaatiokantojen perusteita

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Näkökulmat tietoon. Abstraktiotasot tiedon käsittelyssä

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

Tietokannan suunnittelu

Relaatiomalli ja -tietokanta

TIETOKANNAN NORMALISOINTI JA NORMAALIMUODOT

HELIA 1 (17) Outi Virkki Tiedonhallinta

HELIA TIKO-05 1 (20) ICT03D Tieto ja tiedon varastointi O.Virkki

NORMALISOINTI TIETOJEN MALLINNUS JOUNI HUOTARI & ARI HOVI

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

Nimi: Henkilötunnus: {id} {+id}

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

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

2. Käsiteanalyysi ja relaatiomalli

CSE-A1200 Tietokannat

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

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

HELIA 1 (20) Outi Virkki Tiedonhallinta

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Relaatioalgebra. Kyselyt:

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

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

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

3. Käsiteanalyysi ja käsitekaavio

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

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

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

Luokkakaavion laatiminen

Tietokannat II -kurssin harjoitustyö

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

HAAGA-HELIA Heti-09 1 (27) ICT05 Tiedonhallinta ja Tietokannat O.Virkki

SELECT-lauseen perusmuoto

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

Jouni Huotari & Ari Hovi. Käsitemallinnuksesta relaatiokantaan KÄSITEMALLI. LOOGINEN MALLI: tietomalli valittu. FYYSINEN MALLI: DBMS valittu

HELIA 1 (12) Outi Virkki Tiedonhallinta

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

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

Yhdiste, leikkaus, erotus ym.

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

Mikä on tietomalli? Relaatiomallin käsitteitä 1/2 (kuva 5.1) Relaatiomallin taustaa

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Kyselyn yleisrakenne:

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

YHTEYSSUHDE (assosiation)

HELIA TIKO-05 1 (28) ICT03D Tieto ja tiedon varastointi O.Virkki

Oliotietokannat. Nääsvillen Oliopäivät Pekka Kähkipuro Kehitysjohtaja, FT

Talousmatematiikan perusteet: Luento 11. Lineaarikuvaus Matriisin aste Käänteismatriisi

HELIA 1 (11) Outi Virkki Tiedonhallinta

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

Relaatioista TIETOJENKÄSITTELYTIETEIDEN LAITOS, JUHA IISAKKA 11-14

Luento 3 Tietokannan tietosisällön suunnittelu

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 ER-mallin peruskäsitteet.

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

Tietokannan suunnittelu

Tietokantakurssit / TKTL

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto.

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

HARJOITUS 2. Kasvattamot ja mittaukset

1. Tarkastellaan seuraavaa kaaviota

UML - unified modeling language

PALKKA-AINEISTON SIIRTOTIEDOSTO

Johdatus sovellussuunnitteluun, s 2001, osa 4b Helsingin yliopisto / TKTL Harri Laine / Inkeri Verkamo 1. Luokkakaavion tarkoitus

TURVAPUHELINPALVELU TILAUSLOMAKKEEN TÄYTTÖOHJEET

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Lisätään avainarvo 1, joka mahtuu lehtitasolle:

Normalisointi. Jouni Huotari & Ari Hovi. kirjan Hovi, Huotari, Lahdenmäki: Tietokantojen suunnittelu & indeksointi, Docendo (2003, 2005) luku 5

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

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

Talousmatematiikan perusteet: Luento 10. Lineaarikuvaus Matriisin aste Determinantti Käänteismatriisi

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

Transkriptio:

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia toistuva tieto vie turhaa tilaa ylläpito muodostuu hankalaksi kaikki kopiot päivitettävä ylläpito-operaatioilla voi olla odottamattomia sivuvaikutuksia. Toisaalta toistosta on etuakin tiedon haku saattaa nopeutua 1 Esimerkki taulusta, joka ei käyttäydy hyvin: EMP_DEPT: E_no E_name Jos O.Itä poistetaan, häviää tieto tuotantoosastosta E_bdate D_no D_name D_location 1 M.Seppä 1.3.59 3 Myynti Helsinki 2 D.Leivo 4.10.40 3 Myynti Helsinki 3 K.Koivu 30.1.66 4 Hallinto Lahti 4 B.Oja 2.5.65 4 Hallinto Lahti 5 O.Itä 10.2.55 6 Tuotanto Helsinki Avain: E_no Toistettava jokaisen osaston tt:n kohdalla Jos Hallinto muuttaa Espooseen om muutettava useita rivejä 2

Ei tarpeetonta toistoa E_no E_name E_bdate D_no 1 M.Seppä 1.3.59 3 2 D.Leivo 4.10.40 3 3 K.Koivu 30.1.66 4 4 B.Oja 2.5.65 4 5 O.Itä 10.2.55 6 Parempi ratkaisu D_no D_name D_location 3 Myynti Helsinki 4 Hallinto Lahti 6 Tuotanto Helsinki 3 Tietokannan suunnittelun vaiheita ovat tietosisällön kartoitus luokkakaaviona (Johdatus sovellussuunnitteluun) kartoittamalla attribuutit ja niiden väliset riippuvuudet loogisten rakenteiden suunnittelu ja teknisten rakenteiden suunnittelu. Loogisen rakenteen suunnittelun tavoite on sijoittaa yhteenkuuluvat tiedot samaan taulu 4

Muunnos luokkakaaviosta relaatiokaavioon Järjestelmän määrittelyn yhteydessä järjestelmän tietosisältö voidaan määritellä luokkakaavion avulla Luokkakaavio kuvaa tällöin järjestelmän pysyväisluonteisia (persistent) tietoja - tietojen on säilyttävä ohjelman suorituskertojen välillä Luonteva paikka säilyttää olioiden tila on tietokanta: oliorakenteinen tietokanta (oliotietokanta) relaatiotietokanta 5 Muunnos luokkakaaviosta relaatiokaavioon relaatiotietokanta standardoitu SQL ja liittymät perinteisiin ohjelmointikieliin ei suoraa tukea olioiden välisille yhteyksille ei luokkahierarkiaa eikä periytymistä vain data ei toimintoja uusimmissa tkhj:ssä mukana oliopiirteitä edellyttää muunnosta oliorakenteista relaatiorakenteiksi 6

Muunnos luokkakaaviosta relaatiokaavioon Lähtökohtana normalisoitu luokkakaavio = tiettyjä sääntöjä noudattava kaavio Yhteydet näkyviä, ei attribuuteiksi piilotettuja Kukin asia esitetään vain kertaalleen Ei johdettavissa / pääteltävissä olevaa tietoja Yhteydet määritelty oikeiden osapuolten välillä 7 Yhteydet piilotettu Olioiden välinen kytkentä esitetään aina yhteytenä, sitä ei piiloteta ominaisuudeksi (attribuutiksi) Kurssi Opettajan_ Opettaja Nimi Kytkentä on piilotettuna kurssin attribuuttiin opettajan_ 8

Yhteyden piilotus Olioiden välinen kytkentä esitetään aina yhteytenä, sitä ei piiloteta ominaisuudeksi (attribuutiksi) Kurssi Opettajan_ Kurssi opetus Opettaja Nimi 9 Asiat esitetään vain kertaalleen Samaa asiaa ei pidä esittää sekä yhteytenä että ominaisuutena Tilaus Tilaajan_ 0..n tilaaja 1 Asiakas Nimi 10

Ei esitetä johdettavissa olevaa tietoa tulisi selvittää mitkä tiedot ovat perustietoja ja mitkä voidaan päätellä (laskea) muiden tietojen perusteella attribuutin arvo tai yhteyden olemassaolo voi olla pääteltävissä Kurssi ilmoittautuneiden_lkm ilmoittautunut 0..n 0..n laskettavissa Opiskelija. 11 Ei esitetä johdettavissa olevaa tietoa Kurssi 0..n kurssilla 1..n 1..n Harjoitusryhmä Opiskelija 0..n ryhmässä 1..n Kurssilla-yhteys on pääteltävissä, jos jokaisen kurssin osanottajan on oltava jossain ryhmässä 12

Muunnoksen perussäännöt: Kutakin olioluokkaa vastaa samannen taulu Kullakin luokan yksiarvoisella attribuutilla on samannen vastinsarake luokkaa vastaavassa taulussa Luokan tunnistavia attribuutteja vastaavat sarakkeet kuuluvat luokkaa vastaavan taulun avaimeen 13 Luokkakaavio: Vippi oy 1 asiakas hetu {id} osoite virkailija nro {id} 0..* pantti kuittinro{id} tyyppi ikä arvo 1..* erä eräpvm {id} maksupvm summa 0..* 1..* arvioija 0..* 1 hyväksyjä 1 laina lainanro {id} summa maksusuunnitelma nro {+id} korko {id} 1..* {id} 14 1..*

Relaatiorakenteen ydin - jokaista luokkaa vastaa taulu asiakas hetu osoite virkailija nro pantti kuittinro tyyppi ikä arvo erä eräpvm maksupvm summa laina lainanro summa maksusuunnitelma nro korko 15 Kokoelma-attribuutit Kutakin kokoelma-attribuuttia (moniarvoista) vastaa taulu, jonka sarakkeina ovat viiteavain kokoelmatyyppisen attribuutin sisältävää luokkaa vastaavaan tauluun, sarake attribuutin arvoa varten. Taulun kaikki sarakkeet kuuluvat avaimeen 16

Kokoelma-attribuutit Vippi oy:n esimerkissä ei ole kokoelmaattribuutteja esim: henkilö hetu henkilö hetu (id) oppiarvo [ ] viiteavain moniarvoinen oppiarvo hetu oppiarvo 17 Monen suhde moneen yhteydet Kutakin monen suhde moneen yhteyttä vastaa taulu Taulun = yhteyden Taulun sarakkeina ovat yhteyden osapuoliin osoittavat viiteavaimet. Taulun kaikki sarakkeet kuuluvat taulun pääavaimeen monen suhde moneen yhteys on yhteys, jossa kummankin osapuolen maksimiosallistumisrajoite on suurempi kuin 1. 18

Monen suhde moneen yhteydet virkailija nro (id) 0..* 1..* arvioija pantti kuittinro (id) tyyppi ikä arvo 19 Monen suhde moneen yhteydet asiakas hetu osoite virkailija nro pantti kuittinro tyyppi ikä arvo arvioija kuittinro virkailija_nro laina lainanro summa maksusuunnitelma nro korko erä eräpvm maksupvm summa 20

Yhden suhde moneen yhteydet Vaihtoehto 1: Lisää yhteyskumppaniin osoittava viiteavain sitä osapuolta vastaavaan tauluun, jolla on korkeintaan yksi kumppani Jos kookoonpanoyhteydessä kokoonpanon osien tunnistamiseen tarvitaan tieto kokonaisuudesta, niin lisätty viiteavain kuuluu taulun avaimeen. Tällaisessa tilanteessa ei ole muita vaihtoehtoja. 21 Yhden suhde moneen yhteydet Vaihtoehto 2: Toimi kuten monen suhde moneen yhteyksien kohdalla ja tee yhteyttä varten erillinen taulu Taulujen määrän minimoimiseksi vaihtoehtoa 1 tulisi suosia, ellei siitä seuraa epäedullisia viittaussyklejä taulujen välille. 22

Yhden suhde moneen yhteydet 1 asiakas hetu (id) osoite virkailija nro (id) 1..n 1 0..n arvioija pantti kuittinro (id) tyyppi ikä arvo hyväksyjä 1..n erä eräpvm (id*) maksupvm summa 0..n 0..n 1 laina lainanro (id) summa 1..n maksusuunnitelma nro (id*) korko 1..n 23 asiakas hetu osoite virkailija nro pantti kuittinro tyyppi ikä arvo lainanro arvioija kuittinro virkailija_nro laina lainanro summa asiakas maksusuunnitelma lainanro nro korko hyväksyjä erä lainanro nro eräpvm maksupvm summa 24

Yhden suhde yhteen yhteydet Vaihtoehtoja: Lisää yhteyskumppaniin osoittava viiteavain yhteyden toista osapuolta vastaavaan tauluun ensisijaisesti sille, jolle yhteys on pakollinen jos yhteys on pakollinen molemmille, valitse kumpi tahansa Tee erillinen taulu, kuten monen suhde moneen tapauksessa. jos yhteys on molemmille osapuolille valinnainen 25 Yhden suhde yhteen yhteydet henkilö hetu (id) naimisissa vaimo aviomies 1 vaimo 0..1 naimisissa 0..1 aviomies henkilö hetu 0..1 ajokortti ajokorttinro (id)... ajokortti ajokorttinro hetu... 26

Yleistyshierarkia Vaihtoehto 1: Taulu sekä ala- että yläluokalle. Alaluokan tauluun sijoitetaan yläluokan tauluun osoittava viiteavain. Jos yläluokalla on käyttäjän määrittelemiä tunnistavia attribuutteja otetaan viiteavain alaluokan taulun avaimeksi. Jos yläluokan taululla ei ole käyttäjän määrittämää tunnistavaa attribuuttia, joudutaan sille luomaan keinotekoinen avain. Tätä ei oteta alaluokan taulun avaimeksi, jos alaluokalle on määritelty tunnistavia attribuutteja. 27 Yleistyshierarkia oik_henkilö henkilö hetu (id) omist. osake nippu (id) yritys rekno (id) 0..* pienyritys 28

Yleistyshierarkia käytetty keinotekoista avainta oik_henkilö oh_nro henkilö hetu oh_nro omist. upotettu yläluokan avain yritys rekno oh_nro osake rekno nippu pienyritys rekno 29 Yleistyshierarkia Vaihtoehto 2: Alaluokalle ei tehdä omaa taulua, vaan alaluokan tauluun loogisesti kuuluvat sarakkeet upotetaan yläluokan tauluun. työntekijä hetu (id) johtaja alaisten lukumäärä työntekijä hetu alaisten_lukumäärä 30

Loogisen rakenteen suunnittelun tavoite on sijoittaa yhteenkuuluvat tiedot samaan tauluun Relaatiomalliin liittyvässä suunnitteluteoriassa yhteenkuuluvuus määritellään riippuvuuksien avulla Keskeinen riippuvuus: funktionaalinen riippuvuus Attribuutti B on funktionaalisesti riippuva attribuutista A (A määrää funktionaalisesti B:n), jos ja vain jos kaikissa relaatiokaavion R ilmentymissä kuvaus A:n arvojoukolta B:n arvojoukolle on funktionaalinen. 31 Kuvaus f:v(a)->v(b) on funktionaalinen, jos kaikissa relaatiokaavion R ilmentymissä jokainen A:n arvo kuvautuu yhdelle B:n arvolle eli, jos riveillä r ja s attribuutilla A on sama arvo (r.a=s.a), niin näillä riveillä täytyy myös B-attribuuteilla olla keskenään sama arvo (r.b=s.b). Funktionaalinen riippuvuus tarkoittaa sitä, että attribuutin B arvo on yksikäsitteisesti selvitettävissä kun tiedetään attribuutin A arvo. Selvittäminen voisi tapahtua kyselyllä select distinct B from R where A=a; (tuloksena olisi enintään yksi rivi) 32

Funktionaalista riippuvuutta, jossa A määrää B:n merkitään A B. Attribuuttia A kutsutaan määrääjäksi. Yksittäisen attribuutin A tilalla voi olla myös attribuuttiyhdistelmä. Tavoitteena on kuitenkin löytää yhdistelmät, joissa on minimaalinen määrä attribuutteja, Jos A B, voidaan määrääjään lisätä mikä tahansa attribuutti x ja pätee Ax B. Avain määrää funktionaalisesti kaikki relaatiokaavan attribuutit Riippuvuudet ilmaisevat jonkin kuvattavaan todellisuuteen liittyvän säännön 33 Tarkastellaan relaatiokaaviota Kurssilainen( Kurssikoodi, Hetu, OpiskelijaNimi, KurssiNimi, TehtavaLkm). Oletetaan että relaatio sisältää tietoja useista opiskelijoista ja useista kursseista ja kuvaa opiskelijoiden osallistumista kursseille. 34

Hetu-->OpiskelijaNimi Yhtä henkilötunnusta kohden on vain yksi Opiskelija Henkilötunnuksen perusteella on selvitettävissä opiskelijan Kurssikoodi KurssiNimi Yhtä kurssikoodia kohti on vain yksi kurssi Hetu, Kurssikoodi --> TehtäväLkm Yhtä henkilötunnus kurssikoodi yhdistelmää kohti on vain yksi tehtävälukumäärä = Henkilön tekemien tehtävien lukumäärä tehtävämäärä on kurssikohtainen Yhtä henkilötunnusta kohti voi olla useita tehtävämääriä (opiskelija on monella kurssilla) Yhtä kurssikoodia kohti voi olla monta tehtävämäärää (kurssilla on monta opiskelijaa) 35 Mitkä sarakkeet samaan relaatiokaavioon? Erilaisia kriteerejä Yhteenkuuluvuussääntönä, ns. Boyce-Codd normaalimuodon sääntö: relaatiokaavion R attribuutit kuuluvat yhteen, jos ja vain jos relaatiokaavioon R ei liity yhtään sellaista funktionaalista riippuvuutta, jossa määrääjä ei sisältäisi relaation avainta. Kurssilainen relaation avain on pari Kurssikoodi, Hetu => Kaikki attribuutit eivät BC-säännön mukaan kuulu yhteen koska Hetu-->OpiskelijaNimi ja Kurssikoodi KurssiNimi rikkovat BC-sääntöä 36

Attribuutit on uudelleenjärjesteltävä relaatiokaavioiksi, joissa yhteenkuuluvuussäännöt ovat voimassa. päädytään relaatiokaavioihin Opiskelija(Hetu, OpiskelijaNimi) Kurssi(Kurssikoodi, KurssiNimi) Osallistuminen(Hetu, Kurssikoodi, TehtäväLkm). 37 Jako Boyce-Codd normaalimuotoon Miten järjestellään: Karsi riippuvuusjoukko minimaaliseksi poista johdettavissa olevat riippuvuudet (materiaalissa sääntöjä) Ryhmitä riippuvuudet yhteisen määrääjän (vasen puoli) perusteella. Muodosta jokaista ryhmää kohti oma relaatio Jos alkuperäisen kaavion yksikään avain ei sisälly muodostuneisiin relaatiokaavioihin tee sille oma kaavio Anna relaatiokaavioille nimet 38

Tilauslomaketta analysoitaessa löydettiin seuraavat attribuutit: lomakenumero, tilaajan tunnus, tilaajan, tilaajan osoite, tilaajan puhelinnumero, toimitusosoite, rivinumero, tavaran koodi, tavaran, tilattu määrä, ja tilauspäivä. 39 lomakenumero tilaajan tunnus (lomakkeella voidaan ilmoittaa vain yksi tilaaja) tilaajan tunnus tilaajan (tunnus identifioi tilaajan, joten sen perusteella saamme selville kaikki tilaajaan liittyvät tiedot) tilaajan tunnus tilaajan osoite, tilaajan tunnus tilaajan puhelinnumero, lomakenumero toimitusosoite (lomakkeella voidaan tilata tavaroita vain yhteen paikkaan) lomakenumero tilauspäivä (lomakkeeseen liittyy yksikäsitteinen tilauspäivä 40

tavaran koodi tavaran (tavaran koodi on tavaran tunniste, jonka kautta päästään kaikkiin tavaran tietoihin) lomakenumero, rivinumero tavaran koodi (lomakkeen rivillä voi ilmoittaa yhden tilattavan tavaran koodin) lomakenumero, rivinumero tilattu määrä (lomakkeen rivillä voi ilmoittaa yhden tilattavan tavaran määrän) 41 Jako relaatioihin yhteisen määrääjän perusteella (jos riippuvuuksissa sama määrääjä niin niissä esiintyvät attribuutit samaan relaatioon) X(tilaajan tunnus, tilaajan, tilaajan osoite, tilaajan puhelinnumero) Y(tavaran koodi, tavaran ) Z(lomakenumero, tilauspäivä, tilaajan_tunnus, toimitusosoite) T(lomakenumero, rivinumero, tavaran koodi, tilattu määrä) 42

Jos kaavioille löytyy kuvaava, jako on onnistunut: tilaaja(tilaajan tunnus, tilaajan, tilaajan osoite, tilaajan puhelinumero) tavara(tavaran koodi, tavaran ) tilaus(lomakenumero,tilauspäivä,tilaajan_tunnus, toimitusosoite) tilausrivi(lomakenumero, rivinumero, tavaran koodi, tilattu määrä) 43 tilaaja tilaajan tunnus tilaajan tilaajan osoite tilaajan puhelinumero tilaus lomakenumero tilauspäivä tilaajan_tunnus toimitusosoite tavara tavaran koodi tavaran tilausrivi lomakenumero rivinumero tavaran koodi tilattu määrä 44