CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

Samankaltaiset tiedostot
CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CS-A1150 Tietokannat CS-A1150 Tietokannat / 54

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 32

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

2. Käsiteanalyysi ja relaatiomalli

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

3. Käsiteanalyysi ja käsitekaavio

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

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

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

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

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

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

UML - unified modeling language

HELIA 1 (17) Outi Virkki Tiedonhallinta

UML Luokkakaavio 14:41

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Tietokannat II -kurssin harjoitustyö

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 39

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

2. Olio-ohjelmoinnin perusteita 2.1

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Ohjelmistojen mallintaminen, kesä 2009

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

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

CS-A1150 Tietokannat

Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio:

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

CSE-A1200 Tietokannat

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

Ohjelmistojen mallintaminen, mallintaminen ja UML

Tietokantojen suunnittelu, relaatiokantojen perusteita

CS-A1150 Tietokannat

CSE-A1200 Tietokannat

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

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

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

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Tietokannat II -kurssin harjoitustyö

Johdanto. Olio (Object) Luokka (Class) Olion kuvaaminen

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

Luokat ja oliot. Ville Sundberg

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

TIE = JOTU. VH5 - MagicDraw

Mitä on periytyminen?

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

JHS 162 Paikkatietojen mallintaminen tiedonsiirtoa varten Liite 1 UML-mallinnus

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Ohjelmistotekniikan menetelmät, UML

Liigan taulut ja attribuutit

keskenään isomorfiset? (Perustele!) Ratkaisu. Ovat. Tämän näkee indeksoimalla kärjet kuvan osoittamalla tavalla: a 1 b 3 a 5

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

Relaatiomalli ja -tietokanta

5. Järjestelmämallit. Mallinnus

CS-A1150 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

19. Unified Modeling Language (UML)

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

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Luokka- ja oliokaaviot

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

Luokka (class) esitetään suorakulmion avulla, jonka sisälle kirjoitetaan luokan nimi (vahvennettuna).

JYVÄSKYLÄN YLIOPISTO Valintakoe s2011 Sivu 1 Tietojärjestelmätieteen opiskelijavalinta. Nimi: Henkilötunnus:

Ohjelmistojen mallintaminen, kesä 2010

CSE-A1200 Tietokannat

Mallinnus. 5. Järjestelmämallit. Abstraktiot. Mallinnuksen etuja. Arkkitehtuurimalli. Yhteysmallit. Ohjelmistotuotanto, järjestelmämallit Kevät 2005

OHJE TESTIAINEISTON ANONYMISOINNISTA

Ohjelmistotekniikan menetelmät, kesä 2008

HARJOITUS 2. Kasvattamot ja mittaukset

Lohdutus - tietokantadokumentti

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

Sanomme, että kuvaus f : X Y on injektio, jos. x 1 x 2 f (x 1 ) f (x 2 ) eli f (x 1 ) = f (x 2 ) x 1 = x 2.

Luokkakaavion laatiminen

Harjoitustehtävät ja ratkaisut viikolle 48

Ohjelmistotekniikan menetelmät, kevät 2008

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita.

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

UML-kielen formalisointi Object-Z:lla

Transkriptio:

CS-A1150 Tietokannat 5.3.2019 CS-A1150 Tietokannat 5.3.2019 1 / 35

Oppimistavoitteet: tämän luennon jälkeen Osaat tehdä tietokantaa kuvaavan mallin UML-kaavion avulla. Tunnet esimerkiksi seuraavat UML-mallinnuksen keskeiset asiat: luokka ja attribuutti assosiaatio assosiaatioluokka aliluokka kompositio ja aggregaatio. CS-A1150 Tietokannat 5.3.2019 2 / 35

UML-mallinnus Ongelma: mitä relaatioita luotavaan tietokantaan pitäisi määritellä? Usein on helpompi aloittaa suunnittelu korkeammalla tasolla kuin suoraan relaatiomallilla. Tässä esitetään yksi tapa esittää korkeamman tason suunnitelmia, UML-kaaviot (UML diagrams, UML = Unified Modeling Language). UML on alunperin kehitetty olio-ohjelmien suunnitteluun. Tietokantojen suunnittelussa UML:stä käytetään vain pientä osaa sen tarjoamista ominaisuuksista ja mahdollisuuksista. Muita yleisesti käytettyjä tapoja suunnitelmien esittelyyn: ER-kaaviot (entity-relationship diagrams, E/R diagrams) ODL (Object Description Language) CS-A1150 Tietokannat 5.3.2019 3 / 35

