ER mudeli loomise läbimäng
Andmebaasi vajadus
Tuletame meelde, et andmebaasi loomine algab ideest. Oletame, et meil on tulnud idee luua uus andmebaas Eurovisiooni lauluvõistluste jaoks. Andmebaasi hakkavad inimesed kasutama mitmesugustel põhjustel. Näiteks on kasutajad, kes tahavad lihtsalt uudishimust vaadelda Eurovisiooni tulemusi ja osalenud riike, laule jne. Teisalt on ka kasutajaid, kes sooviksid andmebaasist saada olulist infot, et ennustada ette järgmiste võistluste tulemusi.
Kasutajate soovid
Eeldame, et on läbi viidud vestlus eelmainitud kasutaja gruppide esindajatega ja kogutud kokku kõik küsimused, millele nad sooviks vastust leida Eurovisiooni kohta:
- Mis riikides, mis linnades (kas pealinnas) ja millal on lauluvõistlusi peetud?
- Mis riigid on osalenud Eurovisioonil ja saanud ka finaali?
- Millise koha on mis aastal mingi riigi laul saanud ja palju on antud punkte finaalis?
- Kuidas on laulu kohal seos riigi suuruse ja majandusega (SPKga)?
- Mis keeles laule on esitatud eri riikide poolt?
- Kes on esitanud laule, mis riiki esindades (kas sünniriiki) ja kes on käinud korduvalt Eurovisioonil solistina?
- Kui pikad on olnud laulud?
- Millise järjekorranumbri all on esitatud võidu toonud laulud või millised jäänud viimaseks?
- Kuidas on seotud laulu saavutatud koht esitaja soo ja vanusega?
- Millised on sellise andmebaasi nõuded?
Taust
- Peetakse aastast 1956.
- Eurovisioon toimub kord aastas.
- Iga riik esitab ühe laulu.
- Alates 1999 pole keelenõuet. On esitatud laulu ka väljamõeldud keeles (näiteks Belgia 2003. aasta laul "Sanomi"), 2016 Ukraina laul on inglise ja tatari keeles.
- Võitjaks üks riik (v.a. 1969, mil viigi korral kuulutati neli riiki võitjateks). Alates 2003. aastast täpsed reeglid viigi korral toimimiseks.
- Esitaja solist, duett, trio või ansambel. Esitajad ei pea olema samast riigist.
Eurovisiooni kohta saab lugeda veel siit.
Millised olemitüübid leiduvad?
Kui eelnevalt on läbi viidud intervjuud tulevaste kasutajatega ja nende soovid on hästi kaardistatud, siis on olemite tuvastamine võrdlemisi lihtne. Tuleks vaadelda neid samu soove ja märkida ära seal potentsiaalsed olemitüübid. Olemitüüpe tuvastades tuleks mõelda ka sellele, kas tegu on ikka olemitüübi või hoopiski selle atribuudi ehk tunnusega. See ei ole aga alati väga lihtne ning on tavaline, et erinevad inimesed leiavad erinevad olemitüüpe.
Märgime ära tulevaste kasutajate soovides olemitüübid:
- Mis riikides, mis linnades (kas pealinnas) ja millal on lauluvõistlusi peetud?
- Mis riigid on osalenud Eurovisioonil ja saanud ka finaali?
- Millise koha on mis aastal mingi riigi laul saanud ja palju on antud punkte finaalis?
- Kuidas on laulu kohal seos riigi suuruse ja majandusega (SPKga)?
- Mis keeles laule on esitatud eri riikide poolt?
- Kes on esitanud laule, mis riiki esindades (kas sünniriiki) ja kes on käinud korduvalt Eurovisioonil solistina?
- Kui pikad on olnud laulud?
- Millise järjekorra numbri all on esitatud võidu toonud laulud või millised jäänud viimaseks?
- Kuidas on seotud laulu saavutatud koht esitaja soo ja vanusega?
Seega tuvastatud olemitüübid on järgmised:
- Laulud
- Lauljad
- Võistlused
- Riigid
Tihti võib hiljem ilmneda, et mõnda olemitüüpi ei suudetud tuvastada, aga kuni andmebaas pole reaalselt veel valmis tehtud, siis on lihtne tagasi tulla ja see lisada.
Mis oleks nende olemitüüpide atribuudid?
Atribuute kirja pannes tuleks mõelda sellele, et mida on vaja kasutajale näidata iga olemitüübi kohta ja mis andmeid selleks vaja on, et seda infot saaks kuvada. Seega jällegi tulevad kasuks kasutajatelt kokku kogutud soovid.
Riigid
Kui uurida eelnevalt välja toodud küsimusi, millele kasutajad sooviksid vastuseid leida, siis on näha, et olem "Riigid" esineb neis lausetes kuues kohas. Neid kohti tuleks nüüd vaadata sellise pilguga, et mida peaks teadma nende riikide kohta. Näiteks vaatleme järgnevat küsimust:
Mis riikides, mis linnades (kas pealinnas) ja millal on lauluvõistlusi peetud?
Sellest kasutaja soovist saab teada, et peab teadma riigi pealinna , sest vastasel korral ei oskaks öelda, kas võistlus toimus pealinnas või mitte. Ja loomulikult peaks teadma ka riigi enda nime. Seega kaks tunnust leitud! Vaatame edasi...
Kuidas on laulu kohal seos riigi suuruse ja majandusega (SPKga)?
Siit saab teada, et riikide kohta peaks teadma riigi suurust ja SKP-d. Tunnus "suurus" on aga mitmeti mõistetav termin. Kas on mõeldud pindala? Või hoopis rahvaarvu? Seda, mida täpsemalt mõeldud on, tuleks küsida kasutajatelt. Selle võimaluse puudumisel võib lisada ka mõlemad, nii pindala kui ka rahvaarvu. Valime hetkel selle viimase variandi ja lisame mõlemad.
Kui aga kasutajatelt sai siiski täpsustusi ja tuli välja, et mõeldud oli rahvaarvu, siis ei tohiks seda ikkagi lisada tunnusena "suurus", vaid tunnusena "rahvaarv". Nagu enne mainitud, siis tunnuse nimetused peaksid olema võimalikult täpsed. Selles osas võime ka mõelda, et lisame atribuudi SKP nimele SKP_mld näitamaks, et see on miljardites.
Leidub veel kohti, kus mainitakse riiki, näiteks "...mis aastal mingi riigi laul..." ja "Kes on esitanud laule, mis riiki esindades...", aga nendes kohtades ei kirjeldata riigi enda tunnuseid, vaid juba seoseid varasemalt leitud teiste olemitüüpidega ja neid eraldi atribuutidena olemitüüpi "Riigid" ei lisa. Seega rohkem tunnuseid ei esine ja sellega on riikide atribuutide tuvastamine lõppenud.
Võistlused
Võistluste atribuudid leiab kõik ühest lausest.
Mis riikides, mis linnades (kas pealinnas) ja millal on lauluvõistlusi peetud?
Siit saab teada, et võistluste kohta peab teadma riiki ja linna, kus võistlus toimub ning ka seda, et millal võistlus toimub. Kuna "riik" on meil juba eraldi olemitüübina, siis seda hetkel atribuudiks ei lisa. Selle, et kus riigis võistlus toimub saab teada, kui loob "riigi" ja "võistluse" vahel seose, sellest juttu allpool. Seega leidsime kaks tunnust: linn ja toimumisaeg.
Lauljad
Lauljaid mainiti kahes lauses:
- Kes on esitanud laule, mis riiki esindades (kas sünniriiki) ja kes on käinud korduvalt Eurovisioonil solistina?
- Kuidas on seotud laulu saavutatud koht esitaja soo ja vanusega?
On ilmne, et üheks tunnuseks on laulja nimi. Lauljad ei kasuta sageli ees- ja perenime, vaid lavanime. Seda paigutada neist ühe alla võib olla keeruline. Näiteks Maiken on küll eesnimi, aga kas Nublu panna ka siis eesnimeks? Kuigi kui sisestaksime inimesi (näiteks tudengite andmeid), peaksime eraldi sisestama ees- ja perenime, siis lauljate puhul kasutame ühte atribuuti lavanimi. Sellega saame ka ansamblid kirja panna. Peale selle peaks teadma, kas laulja on solistina esineja või mitte. Selle jaoks võiks võtta kasutusele tunnuse "ansambel", mille väärtusteks oleks siis hiljem BIT andmetüüp, ehk 0 või 1 (pole ansambel/on ansambel). Esimesest lausest tuleb välja ka veel "sünniriik", et teaks, kus on laulja sündinud. Seda hetkel aga tunnusena ära ei märgi, sest jällegi saab selle teada, kui loob olemitüübi "Lauljad" ja "Riigid" vahel seose. Kui teist lauset vaadelda, siis sealt leiab kaks tunnust, mida peaks laulja kohta teadma. Laulja soo võib jätta meelde tunnusena "sugu", aga vanust ei tohiks salvestada lihtsalt tunnusena "vanus". Vanuse asemel peaks lisama hoopiski tunnuse "sünniaeg". Seda sellepärast, et kui on teada, millal võistlused toimusid, siis saab selle kaudu alati arvutada, kui vana keegi oli, kui ta mingil võistlusel osales. Nii tehes ei pea iga võistluse juures salvestama mingit lauljat andmebaasi topelt lihtsalt sellepärast, et kui ta teist korda Eurovisioonil osales, oli ta juba vanem.
Oleme leidnud laulja kohta kokku nüüd neli atribuuti: lavanimi, sünniaeg, sugu ja ansambel.
Laulud
Laule mainitakse järgmistes lausetes:
- Millise koha on mis aastal mingi riigi laul saanud ja palju on antud punkte finaalis?
- Kuidas on laulu kohal seos riigi suuruse ja majandusega (SPKga)?
- Mis keeles laule on esitatud eri riikide poolt?
- Kui pikad on olnud laulud?
- Millise järjekorra numbri all on esitatud võidu toonud laulud või millised jäänud viimaseks?
- Kuidas on seotud laulu saavutatud koht esitaja soo ja vanusega?
Laulude puhul peab läbi vaatama rohkem lauseid. Kohe paistavad välja kolmandast ja neljandast lausest lihtsad tunnused nagu keel, kestus ja kindlasti ka laulu pealkiri.
Esimese lause põhjal peaks lisama tunnused nagu "koht", "punkte" ja "finaalis". "Finaalis" tunnus oleks BIT andmetüübiga tunnus, kus siis salvestatakse väärtust 0 ja 1 (esines finaalis/ei esinenud finaalis). Kui teab saavutatud punkte ja seda, kas esines finaalis, siis saab ka kasutaja antud küsimusele vastuse leida.
Kui vaadelda nüüd järgmist lauset, siis tahetakse teada, mis seos on riigi suurusel ja majandusel sellega, et mitmenda koha laul saavutab. Laulu koha jaoks on meil juba tunnus olemas ning riik on meil esindatud juba eraldi olemitüübina, ehk siit tunnuseid juurde ei tule.
Eelviimasest lausest saab teada, et on vaja ka tunnust "esinemis_jrk", et teada, mitmendana laul esines. Seda, kas laul võitis või jäi viimaseks, saab juba teada tunnuse "koht" kaudu. Esikoha väljaselgitamine on lihtne, aga kui tahame teada, kas laul jäi viimaseks, siis peab teadma osalenud laulude koguarvu. Andmebaasis on aga olemeid lihtne kokku loendada ja seega seda ei pea eraldi atribuudina kuskile lisama.
Eraldi selle atribuudi lisamine oleks ka äärmiselt ebaefektiivne, sest iga kord, kui võistlusele lisatakse laule juurde, siis peab käima ka uuendamas selle tunnuse väärtust.
Viimasest lausest ei selgu ühtegi uut tunnust ja seega oleme tuvastanud kokku 7 atribuuti: keel, kestus, pealkiri, koht, punkte, finaalis, esinemis_jrk.
Vahekokkuvõte
Oleme nüüd teinud juba suure töö ära ja tuvastanud olemitüübid ja nende atribuudid. Viimaseks on jäänud nende omavaheliste seoste loomine.
Millised olemitüüpide vahelised seosed meil on?
Olemitüüpide atribuutide tuvastamise käigus avastasime nii mõnegi "tunnuse", mida ei olnud mõtet tunnuseks lisada, sest selle jaoks oli meil juba eraldi olemitüüp. Selline olukord esines:
- Laulud-Võistlused
- Laulud-Riigid
- Laulud-Lauljad
- Võistlused-Riigid
- Riigid-Lauljad
Seega kokku on meil viis seost, aga oleks vaja veel kindlaks teha, mis tüüpi seostega tegu on. Seda saab lihtsalt teha, kui kirjutada seosed sõnadega lahti.
- Üks laul astub üles ühel võistlusel ja ühel võistlusel võib üles astuda mitu laulu. N:1 seos
- Üks laul esindab ühte riiki ja ühte riiki saab esindada (erinevatel aastatel) mitu laulu. N:1 seos
- Ühel laulul võib olla mitu lauljat ja üks laulja võib esitada (erinevatel aastatel) mitut laulu. N:M seos
- Üks võistlus toimub ühes riigis ja ühes riigis (erinevatel aastatel) võib toimuda mitu võistlust. N:1 seos
- Üks laulja on sündinud ühes riigis ja ühes riigis võib olla sündinud mitu lauljat. N:1 seos
Nüüd on lausete abil seosed ja seoste tüübid tuvastatud ning on jäänud üle veel ainult olemitüübid nende abil siduda. Seoste lisamisel saame tulemuseks sellise mudeli, ER mudeli:
<< Andmebaasi modelleerimine | Relatsiooniline mudel >> |