Eroja olio-ohjelmoinnin UML-suunnitteluun (Jos et tiedä ennestään mitään UML:stä, voit hypätä tämän kalvon yli.) Toisin kuin olio-ohjelmia suunniteltaessa, tietokantoja suunnitellessa UML-kaaviossa ei esitetä luokkien metodeita UML-kaaviossa merkitään luokan avainattribuutit UML-kaaviossa luokan sisälle ei merkitä niitä attribuutteja, joita vastaava tieto saadaan assosiaation avulla luokan sisälle merkittyjen attribuuttien arvojen tulee olla atomisia assosiaation valitsevuus (multiplisiteetti) on pakko merkitä näkyviin, jos se ei ole 1..1 assosiaatioita kuvaavien viivojen päihin ei usein merkitä nuolia. CS-A1150 Tietokannat 5.3.2019 4 / 35

Luokka UML-kaavion luokka (class) vastaa suunnilleen olio-ohjelmointikielen luokkaa ilman luokassa määriteltyjä metodeita. Attribuutit kuvaavat luokan olioiden ominaisuuksia. CS-A1150 Tietokannat 5.3.2019 5 / 35

Esimerkki luokasta Luokka Product kuvaa verkkokaupan tuotteita. Product number prodname description price Jokaista verkkokaupassa tarjolla olevaa tuotetta vastaa yksi Product-olio. Luokan olion attribuutit on listattu luokan nimen alla. Attribuuttien arvojen tulee olla atomisia. Jokaisella Product-oliolla on omat arvot attribuuteille number, prodname, description ja price. Tietokantoja mallintaessa UML-kaaviossa ei lainkaan kuvata luokan olioille mahdollisia toimenpiteitä (metodeita). CS-A1150 Tietokannat 5.3.2019 6 / 35

Assosiaatiot Assosiaatiot (associations) yhdistävät kahta luokkaa. Esimerkiksi luokkien Product ja Manufacturer välille voidaan määritellä assosiaatio Made-by. Jos valmistaja m on valmistanut tuotteen p, Product-luokan olio p liittyy Manufacturer-luokan olioon m assosiaatiolla Made-by. Assosiaation nimi kirjoitetaan yleensä sitä kuvaavan viivan alapuolelle. Product number prodname description price Manufacturer ID 0..* 0..1 name Made-by phone Assosiaation valitsevuus (multiplisiteetti) merkitään assosiaatiota kuvavan viivan ylä- tai alapuolelle viivan päähän (tarkemmin seuraavalla kalvolla). CS-A1150 Tietokannat 5.3.2019 7 / 35

Assosiaation valitsevuus Assosiaatiota kuvaavan viivan ylä- tai alapuolelle viivan päähän merkitään, kuinka monta yhden luokan oliota voi liittyä yhteen toisen luokan olioon assosiaation kautta. Product number prodname description price Manufacturer ID 0..* 0..1 name Made-by phone Esimerkissä yhteen Product-olioon voi liittyä 0 tai 1 Manufacturer-oliota. Yhteen Manufacturer-olioon voi liittyä mielivaltainen määrä Product-olioita. Huomaa, kumpaan päähän merkinnät tulevat! CS-A1150 Tietokannat 5.3.2019 8 / 35

Assosiaation valitsevuus, merkinnät tarkemmin Luokkien A ja B välistä assosiaatiota kuvaavan viivan ylä- tai alapuolella luokan B puoleisessa päässä oleva merkintä m..n tarkoittaa, että jokaiseen A-luokan olioon liittyy vähintään m ja enintään n kappaletta B-luokan olioita. Esimerkkejä: 0..1 korkeintaan 1, mutta ei välttämättä yhtään 0..5 korkeintaan 5, mutta ei välttämättä yhtään 1..2 vähintään 1, korkeintaan 2 1..1 tämälleen 1 (voidaan merkitä myös 1) 1..* vähintään 1, muuten mielivaltainen määrä 0..* mielivaltainen määrä (voidaan esittää myös pelkällä *:llä). Jos merkintä puuttuu, se on tietokantojen mallinnuksessa sama kuin 1..1. CS-A1150 Tietokannat 5.3.2019 9 / 35

Assosiaation valitsevuus, termejä Monesta moneen-assosiaatio (many-many): yhteen ensimmäisen luokan olioon voi liittyä mielivaltainen määrä toisen luokan olioita ja yhteen toisen luokan olioon voi liittyä mielivaltainen määrä ensimmäisen luokan olioita assosiaation kautta. Monesta yhteen-assosiaatio (many-one): yhteen ensimmäisen luokan olioon voi liittyä korkeintaan yksi toisen luokan olio. Monesta täsmälleen yhteen-assosiaatio (many-exactly one): yhteen ensimmäisen luokan olioon liittyy täsmälleen yksi toisen luokan olio. CS-A1150 Tietokannat 5.3.2019 10 / 35

Välitehtävä 1 Mikä seuraavista välitteistä pätee alla olevaan UML-kaavioon, jossa kuvataan opettajia ja kursseja? Course Teacher code name credits 0..1 Teaches ssno * name position semester department a Yksi opettaja voi opettaa mielivaltaista määrää kursseja, ja yhdellä kurssilla voi olla mielivaltainen määrä opettajia. b Yksi opettaja voi opettaa korkeintaan yhtä kurssia, mutta yhdellä kurssilla voi olla mielivaltainen määrä opettajia. c Yksi opettaja voi opettaa mielivaltaista määrää kursseja, mutta yhdellä kurssilla voi olla korkeintaan yksi opettaja. d Yksi opettaja voi opettaa korkeintaan yhtä kurssia, ja yhdellä kurssilla voi olla korkeintaan yksi opettaja. CS-A1150 Tietokannat 5.3.2019 11 / 35

Vastaus välitehtävään Kaaviossa assosiaation luokan Teacher puoleisessa päässä on tähti. Tämä tarkoittaa sitä, että yhteen Course-olioon voi liittyä mielivaltainen määrä Teacher-olioita. Toisin sanoen yhdellä kurssilla voi olla mielivaltainen määrä opettajia. Assosiaation luokan Course puoleisessa päässä on merkintä 0..1. Näin olleen yhteen Teacher-olioon voi liittyä 0 tai 1 Course-oliota. Yhdellä opettajalla voi siis olla korkeintaan yksi kurssi. Vaihtoehto b on siis oikein. CS-A1150 Tietokannat 5.3.2019 12 / 35

Assosiaation valitsevuus, lisää termejä Jos assosiaatio on monesta yhteen kumppankin suuntaan, on se yhdestä yhteen -assosiaatio. Esimerkki: yrityksessä jokaisellla osastolla on korkeintaan yksi johtaja ja kukin työntekijä voi johtaa korkeintaan yhtä osastoa. Department Empolyee departmentid PK name location 0..1 Manages 0..1 ID PK first_name last_name born address position Yhdestä yhteen -assosiaatio on monesta yhteen -assosiaation erikoistapaus. CS-A1150 Tietokannat 5.3.2019 13 / 35

Avaimet Olio-ohjelmia suunnitellessa avaimia ei tarvita, koska olio-ohjelmissa ajatellaan jokaisella oliolla olevan yksilöllinen identiteetti. Tietokannoissa avaimet ovat kuitenkin olennaisia, jotta tietokannan taulun eri rivit (relaation monikot) voitaisiin yksilöidä. Siksi tietokantoja suunnitellessa avainattribuutit merkitään UML-kaavioon. Luokan E avain on attribuutti tai attribuuttijoukko siten, että millään kahdella E:n oliolla ei ole samaa avainattribuutin arvoa tai avainattribuuttijoukon arvoyhdistelmää. Avainattribuutti merkitään merkinnällä PK. Avainattribuuttien valintaan voi olla useita eri vaihtoehtoja, mutta vain yksi niistä merkitään avaimeksi. Jos saman luokan useampi attribuutti on merkitty PK-merkinnällä, muodostaa tämä attribuuttijoukko yhdessä avaimen. CS-A1150 Tietokannat 5.3.2019 14 / 35

Esimerkki avainattribuuttien merkitsemisestä Product number PK prodname description price Manufacturer ID PK * 0..1 name Made-by phone Tuote tunnistetaan sen tuotenumeron (attribuutti number) ja valmistaja sen tunnuksen (attribuutti ID) perusteella. CS-A1150 Tietokannat 5.3.2019 15 / 35

Toinen esimerkki avaimista Oppikirjan esimerkissä luokan Movie avaimina toimivat elokuvan nimi ja vuosiluku yhdessä. (Ajatuksena on, että mikään elokuvastudio ei julkaise samana vuonna samannimistä elokuvaa kuin jollain kilpailevalla studiolla on. Sen sijaan elokuvasta voidaan myöhempänä vuonna tehdä uusi versio samalla nimellä, esim. Tuntematon sotilas.) Movie title PK year PK length genre CS-A1150 Tietokannat 5.3.2019 16 / 35

Esimerkkikaavio Verkkokauppaesimerkkiin on lisätty yksilöjoukot Orders ja Customers sekä assosiaatiot Ordered-by ja Belongs-to. Malli sallii tietokantaan lisättävän tuotteita, joiden valmistajan tietoja ei ole tietokannassa. Sen sijaan tietokantaan ei voi lisätä tilauksia, joilla ei ole asiakasta. Manufacturer 0..1 ID PK name phone Made-by Product Order Customer * number PK prodname * orderno PK * deliver * custno PK 1..1 name Belongs-to Ordered-by description price status born bonus address email CS-A1150 Tietokannat 5.3.2019 17 / 35

Itseassosiaatio Ongelma: Miten kuvataan UML-kaaviossa assosiaatioita, joissa sama luokka esiintyy kahteen kertaan? Esimerkki: määritellään, että joku työntekijä on toisen työntekijän lähiesimies. Empolyee ID PK first_name last_name born address position 0..1 0..20 Immediate superior Subordinate Assosiaatioon kirjoitetaan molemmat roolit. Assosiaation valitsevuus kirjoitetaan oikean roolin päähän (tässä työntekijällä voi olla korkeintaan yksi lähiesimies ja 0 20 alaista). CS-A1150 Tietokannat 5.3.2019 18 / 35

Assosiaatioluokka Halutaan, että verkkokauppaesimerkissä asiakas voi lisätä yhteen tilaukseen monta kappaletta samaa tuotetta. Mihin tieto kappalemäärästä pitäisi liittää? Tehdään assosiaatioon Belongs-to asssosiaatioluokka (association class), jonka attribuutiksi lisätään tieto lukumäärästä. Product number PK prodname description price * Belongs-to * Order orderno PK deliver status count Countinfo Assosiaatioluokalla ei ole koskaan avainattribuutteja. CS-A1150 Tietokannat 5.3.2019 19 / 35

Verkkokauppaesimerkki assosiaatioluokan kanssa Manufacturer 0..1 ID PK name phone Made-by Product number PK prodname description price Order Customer * * Belongs-to orderno PK * deliver * custno PK 1..1 name Ordered-by status born bonus address email count Countinfo CS-A1150 Tietokannat 5.3.2019 20 / 35

Perintä ja aliluokat Joillakin luokan olioilla on ominaisuuksia, joita ei ole kaikilla luokan olioilla. Näitä olioita varten voidaan määritellä aliluokka (subclass). Aliluokan olioilla on kaikki sen yliluokan (superclass) atttribuutit ja assosiaatiot sekä lisäksi aliluokan omat attribuutit ja assosiaatiot Suhteeseen aliluokasta yliluokkaan merkitään pieni kolmio (kärki yläluokkaan päin). Product number PK prodname description price artist length CD CS-A1150 Tietokannat 5.3.2019 21 / 35

Aliluokat UML-kaaviossa, esimerkki Esimerkissä luokalle Product on määritelty aliluokkia erilaisia myytäviä tuotteita varten, tässä CD, Book ja Computer. Product number PK prodname description price artist length CD author pages Book Computer ram speed harddisk Aliluokilla voi olla omia assosiaatioita, joita ei ole yliluokalla tai muilla perintähierarkian luokilla. Esim. luokalla CD voisi olla assosiaatio luokkaan Track, joka kuvaa yhtä levyllä olevaa kappaletta. CS-A1150 Tietokannat 5.3.2019 22 / 35

Kun attribuutit eivät riitä avaimeksi Oletetaan, että verkkokaupan tuotteesta voi olla erilaisia versioita, esimerkiksi samaa vaatemallia erivärisenä ja -kokoisena. Määritellään luokka Version kuvaamaan tuotteen eri versioita. Luokan attribuutteina on version väri ja koko. Ne eivät kuitenkaan kelpaa edes yhdessä yksilöimään Version-oliota, siis avaimeksi. Ratkaisu: muodostetaan Version-luokan avain käyttämällä sekä Version-luokan omia attribuutteja että Product-luokan avainattribuuttia number. Version-luokkaan merkitään tällöin vain sen omat attribuutit. CS-A1150 Tietokannat 5.3.2019 23 / 35

Kun attribuutit eivät riitä avaimeksi, esimerkki size PK Version PK * 1..1 Product number PK color PK prodname description price CS-A1150 Tietokannat 5.3.2019 24 / 35

Aggregaatio Aggregaation (aggregation) avulla kerrotaan, että jonkin luokan olio koostuu toisen luokan olioista, esimerkiksi verkkokaupassa on tuoteryhmiä, jotka koostuvat tuotteista. Aggregaatiota merkitään avoimella vinoneliöllä sen luokan päässä, jonka olio koostuu toisen luokan olioista. Product number PK prodname description price * 0..1 ProductGroup groupid PK groupname CS-A1150 Tietokannat 5.3.2019 25 / 35

Kompositio Kompostio (composition) on kuin aggregaatio, mutta tiukempi vaatimus. Siinä vaaditaan, että luokan olion on pakko kuulua johonkin mustalla vinoneliöllä merkityn luokan olioon. Product number PK * 1 ProductGroup groupid PK prodname groupname description price CS-A1150 Tietokannat 5.3.2019 26 / 35

UML-kaavion laatiminen Miten voi lähteä laatimaan UML-kaaviota? Yksinkertainen, mutta usein toimiva menetelmä: 1. Kirjoita kuvaus mallinnettavasta tietokannasta. 2. Alleviivaa kuvauksesta kaikki substantiivit. 3. Etsi ehdokkaita luokiksi ja attribuuteiksi substantiivien joukosta. 4. Kaikista substantiiveista ei tule kumpaakaan. 5. Kun luokat ja attribuutit ovat valmiina, mieti, millaisia suhteita luokkien olioiden välillä on. Tee niistä assosiaatioita. CS-A1150 Tietokannat 5.3.2019 27 / 35

Esimerkki: verkkokauppa Suunnittele tietokanta verkkokaupalle, jossa on tuotteita ja asiakkaita. Asiakkaat tekevät tilauksia, joihin voi kuulua useita tuotteita. Tuotteista tiedetään tuotenumero, nimi, kuvaus, hinta ja valmistaja. Valmistajasta tallennetaan tunnus, nimi ja puhelinnumero. Asiakkaasta tiedetään asiakasnumero, nimi, syntymävuosi, bonuspisteet, osoite ja sähköpostiosoite. Jokaisella tilauksella on yksikäsitteinen tilausnumero. Tilauksesta tiedetään sen toimitustapa, tila, mitä tuotteita siihen kuuluu ja tilauksen tehnyt asiakas. CS-A1150 Tietokannat 5.3.2019 28 / 35

Esimerkki jatkuu: alleviivaa attribuutit Suunnittele tietokanta verkkokaupalle, jossa on tuotteita ja asiakkaita. Asiakkaat tekevät tilauksia, joihin voi kuulua useita tuotteita. Tuotteista tiedetään tuotenumero, nimi, kuvaus, hinta ja valmistaja. Valmistajasta tallennetaan tunnus, nimi ja puhelinnumero. Asiakkaasta tiedetään asiakasnumero, nimi, syntymävuosi, bonuspisteet, osoite ja sähköpostiosoite. Jokaisella tilauksella on yksikäsitteinen tilausnumero. Tilauksesta tiedetään sen toimitustapa, tila, mitä tuotteita siihen kuuluu ja tilauksen tehnyt asiakas. Yllä "tietokanta"on yleinen termi, joka ei suoraan liity mallinnettavaan kohteeseen. Siitä ei siis tehdä luokkaa tai attribuuttia. "Verkkokauppa"taas kuvaa sitä kokonaisuutta, jota ollaan mallintamassa (koko UML-kaavio), joten siitäkään ei tehdä luokkaa tai attribuuttia. CS-A1150 Tietokannat 5.3.2019 29 / 35

Suunnitteluperiaatteita Mitä pitäisi ottaa huomioon, kun lähdetään laatimaan UML-mallia jostain tosielämän asiakokonaisuudesta? Seuraavilla kalvoilla käydään läpi joitakin keskeisiä suunnitteluperiaatteita. CS-A1150 Tietokannat 5.3.2019 30 / 35

Tarkkuus Luokkien ja niiden attribuuttien tulee vastata kuvattavaa reaalimaailmaa. Esimerkiksi assosiaation valitsevuus pitää valita sen mukaan, voiko samaan olioon liittyä todellisuudessa yksi vai useampi toisen luokan olio. Verkkokaupassa samaan tilaukseen voi kuulua useita tuotteita, mutta tilauksella voi olla täsmälleen yksi asiakas. Tämä näkyy UML-kaaviossa. CS-A1150 Tietokannat 5.3.2019 31 / 35

Ylimäärän (redundancy) välttäminen Kukin asia pitäisi sanoa vain yhteen kertaan. Esimerkiksi luokalle Product ei kannata laittaa attribuuksi valmistajan tunnusta, koska assosiaatio Made-by jo ilmaisee tuotteen valmistajan. Miksi ylimäärä on haitallista? Saman tiedon toistaminen vie turhaa tilaa. Tiedon toistaminen aiheuttaa ongelmia päivitysten yhteydessä. Olio-ohjelmia suunnitellessa toimitaan toisella tavalla, koska UML-kaavioon halutaan saada suoraan näkyviin, mitä attribuutteja olio-ohjelman luokilla on. Tietokantoja suunnitellessa tilanne on eri, koska luokat eivät edusta suoraan tietokantaan tulevia relaatioita. CS-A1150 Tietokannat 5.3.2019 32 / 35

Yksikertaisuuteen pyrkiminen Malliin ei kannata ottaa mukaan ylimääräisiä elementtejä. Esimerkiksi luokkaa ei kannata jakaa kahdeksi luokaksi ja niiden väliseksi assosiaatioksi ilman hyvää syytä. CS-A1150 Tietokannat 5.3.2019 33 / 35

Oikeiden elementtien käyttö Koska jonkin asian kuvaamiseen on syytä käyttää mallissa luokkaa, koska attribuutteja? Tarkastellaan alla olevaa mallia. Voisiko luokan Manufacturers ja assosiaation Made-by korvata lisäämällä luokkaan Products sopivat attribuutit? Product number PK prodname description price Manufacturer ID PK * 0..1 name Made-by phone CS-A1150 Tietokannat 5.3.2019 34 / 35

Oikeiden elementtien käyttö, jatkoa Luokalle Products voisi periaatteessa määritellä attribuutit manufacturerid, manufacturername ja phone, jotka korvaisivat luokan Manufacturers ja assosiaation Made-by. Mutta silloin saman valmistajan nimi ja puhelinnumero toistuisivat useassa eri tuotteessa. Yleisperiaate: jos jostain reaalimaailman käsitteestä mallinnetaan muutakin kuin pelkkä nimi tai lukuarvo, tulisi se mallintaa luokkana eikä attribuuttina. CS-A1150 Tietokannat 5.3.2019 35 / 35