# Teema: Andmebaasi kavandamise sisulised küsimused ## Küsimus: Andmebaaside aine pöörab palju tähelepanu süsteemianalüüsile. Miks see on oluline? **Vastus:** Oma iseseisva töö projekti tegemise käigus tuleb Teil ennast panna süsteemianalüütiku rolli. Siin on 15.02.2017 Postimehes ilmunud artikkel analüüsi olulisusest süsteemide loomisel ning sellega seotud valikutest haridusmaastikul. Tööelus võite puutuda infosüsteemide arendamisega kokku tellijana. Hästi toimiva infosüsteemi loomine algab õige ülesandepüstituse koostamisest. Elu näitab, et "IT-probleemide püstitamine ja kirjeldamine viisil, mis tagaks efektiivse tööprotsessi ja tõhusad lahendused", ei tule sageli nii hästi välja kui võiks. Seega ei jookse mööda külge maha oskus ülesandepüstitust (nõudeid) kirja panna. Arendaja rollis on jällegi vajalik oskus kirjapandud nõuetest aru saada. Üheks suure infosüsteemi ebaõnnestunud arendamise näiteks on Ruumilise planeeringu infosüsteem (RPIS). See loodi detailplaneeringutete avaliku väljapaneku kättesaadavuse parandamiseks ning planeeringute kooskõlastamise kiiremaks, jälgitavamaks ja mugavamaks muutmiseks. Süsteemi arendatakse alates 2009. aastast, sellele on kulutatud peaaegu miljon eurot, kuid kasutajaid peaaegu ei ole. Kohalikud omavalitsused eelistavad teisi turul saadaolevaid süsteeme. Selle asemel, et hakata suure hooga nullist uut süsteemi tegema oleks tulnud kõigepealt aru saada, kas ning mida on vaja - võibolla oleks piisanud mõne turul oleva süsteemi kohandamisest. Sellistele küsimustele annab vastuse süsteemianalüüs. Võibolla oleks olnud ka abi tööprotsesside lihtsustamisest - sellega tegeleb ärianalüüs (business analysis), millega käesolev kursus ei tegele. Jaakkola et al. (2016) kohaselt kasvavad nõuete kogumise (analüüsi) faasis tehtud vigade parandamiseks kuluv pingutus iga järgmise süsteemiarenduse faasiga kolm korda. Disaini faasis on neid 3, realiseerimise faasis 9 ja testimise faasis 27 korda kulukam parandada kui nõuete kogumise faasis. Jaakkola, H., Henno, J., Welzer-Druzovec, T., Thalheim, B., Mäkelä, J., 2016. Why Information Systems Modelling Is Difficult. In SQAMIA. pp. 29– 39. Võibolla olete kuulnud sotsiaalkaitse infosüsteemi uue versiooni (SKAIS2) arendamise saagast. Praeguseks on kulud kasvanud kaugelt üle algselt planeeritu ja projekti lõppu ei paista. 2019. aasta jaanuaris kuulutati välja järjekordne riigihange süsteemi uute osade tegemiseks ning olemasolevate parandamiseks. Hanke dokumendid on avalikkusele kättesaadavad riigihangete registris ja neid tasub huvi korral sirvida selle pilguga, et: kui mahukas on keerulise infosüsteemi kirjeldus, milliseid dokumente peavad pakkumise koostajad, sh majandusinimesed oskama kirjutada, milliseid dokumente peavad pakkumisele reageerijad ja ka hiljem analüütikud ning arendajad oskama lugeda. Huvi korral vaadake näiteks "Lisa 3. Nõuded infosüsteemi dokumentatsioonile", "Lisa 2. Mittefunktsionaalsed nõuded", "Lisa 1. Arhitektuuri ülevaade". Mitmed soovitud dokumentidest (sh mittefunktsionaalsed nõuded, kuid mitte arhitektuuri kirjeldus) on ka iseseisva töö projektis. "Lisa 5. Tehniline kirjeldus" esitatud tekstilise jutu süsteemilt oodatavatest funktsionaalsustest peab süsteemianalüütik oskama tõlkida täpsemate mudelite keelde (kasutusjuhtude mudelid, protsessimudelid, seisundidiagrammid, andmemudel jne). "Lisa 11.1. Ärianalüüs" dokumendis on väljatoodud põhimõisted ja nende definitsioonid. Selleks, et midagi koos arendada on oluline, et kõik arendusest huvitatud osapooled mõistetest võimalikult täpselt ja ühtemoodi aru saavad. Teie projektis on selliseks mõistete kataloogiks kontseptuaalse andmemudeli osaks olev olemitüüpide ja atribuutide definitsioon. Õppekavades, kus on "Andmebaasid I", on see praktiliselt ainus aine, mis puudutab süsteemianalüüsi. Seega kus siis veel kui mitte siin. Lõpetuseks veel üks pildirida, mis illustreerib seda, mis võib süsteemi arendamise, sh analüüsi käigus valesti minna. **Märksõnad:** süsteemianalüüs, analüütik, detailanalüüs, strateegiline analüüs ## Küsimus: "Andmebaasid I" õppeaines kasutame infosüsteemi ja selle osaks oleva andmebaasi kirjeldamiseks UML modelleerimiskeelt. Milliseid allikaid soovitate UMLiga tutvumiseks või selle kohta teadmiste värskendamiseks lugeda? **Vastus:** UML keelega tutvumiseks soovitan esimesena raamatut: Fowler, M., 2007. UMLi kontsentraat. 3. redaktsioon. Objektmodelleerimise standardkeele UML2.0 lühijuhend. Cybernetica AS. [WWW] https://www.ester.ee/record=b2282809~S1*est Kaanepilt: https://www.apollo.ee/umli-kontsentraat.html UMList õigesti rääkimiseks vaadake palun eesti inglise-eesti standardipõhist tarkvaratehnika sõnastikku STATS, mis sisaldab ka UML terminoloogiat: https://stats.cyber.ee/ Järgnevatest allikatest leiate ingliskeelse ülevaate UML 2.X erinevatest diagrammitüüpidest: Larman, C., 2013. Applying UML and patterns : an introduction to object-oriented analysis and design and iterative development, Prentice Hall. 703 p. [WWW] https://www.ester.ee/record=b2048056*est Raamatut saab lugeda O'Reilly digitaalselt platvormilt SIIN Kuidas kasutada O'Reilly digitaalset platvormi? http://www.agilemodeling.com/essays/umlDiagrams.htm https://www.uml-diagrams.org/ Ma olen ka koostanud ühe eestikeelse konspekti, mida huvilised saavad lugeda lisamaterjalide lehelt (kasutajanimi: SIS2 ja parool: SIS2) SELLEST MATERJALIST. **Märksõnad:** tegevusdiagramm, kasutusjuhtude diagramm, seisundidiagramm, klassidiagramm, olemi-suhte diagramm, andmebaasi diagramm, olekumasin, olekumasina skeem ## Küsimus: Kas kuskil on nähtav andmebaaside tehnoloogiate suur pilt? **Vastus:** Suur pilt (1. juuni 2015 seisuga) erinevatest andmebaasitehnoloogiatest ning neid realiseerivatest tarkvarasüsteemidest. Veel värskema versiooni saab küsida siit. Siin aga on iga kuu uuendatav andmebaasisüsteemide populaarsuse indeks. ## Küsimus: Kas leidub kergesti kättesaadavat eestikeelset kirjandust SQL-andmebaaside kavandamisel ettetulevatest probleemidest ja nende lahendustest? **Vastus:** Tallinna Tehnikaülikooli üliõpilased on lõputöödena koostanud mustrite katalooge. Need lõputööd on kättesaadavad Tallinna Tehnikaülikooli digikogust. Muster on nimega kirjeldus, milles on esitatud probleem ja lahendus sellele probleemile. Samuti on kirjeldatud, millal seda lahendust rakendada ja kuidas rakendada lahendust uues kontekstis. Antimustrid, vastupidiselt, kirjeldavad probleemide halbu lahendusi, koos soovitustega, kuidas probleemi paremini lahendada. Analüüsi mudelite antimustrid. Disainimustrid klassifikaatorite esitamiseks SQL-andmebaasides. Mitmekeelsete SQL-andmebaaside disainimustrid. Disainimustrid isikunimede hoidmiseks SQL‑andmebaasides. Hierarhiliste andmete esitamine SQL-andmebaasides. Graafide esitamine SQL-andmebaasides. Infosüsteemi põhiolemite seisundite esitamine SQL-andmebaasides. Mustrite teemaga seostub ka: Andmebaasi loogilise ja füüsilise disaini antimustrite esinemine mõnedes vaba tarkvara poolt kasutatavates SQL-andmebaasides. Lisaks sellele on tehtud lõputöid, kus mustreid pole kirja pandud, kuid kus on uuritud andmebaaside disaine ja tehtud nendega eksperimente. Mitme väite ühe andmeväärtusena esitamise eelised ja puudused SQL-andmebaasides. (mõned uuritavad disainid kasutavad JSON, JSONB või massiivitüüpi veergu). Lisan, et peale selle lõputöö kirjutamist on lisandunud PostgreSQLi arsenali jsonb_set funktsioon, mis muudab andmete muutmise lihtsamaks, st ei ole enam vaja tervet hierarhia väärtust uuesti andmebaasi kirjutada. Denormaliseerimise praktika uurimine ühe SQL-andmebaasi näitel. SQL-andmebaasides olevate andmebaasiobjektide nimetamine. Töös keskendutakse kitsendustele, kuid tehakse ka üdisemaid tähelepanekuid nimede andmise kohta. Andmebaasi optimeerimine ning selles toimuvate operatsioonide jõudluse analüüs ühe Oracle andmebaasi näitel. Päringu filtri predikaadi automaatne lihtsustamine kahe SQL-andmebaasisüsteemi näitel. Reapõhise ja veerupõhise andmete salvestamise võrdlus kahe SQL-andmebaasisüsteemi näitel. Vaadete mõju päringute täitmisplaanide koostamisele kahe andmebaasisüsteemi näitel. Isikute nime alusel otsimise erinevad võimalused PostgreSQLis. ## Küsimus: Kas puhta koodi põhimõtted on olulised ka andmebaaside korral? **Vastus:** Jah on! O'Reilly digitaalse platvormi vahendusel pääsete Te ligi Robert C. Martini raamatule Clean Code (Kuidas kasutada O'Reilly digitaalset platvormi?). Selle raamatu ideed kehtivad ning on olulised ka andmebaaside ja infosüsteemide ainete jaoks. See raamat jagab juhiseid vastutustundlikule arendajale. Täpselt nii nagu vastutustundlik arendaja loob ainult puhast rakenduse koodi, loob ta ka ainult puhast andmebaasikeele koodi ja puhtaid mudeleid. Üldine idee on täpselt sama! Suure tõenäosusega hakkate neid ise tulevikus lugema. Või kui ei hakka ise, siis hakkab keegi teine. Puhast artefakti (tehist) on hea ja meeldiv lugeda, sellest saab kergesti aru ning kokkuvõttes on tehist tänu sellele lihtsam edasi arendada. Samal ajal "räpane" tehis võib küll oma hetke eesmärki täita (hetkel see "töötab" nagu vaja), aga halva arusaadavuse ning loetavuse tõttu on seda raske parandada ja edasi arendada. Sellised tehised vajavad refaktoreerimist. Refaktoreerimist vajavad kohad leiab üles halva lõhna järgi. Täpselt nagu on olemas halvasti lõhnav lähtekood, leidub ka: halvasti lõhnavaid arhitektuure, halvasti lõhnavaid disaine, halvasti lõhnavaid andmebaasi disaine (Sama raamat elektrooniliselt) ja halvasti lõhnavaid mudeleid. Mudelite halbadest lõhnadest annab ülevaate ka see bakalaureusetöö ja selle töö edasiarendusena loodud kataloog. Kui Te ei taga enda loodavate tehiste puhtust, siis te kogute tehnilist võlga. Tehniline võlg tähendab, et tehise muutmiseks on vaja liigselt pingutada. Nagu me kõik inimeste elust teame, siis võlg võib kiiresti kasvada ja kontrolli alt väljuda. Laenu võtta (võlgu jääda), võib teadlikult - lootuses, et see tasub ennast ära, aga see on risk. Samamoodi, kui näiteks inimene kodu ei korista ja selle käest ära laseb, siis kui ükskord keegi külla tuleb või on vaja see maha müüa, siis kulub selle uuesti üleslöömiseks väga palju aega ja vaeva. Halvasti lõhnava mudeli illustratsiooniks on teatele lisatud ekraanipilt Enterprise Architect abil loodud modelleerimise projektist. Mudeli elemendid on seal süsteemitult segamini nagu puder ja kapsad ning mida suuremaks see projekt kasvab seda raskem oleks sealt vajalikku üles leida. ## Küsimus: Kas saaksite tuua mõne näite valesti valitud väljapikkustest ja selle põhjustatud probleemidest? **Vastus:** Valed valikud võivad põhjustada kannatusi, segadust, lisatööd ja mainekadu (süsteemi omanikule): https://reisile.postimees.ee/4484884/reisija-pidi-lisatasu-maksma-sest-tema-nimi-ei-mahtunud-lennupiletile. Antud näite korral oli isikunimede registreerimiseks mõeldud tekstiväljades lubatud maksimaalne märkide arv liiga väike. MS Accessis võiks veergude eesnimi ja perenimi väljapikkus olla 255 märki (maksimaalne võimalik suurus MS Accessis VARCHAR tüübi korral). Süsteemides, kus on lubatud suurem maksimaalne märkide arv (nt PostgreSQL ja Oracle), võiks see olla kuni 1000, sest mõned isikunimed on väga pikad. Samas oleks vale kasutada kõikide tekstitüüpi veergude puhul järjekindlalt maksimaalset võimalikkus väljapikkust või suurimat väärtust võimaldavat andmetüüpi ilma täiendavate kitsendusteta. Kui näiteks veerg perenimi on MS Accessis tüüpi Memo ilma kitsenduseta, et maksimaalne väärtus selles veerus võib olla kuni 1000 märki, siis see jätab skeemi lugejale (programmid, inimesed) vale mulje sellesse veergu oodatavatest andmetest. Rusikareegel: valige iga veeru jaoks selline andmetüüp + täiendavate kitsenduste komplekt, et kõik vajalikud väärtused saaksid sellesse veergu salvestatud, kuid suurim võimalik väärtus oleks võimalikult väike. ## Küsimus: Kas saaksite tuua näite mõnest andmebaasis puuduvast kitsendusest, mis on tekitanud probleeme? **Vastus:** Hea näite kahe silma vahele jäänud kitsendusest toob Amazoni asutaja ja boss Jeff Bezos. Amazoni algusaastatel avastas ta sellest vea, mis lasi kliendil tellida negatiivse arvu raamatuid, mille järel kanti raha kliendi krediitkaardile. Hr Bezos viskas ühel videol nalja, et ilmselt tuli siis jääda ootama, kuni klient neile raamatud saadab. ## Küsimus: Kas välisteks tegutsejateks võivad olla teised infosüsteemid? **Vastus:** Süsteemi välisteks tegutsejateks võivad olla teised infosüsteemid. Selle näiteks majutusasutuste valdkonnas on siseministri poolt 2017. aasta veebruaris esitatud plaan luua majutusasutuste külastajate register. Sellesse registrisse jõuaks automaatselt info kõigi Eesti majutusasutuste külastajate kohta. Registris toimuksid automaatsed päringud, mis otsivad riigile huvipakkuvaid isikuid (nt tagaotsitavaid). Kui vasteid ei saada, kustutakse inimese info omakorda ööpäeva jooksul. Plaani elluviimisega jätkati 2019. aasta sügisel, kui esitati turismiseaduse muutmise eelnõu, mis sellist registreerimist ette näeb. Eelnõu seletuskiri ütleb, et "Eelnõuga ei laiendata registreerimisel esitatavate majutusteenuse kasutajate andmete koosseisu. Isikuandmete kaitse nõuete paremaks täitmiseks luuakse majutusteenuse kasutajate andmekogu." "Tänavu (2019) üheksa kuuga ööbis Eesti majutusettevõtetes pea 3 miljonit külastajat, nende passiandmed kirjutati üles ja tõsteti hotellis kuhugi seifi. Kehtinuks uue seaduseelnõuga plaanitavad muudatused, oleks politsei- ja piirivalveametil juba 3 miljonit sissekannet andmebaasis, mida saaks automaatselt võrrelda 12 andmekogu sisuga, alates töölubade ja Interpoli registrist ja lõpetades kehtivate isikutunnistuste omaga." (artikkel) Võimalik lahendus on, et iga majutusasutuse infosüsteem realiseerib klientide andmeid pakkuva veebiteenuse. Majutusasutuste külastajate registri tarkvara pöördub regulaarselt selle veebiteenuse poole ja "tõmbab" majutusasutuste andmebaasidest külastajate andmeid kesksesse registrisse (näiteks JSON või XML dokumendina). Sellisel juhul on majutusasutuste külastajate register majutusasutuse infosüsteemi üks väline tegutseja. Eesti riigi infosüsteemi moodustavad infosüsteemid vahetavad omavahel infot X-tee andmevahetuskihi kaudu. X-tee mustrikataloogis kirjeldatakse sellist andmete "tõmbamisel" põhinevat lähenemist mustris PM1: andmete päringu teenus. Andmeid omav infosüsteem on teenuse osutaja. Andmeid omaval infosüsteemil on päringutele vastamise teenus, mida andmeid vajav infosüsteem välja kutsub. Võimalik on ka see, et majutusasutuse infosüsteemi tarkvara võtab ise regulaarselt külastajate registri tarkvaraga ühendust ja "lükkab" sinna külastajate andmeid. Sellisel juhul ei ole majutusasutuste külastajate register majutusasutuse infosüsteemi üks väline tegutseja. Eesti riigi infosüsteemi moodustavad infosüsteemid vahetavad omavahel infot X-tee andmevahetuskihi kaudu. X-tee mustrikataloogis kirjeldatakse sellist andmete "lükkamisel" põhinevat lähenemist mustris PM2: andmete saatmise teenus. Andmeid omav infosüsteem on teenuse tarbija. Andmeid vajaval infosüsteemil on andmete vastuvõtu teenus, mida andmeid omav infosüsteem välja kutsub. Pange selle uudise puhul tähele ka seda, et seadustega võivad olla ette nähtud reeglid, milliseid andmeid võib/peab kui kaua säilitama. Kui hakkate mistahes infosüsteemis mõtlema funktsionaalsusele "Kustuta X", siis tuleb selliste nõuetega arvestada. "Kuigi automaatsest registrist kustuvad inimese andmed üldjuhul ööpäevaga, siis majutusasutused ise peavad plaani kohaselt inimeste infot hoidma alles kaks aastat, et ametkonnad saaks vajadusel seda hiljem kontrollida." Rääkides keskse külastajate registri tehnilisest realisatsioonist, siis järgnev pakub välja ühe võimaliku lahenduse. Andmebaasisüsteem PostgreSQL toetab JSON ja JSONB andmetüüpe (tabelites võivad olla seda tüüpi veerud ja nendes veergudes võivad olla JSON dokumendid). Külastajate andmed laetakse veebiteenuse poolt alla ja salvestatakse dokumentidena PostgreSQL andmebaasi. Nende andmete põhjal tehakse päringuid. Kui leitakse huvipakkuv isik, siis tema andmed kirjutatakse eraldi tabelisse, kus võibolla ei ole enam JSON/JSONB tüüpi veergu, vaid selle asemel, on isiku atribuutidele vastavad andmed (eesnimi, perenimi, isikukood, ...) eraldi veergudes. Huvipakkuvate isikute otsimiseks, nende andmete eraldi tabelisse tõstmiseks ja ülevaadatud külastajate andmete kustutamiseks luuakse andmebaasis funktsioonid. Neid funktsioone on vaja regulaarselt käivitada. Kui soovite teha regulaarselt mingit tööd PostgreSQL andmebaasis (näiteks käivitada regulaarselt funktsiooni), siis tuleb selleks kasutada operatsioonisüsteemi vahendeid. Näiteks UNIXI-laadsetes operatsioonisüsteemides saab kasutada deemonit Cron, mis vastutab automaatsete operatsioonide eest. "Deemon on tagaplaanil jooksev programm, mis teostab teatud ettemääratud operatsioone kindlate ajavahemike tagant või vastuseks mingitele sündmustele." (Vallaste, http://www.vallaste.ee/) Majutusasutuse infosüsteemi klientide funktsionaalses allsüsteemi kirjelduses oleks kasutusjuht "Lae alla külastajate andmed", mis on seotud tegutsejaga Majutusasutuste külastajate register. ## Küsimus: Kuidas eristada sisulisi ja administratiivseid allsüsteeme? **Vastus:** Funktsionaalsed allsüsteemid ning registrid liigituvad sisulisteks ja administratiivseteks. Fowler (2010) liigitab tarkvara tarbetarkvaraks (utility software) ja strateegilist eelist andvaks tarkvaraks (strategic software). Fowler hindab, et 95% tarkvarast on tarbetarkvara ja 5% strateegilist eelist andev tarkvara. Fowler võrdleb tarbetarkvara torustikuga - see peab olema olemas ja veatult töötama. Kuni probleeme ei ole, siis kasutajat ei huvita kus see on ja kuidas see seda teeb. Strateegiline tarkvara aitab ettevõttel edendada oma äri ja jõuda uutele turgudele. Selline tarkvara ja selle toetatav äri peaks andma organisatsionile võistlejate ees eelise, tehes näiteks midagi paremini kui teised sama valdkonna ettevõtted teevad. Selle tarkvaraga seoses peaks toimuma innovatsioon. Leian, et administratiivsed allsüsteemid vastavad tarbetarkvarale ning sisulised allsüsteemid strateegilisele tarkvarale. ## Küsimus: Kuidas Mauruse otsing täpsemalt töötab? Millist tuge pakkus selle realiseerimiseks andmebaasisüsteem, mida Maurus kasutab? **Vastus:** Mauruse kasutajad soovivad sageli, et seal oleks otsingu funktsionaalsus. Lisasin Maurusesse selle funktsionaalsuse. Otsing on võimalik kodulehe piires. Leiate võimaluse seda teha iga aine kodulehelt alajaotusest Üldist=>Otsing. Otsing toimub üle materjalide metaandmete, teadete, helpdeski küsimuste/vastuste ning viidete. Otsingu tulemused on ühel lehel nende kategooriate kaupa grupeerituna. Materjale, teateid ja helpdeski küsimusi/vastuseid on otsingu tulemuses igaühte kuni 10. Viiteid on tulemuses kuni 20. Materjalide puhul ei toimu otsing mitte failide sisu, vaid materjale kirjeldavate andmete (metaandmete) põhjal. Kuna Maurus kasutab PostgreSQL andmebaasisüsteemi, siis tegi PostgreSQLi pakutav täisteksti otsingu funktsionaalsus selle funktsionaalsuse realiseerimise lihtsamaks. Järgnevalt esitan koodinäite. Näiteks oletame, et tahan lisada teadete otsimise võimaluse ning et andmebaasis on tabel Avalik_teade, üle mille veergude pealkiri ja sisu peaks otsing toimuma. Avalik_teade(avalik_teade_id, pealkiri, sisu) Primaarvõti(avalik_teade_id) Lisan tabelisse veeru tsv, mis hakkab iga teate korral sisaldama spetsiaalset pealkirja ning sisu kokkuvõtet ja on ühtlasi aluseks nende alusel otsingute tegemisele. See veerg on tüüpi tsvector. See on spetsiifiline PostgreSQLi andmetüüp. ALTER TABLE Avalik_teade ADD COLUMN tsv tsvector; Loon tabeliga seotud trigeri, mis andmete tabelisse lisamisel või muutmisel värskendab veergudes pealkiri ja sisu olevate andmete põhjal veerus tsv olevaid andmeid. Kahjuks ei toeta kasutatav PostgreSQL versioon võimalust määrata, et triger peaks käivituma ainult siis, kui andmeid muudetakse (UPDATE) mingis kindlas veerus. Kahjuks ei ole täistektiotsingutel eesti keele tuge, tänu millele oskaks andmebaasisüsteem otsingu tegemisel arvestada keele eripäradega. Seega kasutan inglise keele (pg_catalog.english) reegleid. CREATE TRIGGER teade_tsv_iu BEFORE INSERT OR UPDATE ON Avalik_teade FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(tsv, 'pg_catalog.english', pealkiri, sisu); Teen andmemuudatuse, mis tänu eelnevale trigerile tingib andmete lisamise veergu tsv. UPDATE Avalik_teade SET pealkiri=pealkiri; Veerus tsv on nüüd andmed nagu: 26,231,261 'segamini':253 'sell':24 'sellel':100 'sellest':91 'sellis':132 ' Loon veerule tsv otsingu kiirendamiseks indeksi. CREATE INDEX teade_tsv_idx ON Teade USING gin(tsv); Muudan veeru tsv kohustuslikuks. ALTER TABLE Teade ALTER COLUMN tsv SET NOT NULL; Järgnev päring leiab tabelist Avalik_teade sellised teated, mis sisaldavad sõna "SQL". Päring väljastab teate identifikaatori, pealkirja, sisu ning pealkirja ja sisu põhjal moodustatud kokkuvõtte, kus on otsisõna esile tõstetud. Päringu tulemus on sorteeritud tulemuse relevantsuse hinnangu alusel kahanevalt.. Päringu tulemuses on maksimaalselt 10 rida.. coalesce funktsioon tagastab vasakult lugedes esimese argumendi, mis ei ole NULL. coalesce(pealkiri,'') avaldis tähendab, et kui pealkiri on olemas (pole NULL) tagastab funktsioon pealkirja, vastasel juhul teiseks argumendiks oleva tühja stringi. Tühi string ja NULL on kaks ise asja - tühi string on väärtus, kuid NULL on marker, mis tähistab väärtuse puudumist. coalesce läheb vaja, sest PostgreSQLi stringide ühendamise (konkatenatsiooni) operaator käitub juhul kui üks argument on NULL järgnevalt: 'tekst' || NULL => NULL. Juhuks kui teates pealkiri või sisu puudub tuleb enne nende ühendamist kontrollida kas üks nendest on NULL ja vajadusel asendada see tühja stringiga: 'tekst' || '' => ''tekst' SELECT avalik_teade_id, pealkiri, sisu, ts_headline(coalesce(pealkiri,'') || ' ' || coalesce(sisu,''), q) AS fragment FROM (SELECT avalik_teade_id, pealkiri, sisu, q, ts_rank_cd(tsv,q) AS rank FROM Avalik_teade, to_tsquery('SQL') AS q WHERE tsv @@ q ORDER BY rank DESC LIMIT 10) AS foo; ## Küsimus: Kui mina muudan näiteks kaupade registri diagrammis klassi seost, siis mina pean uuesti genereerima SQL tabelite disaini kirjelduse? **Vastus:** Teil tuleb tagada kontseptuaalse andmemudeli, andmebaasi füüsilise disaini kirjelduse ja valmistehtud tabelite kooskõla. Selle saavutamiseks on erinevaid strateegiaid, uuesti genereerimine on nendest üks. Arvan, et kui muudatus kontseptuaalses andmemudelis ei ole väga suur, siis tulenevalt kasutatavate CASE vahendite tehnilistest piirangutest, võib muuta kontseptuaalset andmemudelit, siis muuta käsitsi andmebaasi füüsilise disaini kirjeldust ning siis genereerida uuesti SQL kood. ## Küsimus: Meie töövihiku projekti teemaks on treeningute funktsionaalne allsüsteem. Dokumendi punktis 1.2.3 (Allsüsteemi poolt vajatavad registrid) me kirjutame, et kasutame saalide registrit. Kas see tähendab, et meie projekti kontseptuaalse andmemudeli osaks peab olema saalide registri olemi-suhte diagramm? **Vastus:** Jah! Kommentaarid: 1. Töövihiku korral, kui X=Treening, siis Treening = Ainekaart Öelda, et iga treening on seotud täpselt ühe saaliga oleks sama, kui öelda näiteks ÕISis "Andmebaasid I" ainekaardil, et seda õpetatakse ainult ruumis ICT-404. Tegelikult saab seda ainet õpetada paljudes ruumides. Võimalik on anda sellele seosetüübile uus tähendus ja öelda, et tegemist on eelistatud saaliga selle treeningu läbiviimiseks. Selleks saab mudelis määrata saali rolli selle seosetüübi kontekstis. [Treening]-0..*-----+eelistatud saal-1-[Saal] 2. Igal põhiobjektil on elutsükkel ja infosüsteemis peab olema võimalik jälgida, millises seisundis on selle eksemplarid. Sellest sõltuvad süsteemis tehtavad tegevused. Näiteks ma ei tohiks saada siduda treeningut "Suletud" seisundis saaliga. Seega peab kontseptuaalses andmemudelis olema: [Saal]-0..*-----------1-[Saali seisundi liik] Samuti tuleb treeningu registreerimise ja treeningu andmete muutmise andmebaasioperatsioonide eeltingimustes ära kirjeldada, millises seisundis saalidega saab treeningut siduda. 3. Võimalik lihtsustus on käsitleda saali klassifikaatorina. Sellisel juhul oleks mudelis Saal Klassifikaatori alamtüübiks ja eraldi saalide registrit pole äriarhitektuuris vaja. Selline lahendus sobib, kui saalide andmete haldamiseks tehtavad toimingud ei erine teiste klassifikaatorite andmete haldamiseks tehtud toimingutest ja saalide elutsükkel ei erine teiste klassifikaatorite elutsüklist. Sellisel juhul puudub mudelist olemitüüp Saali_seisundi_liik. ## Küsimus: Mida ma võiksin teada NoSQL süsteemidest? **Vastus:** Teemas 1 oli juttu NoSQL süsteemidest. Kes tahab nende kohta rohkem teada saada, siis võiks alustada sellest Martin Fowleri umbes tunni pikkusest videost. Kes eelistab lugeda, saab vaadata seda materjali, laenutada raamatukogust raamatu, mille kokkuvõtteks see materjal on või lugeda seda sama raamatut elektrooniliselt (Kuidas kasutada O'Reilly digitaalset platvormi?). Hilisemast ajast tasub vaadata arvutiteadlase Michael Stonebrakeri ettekannet suurandmete ja nendega töötamise vahendite (sh NoSQL süsteemid) kohta. Vastukaaluks positiivsele "uus ja lahe läikiv mänguasi" tüüpi käsitlusele võiksid huvilised vaadata ka 2013. aastast pärit artiklit "History repeats itself: sensible and NonsenSQL aspects of the NoSQL hoopla", mis annab minu arvates realistliku vaate NoSQL süsteemide headele ja mitte nii headele külgedele. Kokkuvõte artiklist - kes minevikku ei mäleta, on määratud selle vigu kordama (väide, mis kehtib igal elualal). NoSQL and Technical Debt. Ajaveebi postitus, mis selgitab, miks NoSQL süsteemide ilmumine pole muutnud väärtusetuks SQLi ning andmebaaside projekteerimise õppimist. Nende oskuste puudumine on arendajatel võlg, mis tuleb hiljem intressidega tagasi maksta. NoSQL oma "skeemitute" andmetega loob tegelikult tehnilist võlga. Aina rohkemates NoSQL süsteemides saab andmebaasi tasemel kirjeldada ja jõustada andmebaasi struktuuri (näide) (kirjutamise skeemi e schema-on-write). Saadakse aru, et struktuur on eelis mitte puudus. Aina rohkemates NoSQL süsteemides saab kasutada deklaratiivset andmebaasikeelt (näide), mis paraku (SQL pole just kõige paremini disainitud keel) enamasti meenutab SQLi. Saadakse aru, et deklaratiivset keelt on palju kergem kasutada ja õppida kui imperatiivset. Irvhambad juba ütlevad, et NoSQL = Not Yet SQL. ## Küsimus: Miks mitte luua klassifikaatoritele ühist tabelit Klassifikaator, kus on kõikide klassifikaatorite koodid ja nimetused? **Vastus:** Vastuse leiate selle artikli esimesest punktist. Kes tunneb teema vastu sügavamat huvi võib vaadata bakalaureusetööd: Vellemaa, A.S., 2015. Mõned disainimustrid klassifikaatorite esitamiseks SQL andmebaasides. Bakalaureusetöö. TTÜ Informaatikainstituut [WWW] https://digi.lib.ttu.ee/i/?3484. ## Küsimus: Miks on kasulik tükeldada infosüsteemi allsüsteemideks? **Vastus:** Juhin Teie tähelepanu Postimehe 21.02.2017 artiklile "Riigi olulisema infosüsteemi seis: tengelpung lõhki, kalender ribadeks, aga lootust on". Paljude infosüsteemide arendamisel tekib kahjuks olukord, et arendus läheb oodatust kallimaks ja võtab eeldatust rohkem aega. Selles artiklis on sellise olukorra tekkimise ja põhjuste väga ilmekas kirjeldus Eesti pensionide ja sotsiaaltoetuste maksmise infosüsteemi (SKAIS) uue versiooni (SKAIS2) näitel. Seda infosüsteemi kasutatakse igapäevaselt 110 erinevat liiki toetuse ja pensioni maksmiseks kokku 700 000 inimesele. Kokkuvõtlikult: Arenduse valmimine lükkus edasi vähemalt 1,5 aastat. Projekt läks kallimaks vähemalt 1,5 miljonit. Arendajad olid artikli kirjutamise ajaks maksnud riigile 180 000 eurot trahve. Otsene seos käesoleva aine temaatikaga tekib sellest, et algselt asuti kogu keerulist süsteemi arendama tervikuna. See oli närimiseks liiga suur suutäis. Tõmmake paralleele sellega, et võtate suu täis mingit kõva maiustust ja siis ei saa isegi hambaid liigutada. Nüüdseks on otsustatud arendamist jätkata osade kaupa. Need osad vastavad funktsionaalsetele allsüsteemidele. Süsteemi jagamine allsüsteemideks võimaldab allsüsteemide arendamist järk-järgult, arenduse tellimist erinevate hangetega ja võimalik, et erinevatelt firmadelt - täpselt nii nagu nüüd plaanitakse. Kuna iga hanke tulemusena tuleb teha valmis väiksem "tükk", siis on ka tähtajad paremini saavutatavad. 11.08.2017 sai see lugu kurva jätku, kui tehti teatavaks, et riik katkestab lepingu süsteemi senise arendajaga ja kuulutab välja uue hanke. Kokkuvõttes läks arendus algselt plaanitust vähemalt kaheksa miljonit EURi kallimaks (algne plaanitud maksumus 7.1 miljonit EURi) ja valmimine lükkus viis aastat edasi. 15.04.2018 kirjutati, et uues SKAIS2 arendamise lepingus pandi paika eeldatav tööde kestus (neli aastat), kuid ei fikseeritud täpseid tähtaegu ega arendamise graafikut. Täpne ajagraafik pannakse paika pärast infosüsteemi arhitektuuri analüüsi. Näib, et see analüüs meenutab siin aines kirjeldatavat strateegilist analüüsi. Strateegiline analüüs määrab süsteemi skoobi, leiab arhitektuuri (või arihitektuuri variandid), tuvastab riskid ja paneb paika arendamise ajakava. Lepingus määrati ära üldine tegevuste järjekord: SKAISi arhitektuuri analüüs, olemasolevate teenuste vastavusse viimine uue arhitektuuriga, uute teenuste arendamise alustamine. 28.01.2019 kirjutas ajakirjandus, et juba 15 miljonit maksma läinud projekti jätkamiseks kuulutati 2019. aasta jaanuari keskel välja riigihange mahus 8 miljonit eurot. Olemasolevad arenduspartnerid jätkavad tööd vastavalt sõlmitud lepingule. Uue hanke eesmärk on samaaegselt arendada täiendavat funktsionaalsust. ## Küsimus: Miks on vaja klassifikaatorite funktsionaalset allsüsteemi? **Vastus:** Eluline näide, kuidas klassifikaatorite väärtuste hulk võib ajas täieneda. See näide on soo klassifikaatori kohta. Selliste täienduste tegemine (hetkel uute väärtuste lisamine) toimuks infosüsteemi äriarhitektuuri mõttes läbi klassifikaatorite funktsionaalse allsüsteemi. Kasutajatele esitatavate klassifikaatori väärtuste nimetused peaksid olema ühes inimkeeles. Kui süsteem peaks võimaldama kasutajaliidese keelt muuta, siis lõppkasutaja jaoks peaks keele muutmisel muutuma nii kasutajaliidese kui klassifikaatori nimetuste keel. Viimase saavutamiseks on erinevaid SQL-andmebaasi disaine. Süsteemide mitmekeelsuse küsimusi puudutab ka järgnev töö: Hövel, E., 2017. Mõned mitmekeelsete SQL-andmebaaside disainimustrid. Bakalureusetöö. TTÜ Tarkvarateaduse instituut [WWW] https://digi.lib.ttu.ee/i/?8271 ## Küsimus: Miks suurte IT-süsteemide arendamine pahatihti ebaõnnestub? **Vastus:** 2019. aasta sügisel avaldas riigikontroll aruande (kokkuvõte) selle kohta, miks riigi tarkvaraarenduse projektid (mis enamasti on suuremahulised) nii mõnigi kord ebaõnnestuvad. Viimasel ajal on selle kohta päris mitmeid näiteid. See aruanne oli üheks ajendiks, miks Andres Kütt pidas 4. oktoobril 2019 Tallinna Tehnikaülikoolis avaliku loengu teemal "Õppetunnid suurtest IT projektidest". Tundub, et riigikontrolli aruanne tabas valusalt närvi, sest arvajaid ning kaasamõtlejaid oli palju. Tõstaksin veel esile Kaimar Karu arvamusloo teemal "Riigi tarkvaraprojektide õnnestumise võimalikkusest". **Märksõnad:** arendus, infosüsteem ## Küsimus: Milleks läheb vaja kontseptuaalses andmemudelis olevaid olemitüüpide ja atribuutide definitsioonide tabeleid? **Vastus:** Kontseptuaalse andmemudeli (on ka Teie projektis) üheks osaks on olemitüüpide ja atribuutide definitsioonid. Seal tuleb täpselt lahti selgitada, milliste andmete vajadusele kontseptuaalne andmemudel osundab. Näiteks hotelli "ruum" - kas mõeldakse kõiki ruume (ka köök ja fuajee) või ainult ööbimiseks mõeldud numbritubasid või hoopis numbritubades sisalduvaid ruume. Näiteks kauba "tootja" - kas mõeldakse brändi (nt Apple, Olympus) või hoopis tehast, mis selle kauba kokku paneb. Kontseptuaalne andmemudel ning olemitüüpide ja atribuutide definitsioonid osutuvad näiteks kasulikuks siis, kui on vaja hakata andmeid integreerima - erinevates andmebaasides olevatest andmetest tervikpilti kokku panema. Siis on näiteks vaja aru saada, kas "Klient" andmebaasis A ja "Klient" andmebaasis B on üks ja sama asi või mitte. Lõpetuseks näide tänasest päevast, mis osutab infosüsteemide vahelise koostöö ja andmete integreerimise vajadusele. Justiitsminister Urmas Reinsalu hinnangul pole normaalne olukord, kus tagaotsitav võib saada endale autojuhiload kätte. "Esimene loogiline lahendus peaks e-riigis olema suuremate andmebaaside omavaheline seotus, et kui tagaotsitav isik ilmub kasvõi e-tervisesüsteemi, siis lööb punane tuluke põlema," leidis Reinsalu. (Reinsalu: korduvalt karistatud inimesi tuleks vähemal määral usaldada. ERR Uudised 10.03.2016) ## Küsimus: Milline võiks olla üldine SQL SELECT lausete koostamise strateegia? **Vastus:** Olen kunagi midagi kirjutanud SQL SELECT lausete koostamise üldise strateegia/metoodika kohta. See põhineb paljuski matemaatik Georg Pólya üldist probleemilahenduse strateegiat kirjeldaval raamatul Kuidas seda lahendada. Huvilised leiavad kirjutise lisamaterjalide lehelt (kasutajanimi: SIS2 parool: SIS2) SIIT. ## Küsimus: Mis asi on register? **Vastus:** Andmebaas on nagu päikesesüsteem. Päikese rollis on organisatsiooni eesmärgid. Kõik mis organisatsioonis IT vallas (sh andmebaasidega) tehakse, peab olema nende eesmärkide teenistuses, mitte vastupidi. Seega planeedid (andmebaasi osad) tiirlevad ümber päikese (organisatsiooni eesmärkide), mitte vastupidi. Päikese ümber tiirlevad planeedid vastavad põhiobjektidele e põhiolemitüüpidele. Planeetide ümber tiirlevad omakorda kaaslased e kuud, mis vastavad mitte-põhiobjektidele. Iga planeet-planeedi kaaslased süsteem vastab andmebaasi äriarhitektuuris ühele registrile. Nii nagu iga kuu tiirutab ümber kindla planeedi on ka iga mitte-põhiobjekt kindla registri tiiva all. Igal planeedil on null või rohkem kuud; igal põhiobjektil on null-või rohkem samasse registrisse kuuluvat mitte-põhiobjekti. Lisaks planeetidele tiirutavad ümber päikese ka asteroidid. Neist võib andmebaaside analoogias mõelda, kui andmestruktuuridest, mis on vajalikud ühe või teise rakenduse töö hõlbustamiseks, kuid mis ei kuulu ühtegi registrisse (nt disainitaseme abitabelid). Ümber planeetide (hetkel teadaolevalt ainul Maa, aga hiljem miks mitte ka mõni teine planeet) tiirutavad kunstlikud tehiskaaslased, mis on sinna planeedi asukate poolt saadetud, kuid mingil hetkel planeedile tagasi langevad ja selle käigus ära põlevad. Need on nagu registris olevad ajutiste andmetega andmestruktuurid, mida läheb vaja mingi konkreetse ülesande (nt konkreetse päringu) täitmiseks, kuid mis millalgi oma otstarbe kaotavad ja seega võib eemaldada. Nii nagu andmebaas või meie arusaam selle ülesehitusest ajas muutub, muutub ka päikesesüsteem (nt planeet püüab gravitatsiooni mõjul kinni mõne pisitaevakeha, mis muutub selle planeedi kuuks) või meie arusaam sellest (nt muutub arusaam sellest, millised taevakehad kuuluvad planeetide hulka). Nii nagu kunagi kustub päike, nii saab kunagi otsa ka organisatsiooni ja selle IT süsteemide (sh andmebaasisüsteemi toega andmebaasi) elukaar. ## Küsimus: Mis on intelligentne võti ja millal seda kasutada? **Vastus:** Üheks SQL tabelite võtmete liigiks on intelligentsed võtmed. Selliste võtmete väärtused omavad inimkasutajale sisulist tähendust ning võtme väärtusesse on kodeeritud informatsiooni. Sellise võtme näiteks on isikukood. Näiteks nii Eestis kui Soomes sisaldab see infot sünniaja ja soo kohta. Intelligentse võtme kasutamise väljakutseks on, et kui kodeering muutub, tuleb kõik sellest kodeeringust sõltuvad programmid ümber teha. Sellise võtme probleeme illustreerib hästi juhtum Rootsist, kus isikukoodid said suure pagulaste tulva tõttu otsa. Kuna ka Eesti isikukoodi osaks on järjekorranumber samal päeval sündinute eristamiseks, siis samasugune probleem võib tabada ka Eestit. Seda näiteks siis, kui e-residentsuse programm osutub ootamatult edukaks, sest ka e-residendid saavad isikukoodi. Viimaste uudiste kohaselt on Soomes arutusele tulnud kodeeringu muutmine. Põhjus on nii koodide otsalõppemine (vana skeem ei võimalda kõigile isikukoodi vajajatele unikaalset koodi genereerida) kui ka soov sooneutraalsuse järele. Moraal - koode, mis on "kõrgemalt poolt" (riik, standardiseerimisega tegelev organisatsioon, ettevõtte peakontor jne) ette kirjutatud tuleb kasutada, kuid ise ei peaks selliseid koode leiutama hakata. ## Küsimus: Mis on olemitüüp, atribuut ja olem? **Vastus:** Äkki on mõistetest klass, atribuut ja eksemplar paremaks arusaamiseks abi nendest animatsioonidest: https://maurus.ttu.ee/animatsioonid/animation_uml/ Need tegi kunagi üks bakalaureuseõppe üliõpilane oma lõputööna. Kogu selle temaatika juures on suureks probleemiks terminoloogiline segadus. Näiteks erinevate autorite tekstides tähistavad järgnevad sõnad (terminid) sisuliselt sama mõistet. Klass Objektitüüp Olemitüüp Olem Põhiobjekt Näiteks erinevate autorite tekstides tähistavad järgnevad sõnad (terminid) sisuliselt sama mõistet. Objekt Objekti eksemplar Olem Eksemplar Olemi eksemplar Eriti halb on, kui neid sõnu kasutatakse läbisegi. Näiteks üks räägib olemitest ja olemi eksemplaridest, teine olemitüüpidest ja olemitest, kolmas objektidest ja objekti eksemplaridest, neljas klassidest ja objektidest, kuigi tegelikult mõtlevad nad sama asja. Samasugune probleem on seostega. Üks räägib seosetüüpidest ja seostest, teine seostest ja seoste eksemplaridest ning kolmas seosetüüpidest ja seoste eksemplaridest, kuigi tegelikult mõtlevad nad sama asja. Selline terminoloogiline segadus on paraku reaalsus. Näide, kus üritan seda terminoloogiat järjekindlalt kasutada. Reaalses maailmas on isik (omaduste e atribuutidega) (meiliaadress, mis ühtlasi eristab seda isikut kõigist teistest isikutest e on tema unikaalne identifikaator=)mari.maasikas2@hot.ee (eesnimi=)Mari (perenimi=)Maasikas. Reaalses maailmas on isik (omaduste e atribuutidega) (meiliaadress, mis ühtlasi eristab seda isikut kõigist teistest isikutest e on tema unikaalne identifikaator=)juhan.juurikas@hot.ee (eesnimi=)Juhan (perenimi=)Juurikas. Reaalses maailmas on Mari Maasikas Juhan Juurika ülemuseks. Nende tähelepanekute alusel sõnastab andmebaasi kavandaja kontseptuaalses andmemudelis vajaduse hoida andmebaasis isikute andmeid (meiliaadress, eesnimi, perenimi ning kes on kelle ülemus). Selleks kirjeldab ta seal olemitüübi Isik, millel on atribuudid e_meil, eesnimi ja perenimi. See vajadus joonistatakse UML keele klassidiagrammi abil loodud olemi-suhte diagrammile üles luues seal klassi Isik ja määrates sellele atribuudid e_meil, eesnimi ja perenimi. Kontseptuaalses andmemudelis ei modelleerita olemeid (Juhan Juurikas või Mari Maasikas), vaid nende üldistust (Isik). Samuti modelleeritakse olemi-suhte diagrammil seosetüüp on ülemus, mille mõlemad otsad on seotud klassiga Isik. Kontseptuaalses andmemudelis ei modelleerita seoseid (Mari Maasikas on Juhan Juurika ülemus), vaid nende üldistust (on ülemus). Kontseptuaalses andmemudelis sõnastatud nõude rahuldamiseks luuakse SQL-andmebaasis tabel Isik, kus on veerud e_meil, eesnimi ja perenimi + välisvõtme veerg ylemuse_id. Iga rida, mis sellesse tabelisse lisatakse, peab vastama selle tabeli päisele (mis määrab isiku kohta andmebaasis kogutavad andmed). Iga rida on kujutus/peegeldus reaalse maailma olemist (nt reaalsest lihast ja luust Juhan Juurikast). Reaalse maailma olem (nt kindel füüsiline isik) ja tema kujutis süsteemis (nt rida tabelis, JSON dokument või XML dokument) on tegelikult ju kaks ise asja, aga kõnekeeles ollakse sageli lühiduse huvides ebatäpsed ja räägitakse lihtsalt olemitest ja nende andmetest. ## Küsimus: Mis vahe on MS Accessi SQL mägimurrakus DISTINCT ja DISTINCTROW määrangutel? **Vastus:** SQL standard kirjeldab DISTINCT, kuid mitte DISTINCTROW (st viimane on andmebaasisüsteemi-spetsiifiline leiutis). Leidke külaliste perenimed nii, et kordused on eemaldatud. Esitage perenimed suurtähtedega. Sorteerige päringu tulemuses perenimed tähestikulisele järjekorrale vastupidises järjekorras. Õige: SELECT DISTINCT Ucase(perenimi) AS perenimi FROM Külaline ORDER BY Ucase(perenimi) DESC; SELECT Ucase(perenimi) AS perenimi FROM Külaline GROUP BY perenimi ORDER BY Ucase(perenimi) DESC; Õpetlik on, et ORDER BY klauslisse tuleb kirjutada ORDER BY Ucase(perenimi) DESC, mitte ORDER BY perenimi DESC; Kuigi MS Access lubaks GROUP BY lauses kirjutada ka ORDER BY perenimi DESC, siis PostgreSQL ja Oracle tahavad ka seal funktsiooni poole pöördumist (NB! PostgreSQL ja Oracle andmebaasisüsteemides on see funktsioon nimega Upper, mitte Ucase). Pealegi on see ülesande mõttes loogilisem – sorteerida tuleks nende andmete alusel, mis kasutajale esitatakse. Kui ma ei taha ORDER BY klauslisse funktsiooni poole pöördumist kirjutada, siis võin vormistada lahenduse mitmeosaliselt, kus kõigepealt leitakse suurtähtedega erinevad perenimed ja siis sorteeritakse tulemust. SELECT perenimi FROM (SELECT DISTINCT Ucase(perenimi) AS perenimi FROM Külaline) AS erinevad_perenimed ORDER BY perenimi DESC; Vale: SELECT DISTINCTROW Ucase(perenimi) AS perenimi FROM Külaline ORDER BY perenimi DESC; DISTINCTROW ignoreeritakse, kui andmeid küsitakse vaid ühest tabelist või on vaja väljastada andmed kõikidest FROM klauslis nimetatud tabelite veergudest. Viide. Veel üks näide. Leidke vähemalt ühe reserveerimise teinud külaliste erinevad perenimed. Päringu tulemuses on iga perenimi üks kord. SELECT DISTINCT perenimi FROM Külaline INNER JOIN Reserveerimine ON Külaline.külalise_nr = Reserveerimine.külalise_nr; Leidke vähemalt ühe reserveerimise teinud külalised. Väljastage igaühe kohta tema perenimi. Kui leidub rohkem kui üks sama perenimega külaline, kes on teinud vähemalt ühe reserveerimise, siis on see perenimi päringu tulemuses mitmekordselt. SELECT DISTINCTROW perenimi FROM Külaline INNER JOIN Reserveerimine ON Külaline.külalise_nr = Reserveerimine.külalise_nr; DISTINCTROW vaatleb korduste eemaldamiseks tervet tabeli rida, mitte ainult päringu tulemuses väljastatavaid andmeid. DISTINCTROW pole SQL standardis ja on MS Accessi-spetsiifiline kontsruktsioon (seda ei toeta isegi MS Accessi vanem vend – MS SQL Server). Alternatiiv selle kasutamisele: SELECT perenimi FROM Külaline WHERE EXISTS (SELECT * FROM Reserveerimine WHERE Külaline.külalise_nr = Reserveerimine.külalise_nr); ## Küsimus: Märkasin et te kirjutate SQL muutujaid eesti keeles, näiteks "nimi VARCHAR(10)". Arvestades et kõik ettevõtted ning arendajad kirjutavad tänapäeval muutujaid ja koodi inglisekeelselt, kas ma võin ka praktikaülesannetes ning iseseisvas töös kasutada inglise keelt? **Vastus:** Kui Te mõtlete iseseisvat tööd, siis loomulikult võite koodis kasutada ingliskeelseid nimesid. Töö tegemisel tuleb juurde lisasamm, kus kontseptuaalsest andmemudelist genereeritud tabelite kirjelduses tuleb nimed tõlkida. Mis puudutab praktikaülesannetes andmete otsimise või muutmise lausete kirjutamist, siis seal on kirjutaja piiratud nimedega, mis on andmebaasis kasutusel. Mis puudutab praktikaülesandeid muuta olemasoleva andmebaasi struktuuri (lisada tabeleid, veerge, kitsendusi), siis kasutada ühes andmebaasis läbisegi erinevaid keeli ei ole ilus ega ka kooskõlas puhta koodi põhimõtetega. Tahan rõhutada et kõik puhta koodi (sh nimetamise) üldpõhimõtted kehtivad sõltumata kasutatavast inimkeelest. Eesti keel on keel nagu iga teinegi ja sobib asjade nimetamiseks täpselt sama hästi. Seega minu arvates ei ole õigustatud arvamus, et andes asjadele nimesid eesti keeles õpime või teeme midagi valesti. Olulisemad on põhimõtted (ainsus vs. mitmus, snake_case vs. PascalCase vs. camelCase, regulaarne vs. piiritletud identifikaator), kui see, mis inimkeeles on see nimi kirjutatud. Aga veelkord - oma iseseisva töö projektis kasutage nimetamise stiili, mida ise paremaks peate. Peaasi, olge järjekindel. **Märksõnad:** identifikaator, nimi, nimetamine ## Küsimus: Teeme projekti töövihiku järgi. Meil on andmebaasis järgmise kontseptuaalse andmemudeli järgi loodud tabelid: [Treening]-1----------0..*-[Treeningu_kategooria_omamine]-0..*---------1-[Treeningu_kategooria] [Treening]-1----------0..*-[Treeningu_põhimõttelise_toimumise_asukoht ]-0..*---------1-[Ruum] Milliste välisvõtmete puhul tuleks kasutada ON DELETE CASCADE ja milliste puhul mitte? **Vastus:** Teie andmebaasis on kaks sarnast (mitu-mitmele seost realiseerivat) tabelit. Treeningu_kategooria_omamine Treeningu_põhimõttelise_toimumise_asukoht Nendes on kokku neli välisvõtit. ON DELETE CASCADE kasutamise üle otsustamisel tuleks mõelda, milline oleks primaartabelist ühe rea kustutamise mõju sõltuvale tabelile. Analüüsin ükshaaval kõiki välisvõtmeid mõttega, et nende puhul oleks määratud "ON DELETE CASCADE". 1. Primaartabel: Treening Sõltuv tabel: Treeningu_kategooria_omamine Kui kustutan rea tabelist Treening, siis kustuvad ainult selle konkreetse treeningu kategooria omamised. Muudatus mõjutab ainult neid, kes kasutavad selle ühe treeningu andmeid. Kustutamine ei sega ega takista teistele treeningutele kategooriate määramist. Võib öelda, et muudatuse mõju on lokaalne. ON DELETE CASCADE toetaks kasutusjuhu Unusta treening läbiviimist. 2. Primaartabel: Treening Sõltuv tabel: Treeningu_põhimõttelise_toimumise_asukoht Sama, mis esimene. 3. Primaartabel: Ruum Sõltuv tabel: Treeningu_põhimõttelise_toimumise_asukoht Kui kustutan rea tabelist Ruum, siis mõjutab see kõiki treeninguid, millele see ruum on asukohaks märgitud (võib olla kümneid või isegi sadu). Võibolla mõni treening jääks üldse ilma ruumita. Kui treeningute haldur on treeningule märkinud ruumi ja siis selgub, et seda ruumi polegi tegelikult olemas või see kaob kasutusest, siis korrektne asjaajamine dikteerib, et treeningute haldurit tuleb sellest informeerida ning temaga koos leida lahendus, millist ruumi ikkagi treeningute jaoks kasutada. Äkki tuleb välja, et mõne treeningu läbiviimiseks ei olegi ühtegi sobivat ruumi ja seda treeningut ei saagi läbi viia (treening tuleb lõpetada või unustada). Võib öelda, et muudatuse mõju on globaalne. ON DELETE CASCADE ei peaks kasutama. Selle asemel sobib ON DELETE NO ACTION. Kui süsteemis on kasutusjuht Unusta ruum, siis ON DELETE NO ACTION aitab jõustada reegli, et kasutuses ruume ei saa unustada (andmeid kustutada), vaid need tuleb lõpetada ja vajadusel lõpetatavale ruumile sobiv asendus leida. 4. Primaartabel: Treeningu_kategooria Sõltuv tabel: Treeningu_kategooria_omamine Kui kustutan rea tabelist Treeningu_kategooria, siis mõjutab see kõiki treeninguid, mis on sellesse kategooriasse määratud (võib olla kümneid või isegi sadu). Võibolla peale seda ei kuulugi enam mõni aktiivne treening ühtegi kategooriasse. See läheb aga vastuollu analüüsi dokumendis seisundidiagrammis väljendatud reegliga, et iga aktiivne treening peab olema seotud vähemalt ühe kategooriaga. Kategooriaid kasutatakse treeningute otsimiseks. Kui treening pole üheski kategoorias, siis ei saa kliendid selle andmeid vaadata (vt kasutusjuhtu Vaata aktiivseid treeninguid). Võib öelda, et muudatuse mõju on globaalne.ON DELETE CASCADE ei peaks kasutama. Selle asemel sobib ON DELETE NO ACTION. Kui süsteemis on kasutusjuht Unusta klassifikaator, siis ON DELETE NO ACTION aitab jõustada reegli, et kasutuses klassifikaatori väärtuseid ei saa unustada (kustutada), vaid need tuleb lõpetada ja vajadusel lõpetatavale väärtusele sobiv asendus leida. ## Küsimus: Töövihiku projekti muutes tekkis küsimus, kui suurt rõhku tuleks panna ainsuse/mitmuse kasutamisele X-i asendamisel? Nt. allsüsteemide juures on isikute, töötajate jne allsüsteemid, loogiliselt võttes tuleks seal asendada X mitmuse vormiga, aga kas see oleks korrektne? Läbivalt on kasutusel muidugi (meie projekti puhul) kaup kui ainsuse vorm, kuid mõned kohad tekitavad segadust, kas panna mitmusesse või ainsusesse. Kuidas sellises olukorras tegutseda? **Vastus:** Öeldakse, et arvutiteaduses on kaks keerulist asja ja nendest üks on nimede andmine. X ainsuse ja mitmuse vormi valikul on oluline järjekindlus – sama tüüpi elemente (nt allsüsteemid, kasutusjuhud, olemitüübid, tabelid) tuleb nimetada ühes stiilis. Minu soovitus on kasutada allsüsteemide nimetamisel mitmuse vormi (nt kaupade funktsionaalne allsüsteem ja kaupade register) ning olemitüüpide ja tabelite nimetamisel ainsuse vormi (nt Kaup). Kasutusjuhtude korral, kui protsess tegeleb korraga ühe eksemplariga (nt ühe kauba lõpetamine), siis kasutage ainsuse vormi (nt kasutusjuht Lõpeta kaup). Kui protsess tegeleb korraga mitme eksemplariga, siis kasutage mitmuse vormi (nt kasutusjuht Vaata kõiki kaupu). --- # Teema: Korraldus - iseseisev töö ## Küsimus: Kas iseseisva töö ülevaatamisel peavad olema kohal kõik projekti tegijad? **Vastus:** Ei pea, kuid teadmiste saamise eesmärgil oleks mõistlik. See ei ole kaitsmine. Õppejõud vaatab koos vähemalt ühe autoriga töö üle ning teeb talle suuliselt teatavaks puudused mis tuleb arvestuse saamiseks kõrvaldada. Need tuleb üles kirjutada. Kui õppejõuga suhtleb ning märkmeid teeb mitu inimest, siis on väiksem võimalus, et midagi jääb kahe silma vahele. ## Küsimus: Kas ma peaksin enne iseseisva töö prototüübi tegema hakkamist näitama õppejõule dokumentatsiooni ette? **Vastus:** See ei ole kohustuslik, kuid on mõistlik juhul kui olete otsustanud teha töö nullist ja omal teemal, mitte kasutada etteantud malli. Seda saab teha vastuvõtuajal. Kirja teel projekte üle ei vaadata. ## Küsimus: Kas ma võin minna üle ühest iseseisva töö tegijate rühmast teise üle? **Vastus:** Liitumine olemasoleva rühmaga (kaks üliõpilast), et nende projekti edasi teha on lubatud kuni kaheksanda õppenädala lõpuni. Peale seda on lubatud projektist eraldumine ja projekti üksinda tegemine, projekti liikme projektist väljaarvamine teiste liikmete poolt ning samuti kahe või kolme üksinda projekti tegija üheks tegijate rühmaks liitumine. Projekti liikmete muutmisel tuleb arvestada piiranguga, et projektis võib olla kuni kolm liiget. Projekti liikmete hulga muutusest õppejõu teavitamiseks on ainus viis muuta teema registreerimise ülesande vastust Mauruses. Kui seda pole tehtud, siis järelikult pole rühm muutunud. ## Küsimus: Kas ma võin muuta iseseisva töö registreeritud teemat? **Vastus:** Jah võib. Sellest mulle teada andmiseks muutke palun Mauruse keskkonnas iseseisva töö teema registreerimise ülesande vastust. Õppejõud näeb kui vastust on muudetud ja saab selle kaudu muudatusest teada. ## Küsimus: Kas ma võin vaadata teiste üliõpilaste projektide kaitsmisi? **Vastus:** Jah võite ja see on isegi väga soovitav. Kõikide arvutiklassis toimuvate ülevaatuste korral on klass avatud ja ülevaatus avalik. Kui projekt pole veel valmis ja arvestust saanud, siis käige palun kohal vähemasti oma tunniplaani järgses praktikumis (loomulikult võite tulla ka mõnda teise tundi!) ja vaadake palun teiste üliõpilaste tehtud tööd. Enamik võimalikest probleemidest on ühised paljudele projektidele. Nii nagu haiguste ennetamine on kasulikum haiguste ravimisest on ka projekteerimise korral palju odavam ja mugavam vigu ennetada, mitte neid tagantjärgi parandada. Hindan, et vähemalt 80% vigadest kordub paljudes projektides. Kuna arvutiklass on avatud saate sellel ajal ka oma projekti edasi tegemisega tegeleda. ## Küsimus: Kas me saame töövihiku projekti korral ära kustuta diagrammidelt mentor ja juhendatav seose? **Vastus:** Töövihiku valmistehtud osi kustutada ei tohi. Diagrammilt (nt X registri olemi-suhte diagramm) võite selle kustutada, kuid seda ei tohi kustutada mudelist. Räägin praegu seosetüüpi tähistava joone pildilt eemaldamisest. See seosetüüp peab olema kindlasti nähtav töötajate registri olemi-suhte diagrammil. Andmebaasis tuleb see seosetüüp realiseerida. ## Küsimus: Kas töövihiku tüüpi projekti korral võib mitu rühma teha projekti samal teemal? **Vastus:** Jah võib. ## Küsimus: Kas ühes tiimis "Andmebaasid I" aines võivad olla inimesed erinevatest gruppidest? **Vastus:** Projekti rühmas võivad olla üliõpilased erinevatest gruppidest, kes käivad erinevatel aegadel praktikumis. Kui praktikumis toimub projektiga tegelemine, siis on oluline, et kõik kohalkäinud annaksid oma tunni töö järgmisele tundi tulijale üle. ## Küsimus: Kuidas esitada iseseisev töö? **Vastus:** Iseseisva töö esitamiseks (sõltumata sellest, kas tegemist on lõplikult valmis versiooniga või vaheversiooniga, millele soovite konsultatsiooni käigus tagasisidet) valige õppekeskkonna vasakpoolsest menüüst "Kiirvalik=>Ülesannetele vastamine" ning avanenud leheküljelt ülesanne "Iseseiseva töö esitamine". Valige palun Iseseisva töö esitamine=> Sisesta esimest korda. Lugege seal ülesande teksti. Ülesande vastusena saab saata ka faile. Selleks tuleb ülesandesse esmakordsel sisenemisel vajutada lehe lõpus nupule "Saada ära". Seejärel tuleb ülesande juures vajutada lingile "paranda/muuda". Nüüd on ülesande küsimustega seotud lingid "Saada fail". Sellele vajutades tekib lehe ülaosas võimalus faili valimiseks. Faili serverile saatmiseks tuleb vajutada nupule "Saada ära". NB!Iseseisva töö lõpliku versiooni esitamisel peab vastuse saatma üks projekti liige. ## Küsimus: Kuidas registreerida iseseisva töö projekti teema? **Vastus:** Tähtajaga 8. veebruar 2019 (kaasa arvatud) tuleb vastata iseseisva töö valikuga seotud küsimustele (st saada selgeks ülesande püstitus, valida teema ja panna kokku tegijate rühm). Seda tuleb nii varakult teha, et saaks alates kolmandast nädalast praktikumides sisukalt ja efektiivselt kaasa töötada. Iseseisva töö registreerimiseks valige õppekeskkonna vasakpoolsest menüüst "Ülesanded=>Vastamine" ning avanenud leheküljelt ülesanne "Iseseiseva töö teema registreerimine". Kui teete iseseisvat tööd rühmatööna, siis peab teema registreerima üks rühma liige (iseseisvat tööd võib teha 1-3 liikmelistes rühmades). Enne vastamist on kindlasti vaja tutvuda ülesande püstitusega, mille leiate kataloogist Aine korraldus. Kui teete projekti üksinda, kuid otsite kaaslast, siis on võimalik seda soovi iseseisva töö teema registreerimisel väljendada. ## Küsimus: Kui palju andmebaasioperatsioonide lepinguid peab olema iseseisvas töös laialt kirjeldatud? Näidisprojekti kasutujuhtude kirjelduses (punkt 2.1.1) on neid üsna palju, kuid operatsioonide lepingute kirjelduses (punkt 2.2.2) neid leidub neid vähem. Millised on nõuded selle projekti osa kohta? **Vastus:** Operatsioonide lepingud tuleb kirjutada kõigi nende operatsioonide kohta, mis täidavad mõlemat järgnevat tingimust. a) neid vajavad projektis käsitletavad kasutusjuhud, b) nende käigus lisatakse/muudetakse/kustutatakse andmebaasis olevaid andmeid. Operatsioonide lepinguid ei tule kirjutada operatsioonide kohta, mille käigus ainult loetakse andmebaasis olevaid andmeid. ## Küsimus: Kus on kirjas, millised projekti osad tuleb iseseisvas töös täita? **Vastus:** Kevadise iseseiseva töö dokument hõlmab näiteprojektist peatükke 1, 2 ja 5 ning lisaks punkti 3.1. Lisaks tuleb teha projekteeritud süsteemi andmebaasi prototüüp (kogu projekti mahus) ja rakenduse funktsionaalne prototüüp ühe töökoha ulatuses. See info on ka kirjas kursuse tutvustuses kataloogis "Aine korraldus". Samuti näeb seda kui vaatate iseseisva töö dokumendi malli - kõik pealkirjad, mille alla peab aine projektis midagi kirjutama, on tähistatud punasega. ## Küsimus: Ma ei registreerinud õigel ajal iseseisva töö teemat. Mis nüüd saab? **Vastus:** Miinuseid selle eest ei saa. Kuid registreerige esimesel võimalusel oma vastused. Mida hiljem Te hakkate iseseisvat tööd tegema, seda raskem on seda õigeks ajaks valmis saada ja seda väiksema on võimalus saada lisapunkte eksamile. ## Küsimus: Miks tasub iseseisva töö projekti teha rühmatööna? **Vastus:** Selleks, et harjutada koostööd ja suhtemist. Artikkel Postimehes (15.02.2018) kirjutab, et IT ettevõtted tunnevad puudust spetsialistidest, kes on koostööaltid ja head suhtlejad. ## Küsimus: Mul ei ole ühtegi kaaslast, kellega koos iseseisva töö projekti koos teha. Ometigi sooviksin kaaslase(id) leida. Mida teha? **Vastus:** Variandid (võib kasutada kõiki): Tõusete loengu või praktikumi alguses või lõpus püsti ja annate oma soovist kõigile ruumis viibijatele kõva häälega teada. Iseseisva töö projekti registreerimisel on üks küsimus selle kohta, et kui teete projekti üksinda, siis kas soovite leida kaaslaseid. Kui vastate seal küsimusele jaatavalt, siis reklaamin Teie soovi õppeaine kodulehel. Kui leiate peale seda projekti tegemiseks kaaslase(d), siis tuleb sellest muudatusest mulle teada anda, muutes iseseisva töö teema registreerimise ülesande vastust. NB! Üksik üliõpilane ei saa liituda kahese projekti rühmaga peale kaheksanda õppenädala lõppu. Kõik muud liikumised rühmade sees ja vahel on lubatud kuni semestri lõpuni. ## Küsimus: Tahan teha projekti PostgreSQL või Oracle andmebaasisüsteemis ning selleks soovin juurdepääsu apex.ttu.ee serverisse. Kuidas seda saada? **Vastus:** Teil on juurdepääs õppeaine "Andmebaasid II" kodulehele siin samas keskkonnas (kasutajanimi: SIS2, parool: SIS2) Täitke palun esimene punkt seal olevast ülesandest 1. Ülesande asukoht: Asukoht kataloogipuus: /Iseseisva töö projekti tegemine/Töö harjutustunnis (samm-sammuline juhend)/Ylesanne_IDU0230_1_2018_ver4.pdf Ressursi nimi: Ülesanne 1 - Serverile juurdepääsu küsimine ja esmatutvus mõningate materjalidega --- # Teema: Korraldus - SQL kontrolltöö ## Küsimus: Kas oleks võimalik saada iseseisvaks harjutamiseks mõeldud SQL ülesandeid? **Vastus:** Ülesanded on lisamaterjalide lehe (kasutajanimi: SIS2, parool: SIS2) kataloogis Iseseisev SQLi harjutamine. Seal on neid palju ning igale maitsele. Selle kataloogi alamkataloogis SQLi nuputamine on keerukamad ülesanded. Selle kataloogi alamkataloogis Lahendused on ülesannete (sageli kommenteeritud) vastused. ## Küsimus: Kui kirjutan kontrolltööd 16 nädalal ja ei õnnestu see mul, kas tohib peale seda teha järel tööd sessiooniajal? **Vastus:** Jah, tohite küll. Sessiooni ajal on veel kaks kontrolltöö kirjutamise võimalust (üks sessiooni alguse- ja teine lõpuosas). Nendel aegadel ei lähe lisapunktid enam arvesse. ## Küsimus: Kui kirjutan SQL kontrolltööd esimest korda mingil muul ajal kui aprillis, siis kas on lubatud kasutada A4 lehte abimaterjalina. **Vastus:** Üldiselt ei ole lubatud. Abimaterjale saab SQL kontrolltöö kirjutamisel kasutada üks kord aastas - aprillis - kui üliõpilastel on esimene kontrolltööde kirjutamise voor. Ainus erand on, et kui annate enne 12nda õppenädala kontrolltööd teada, et ei saa sellel osaleda, siis see annab võimaluse kasutada A4 abimaterjalide lehte 16nda nädala järeltööl. Sellest teadaandmise tähtaja leiate kursuse kodulehelt. Teadaandmiseks tuleb ennast registreerida Mauruses õppeaine kodulehel spetsiaalsele teadmiste kontrollile. ## Küsimus: Tahaksin küsida. Kui sel semestril projekt ei jõua teha aga SQL kontrolltöö on tehtud, nagu mina sain aru, et projekt on vaja jargmisel kevadel uuesti tegema aga mis saab siis kontroltöö hinnest? Kas kontrolltöö on vaja ka uuesti tegema? **Vastus:** Kontrolltöö hinne kehtib kuni deklaratsiooni kehtivuse lõpuni. Uuesti deklareerimisel tuleb kontrolltöö uuesti teha. Projekti arvestus kehtib ka uuesti deklareerides. Hindamisel kasutatav projekti kordaja määratakse kindlaks vastavalt jooksval semestril kehtivatele reeglitele. SQL kontrolltöö ja eksami lisapunktid kehtivad ainult saamise semestril. Deklaratsioon kehtib ühe semestri. ## Küsimus: Tahan kirjutada kontrolltööd 16. nädalal. Kas selle saad kirjutada mitte oma grupi praktikumi ajal? **Vastus:** Jah. 16. nädalal toimuvadki kontrolltöö järeltööd ainult osade praktikumide ajal. Ülejäänud praktikumides toimub iseseisva töö ettenäitamine. --- # Teema: Korraldus - üldine ## Küsimus: Kas eksamit saab teha enne kui kõik eksamieeldused on täidetud? **Vastus:** Ei saa. Eksami tegemiseks peavad olema täidetud kõik eksamieeldused: SQL kontrolltöö tehtud jooksval semestril vähemalt hindele 1, projekt on arvestatud. ## Küsimus: Kas erinevatel nädalatel võib käia erinevates praktikumides? **Vastus:** Jah võib, eeldusel, et klassi mahute. Ei saa käia IASM rühma praktikumis, sest see on inglise keeles. Elu näitab, et lõpptulemusena võib olla mõnel ajal käijaid hästi palju ja õppejõul jagub sedavõrra osalistele vähem aega mõnel teisel ajal (eriti reedeti) on aga klass väga hõre ja samavõrra on õppejõul igale osaleja jaoks rohkem aega. Seega tasub alates teises õppenädalast õppejõult uurida, kas soovitud ajal on võrreldes teiste aegadega klassis liiga palju üliõpilasi ning millised on ajad, kus tunnis käijaid on vähe. ## Küsimus: Kas tehes eksamit eksamisessiooni viimasel eksami tegemise ajal on veel võimalik seda parandada? **Vastus:** Kui teete eksamit eksamisessiooni viimasel päeval, siis saate vajadusel ikkagi teha eksamit 2+1 korda (kui teete põhieksamit) või 1+1 korda (kui teete lisaeksamit). Kuid kõik need eksami tegemised toimuvad samal päeval ja samas kohas, üksteise järgi (olen selleks aeg varunud). ## Küsimus: Kuidas arvestatakse lisapunkte? **Vastus:** SQL lisapunktid lähevad arvesse SQL kontrolltöös (13. õppenädalal) ja esimeses järeltöös (16. õppenädalal). Näiteks ilma lisapunktideta on SQL töö 65 punkti ja 2, kuid koos 7 lisapunktiga 72 punkti ja 3. Lisaks sellele määran üheteistkümnenda õppenädala lõpus lisapunktide lävendi, mille ületamisel saab üliõpilane SQL kontrolltöö hinde automaatselt 5. Kõik üle lävendi olevad punktid lähevad eksami lisapunktideks. Seega, kui üliõpilasel on näiteks 5 punkti üle lävendi, siis ta saab eksamile 5 punkti juurde. Kahe vahetesti tulemused lähevad samuti eksamile lisapunktideks. Näiteks ilma lisapunktideta on eksam 68 punkti ja 2 (17 õiget vastust 25-st), kuid koos 10 lisapunktiga on eksam 78 punkti ja 3. Eksami lisapunktid lähevad arvesse kõigil semestri jooksul tehtud eksami sooritustel. **Märksõnad:** punktid, lisapunkt, SQL kontrolltöö, test, eksam, hinne, lävend ## Küsimus: Kuidas ennast kodulehele registreerida? **Vastus:** Lehele ligipääsemiseks tuleb ennast registreerida. Kui kasutate https://maurus.ttu.ee keskkonda esmakordselt, siis valige õppeaine lehelt menüüst Üldist=> Registreerumine. Täitke vorm ja vajutage nupule "Registreeri". Kui juba olete õpikeskkonnas mingile lehele registreerunud (vahet pole, kas üks või kümme aastat tagasi), siis siis valige Mauruse esilehel menüüst Üldist=>Minu konto ja lisage enda aktiivsete lehtede hulka: "Andmebaasid I (ITI0206, IDU0220) (kevad 2019)" Ärge unustage vajutada "registreeri". Kui olete unustanud parooli, siis Mauruse pealehel on selle nullimise juhend Kui Te ei mäleta kasutajanime/meiliaadressi, siis pöörduge õppejõu poole! Registreerumise järel peate ootama kuni õppejõud Teie juurdepääsu õiguse kinnitab. Palun vaadake üle oma konto andmed ning registreerige seal selline meiliaadress, mida Te igapäevaselt loete. Sellele aadressile hakkab saabuma aine korralduslik ja muu info. Seda võib vaja minna õppejõul, et Teiega ühendust võtta. ## Küsimus: Kuidas kujuneb hinne? Milline mõju on lisapunktidel ja projektil? **Vastus:** Üks koht, kust seda kiiresti vaadata on aine korralduse kirjelduses. Kerige kuupäevadest mööda ja selle all on aine lühikirjeldus. Hindamise põhimõtted on rasvase ja suure fondiga esile tõstetud. ## Küsimus: Kuidas valmistuda õppeaines toimuvateks testideks (vahetestid ja lõpptest)? **Vastus:** Kordamisküsimused leiab kataloogist Teooria testideks (vahetestid, eksam) valmistumine. Testide tegemine toimub veebipõhise keskkonna kaudu, kuhu Teie konto luuakse automaatselt peale seda, kui olete Mauruses õppeaine kodulehel registreerinud. NB! Uuendusena on süsteemi lisatud testideks harjutamise funktsionaalsus. Harjutamiseks minge lehele https://maurus.ttu.ee/testimine/valik_harjuta.php. Harjutamiseks tuleb valida test (2019. aasta kevade lõpptestiks harjutamiseks valige Valikvastustega lõpptest ainetes ITI0206 ja IDU0220 (2019)). Andmebaasid I lõpptesti küsimused valitakse üle 500 küsimuse seast. Valiku põhimõtted (teemade kaupa) on kirjas kordamisküsimuste dokumendi alguses. Järgnevalt loetlen harjutuskeskkonna mõned olulised põhimõtted. Sisselogimiseks on Mauruse kasutajanimi ja parool. Harjutamiseks võib olla avatud rohkem kui üks test - pöörake tähelepanu, mida valite. Testide hulgas võib olla eestikeelseid ja ingliskeelseid. Teil tuleb valida eestikeelne. Testi omadused (vastamiseks ettenähtud aeg; küsimuste arv; küsimuste hulk, millest testiküsimused valitakse; küsimuste valiku põhimõtted) on samasugused nagu vastaval hinnataval testil. Iga testi tegemisel genereerib süsteem uue küsimustiku. Tehtavate testide arv ei ole piiratud. Süsteemi kuritarvitamisel, et selle abil küsimusi välja pumbata (skripti kasutamine vastamiseks; küsimustiku korduv genereerimine ilma vastamiseta), blokeeritakse vastaja juurdepääs sellele testile ilma eelhoiatuseta ning jäädavalt. Iga valitava testi juures on näha ajahetk, milleni on test harjutamiseks valitud. Tulemused salvestatakse ja õppejõud näeb tulemusi. Salvestamise järel näeb vastaja õigete vastuste arvu, hinnangut vastustele ja iga küsimuse korral ka seda, kas küsimusele vastati õigesti või valesti. Kui küsimusele vastati valesti (kuid ei jäetud vastamata), siis näitab süsteem ka õiget vastust. Õigeid/valesid vastuseid näeb ainult salvestamise järel, kuid mitte hiljem. Harjutamise testide tulemusi näeb hiljem ka siit. Tulemusi ei võeta õppeaine hindamisel MITTE MINGIL VIISIL arvesse (st võite julgelt harjutada ja ka eksida). ## Küsimus: Kui praktikumis ei jõudnud kõiki või ühtegi lisapunktide ülesannet ära lahendada, kas on võimalik samal nädalal ka mõnes teises praktikumis veel lisapunktide ülesandeid lahendada? **Vastus:** Põhiülesannete eest võib nädala jooksul punkte saada maksimaalselt üks kord. Nuputamisülesannete (praktikumi ülesannete failides joone all) eest võib punkte saada nädalas rohkem kui ühel korral. Seega: kui käisite tunnis ja ühegi põhiülesande eest punkti ei saanud, siis võite tulla mõnda teise sama nädala praktikumi, et veelkord proovida põhiülesandeid lahendada (eeldusel, et seal ruumi jagub), kui käisite tunnis ja saite vähemalt ühe põhiülesande eest punkti, siis samal nädalal uuesti tundi tulles saate lahendada nuputamisülesandeid. ## Küsimus: Kus on kodulehel jooksvad tulemused? **Vastus:** Kataloogis Tulemused. **Märksõnad:** punktid, lisapunktid, vahetest, vahetestid ## Küsimus: Miks me ei kasuta õppekeskkonnana Moodlet? **Vastus:** Jah, see on kindlasti üks võimalus. Võimalik oleks kasutada riigi tasemel pakutavat Moodle keskkonna (HITSA Moodle) või ained.ttu.ee keskkonnda, mis põhineb samuti Moodlel. Kui Teil on huvi näha, kuidas selle aine materjalid Moodle'is välja näeks, siis võite vaadata "Andmebaasid I" õppeaine ingliskeelse versiooni kodulehte. Ingliskeelset versiooni õpetatakse IASM õppekava üliõpilastele. Pääsete sellele ligi külalisjuurdepääsuga kasutades parooli: AB17guest. Siiski on minu hinnangul Mauruse keskkonnal Moodle ees eeliseid. Järgmised võimalused on Mauruses, kuid puuduvad Moodles. Üliõpilastele säilib juurdepääs õppeaine kodulehele ning seal olevatele materjalidele ka peale aine uue õpetamiskorra algust. Isegi kui koduleht on Mauruse pealehelt eemaldatud, pääseb sellele endiselt ligi kas otseviitega või läbi pealehelt avaneva Minu konto alajaotuse. Hakates uuel semestril õppeainet uuesti õpetama loon Mauruses uue kodulehe (vana säilib) ning saan sinna enda valikul vanalt kodulehelt informatsiooni kopeerida. Moodles seevastu on õppeaine uuel semestril õpetama hakkamisel esimeseks sammuks kõikide lehele registreerunud üliõpilaste kustutamine. Ka Mauruses saab õppijatelt võtta juurdepääsu õppeaine kodulehele, kuid see on õppejõu otsus, mitte keskkonnast tulenev paratamatus. Materjale saab kasutaja jaoks grupeerida mitmel erineval viisil. Selleks on kataloogide hierarhias paiknevatele. materjalidele pealisehitusena lisatud vaadete mehhanism (vt menüüd Vaated materjalidele), mis võimaldab materjale kasutaja jaoks erineval viisil grupeerida. Vaade Nädalate kaupa võimaldab välja tuua konkreetsel õppenädalal kõige olulisemad materjalid. Sisuliselt on nädala vaade selle nädala tegevuskava. Üks ja sama materjal võib olla seotud mitme nädalaga. Arendajatel on lihtne vajadusel uusi vaateid lisada. Analoogia: Kui materjalide all olev kataloogide hierarhia on nagu hierarhiline dokument dokumendipõhises andmebaasis (nt MongoDB abil loodud), siis vaated materjalidele on nagu selle dokumendi põhjal loodud (mitte-materialiseeritud) vaated. MongoDB toetab selliste vaadete loomist alates versioonist 3.4. Vaadete kasutamise eelis seisneb ka selles, et materjale ei ole vaja dubleerida. Sama materjal võib olla erinevates vaadetes. Miks see on õppija jaoks tähtis? Kui materjale on vaja täiendada/täiustada, siis õppejõud peab seda tegema ühes kohas. Sellega: tagatakse muudatuste võimalikult kiire tegemine (lugejani jõuab kõige viimane ja kõige täpsem info võimalikult kiitesti), välditakse olukorda, kus samast materjalidest on õppekeskkonna erinevates osades mittekooskõlalised koopiad. Näiteks moodulis 1 on materjal, mis ütleb, et kontrolltööks tuleb lugeda A ja B kuid moodulis 2 on materjal, mis ütleb, et kontrolltööks tuleb lugeda A, B, C ja D. NB! Samad eelised on vaadetel ja andmete dubleerimise vältimisel ka andmebaaside maailmas. Kasutajatel on võimalus teha otsing üle materjalide metaandmete, tegevuskava, teadete, helpdeski küsimuste/vastuste, viidete, tähtaegade, ülesannete (kuid mitte nende vastuste) ning vastuvõtuaegade. Näen, et otsingut kasutatakse palju. Materjalidele ja helpdeski küsimustele/vastustele saab lisada põhjaliku annotatsiooni, mida kasutaja vaikimisi ei näe, kuid mida kasutatakse eelmises punktis nimetatud otsingus. Võimalus panna välja suurel hulgal individuaalseid projektide ettenäitamise aegu (st üliõpilased ei pea tulema kaitsmise sessiooni alguseks kohale ja seal elavas järjekorras ootama). Võimalus tagada, et projekti mitmekesi tegijad, ei saaks broneerida mitu ettenäitamise aega ja välistada sellest tulenev ebaõiglus nende suhtes, kes teevad projekti üksinda. Helpdesk ning võimalus seal olevaid korduvaid küsimusi avalehele kinnitada ning küsimusi/vastuseid kõigile üliõpilastele meilile saata (sh korduvalt). Võimalus muuta avalehel näidatavate korduvate küsimuste järjekorda ning hulka. Võimalus neid küsimusi esile tõsta. Võimalus valida, millised teated saadetakse üliõpilasele meilile ja milliseid mitte (vähem ebaolulisi meile). Võimalus valida, milliste kalendri sündmuste meeldetuletused ainele registreerunute meilile saata ja millised mitte. Nii üliõpilasel kui õppejõul on võimalik saada kiiresti ülevaade, millisele teadmiste kontrollile on veel vabu kohti ja millisele mitte. See on väga oluline olukorras, kus on väljas näiteks 10 SQL kontrolltöö või vahetesti aega või 50-100 projekti näitamise aega. Üliõpilane ei saa sama tüüpi teadmiste kontrollile olla samaaegselt mitmekordselt registreeritud. See aitab tagada, et vabu kohti ei hõivataks ilmaasjata ning et neid jätkuks suuremale hulgale soovijatele. Õppejõul on võimalus saata meeldetuletus kõigile üliõpilastele, kes mingit tüüpi teadmiste kontrollile ei ole veel registreerunud (on selle unustanud või mäletavad ekslikult, et registreerisid, kuid tegelikult ei teinud seda). Kui projekt on arvestatud ja üliõpilane paneb ennast uuesti projekti näitamisele kirja või unustab varem tehtud registreerimise tühistada, siis saan päringuga selle üles leida ja operatiivselt sellise registreerimise tühistada. Vabad ettenäitamise ajad on oluline ning projektide näitamiste tippajal paljudele huvi pakkuv ressurss. Kasutaja saab sorteerida kataloogis olevaid materjale erinevate kriteeriumite alusel. Õppejõud saab kasutajate jaoks materjale ja katalooge esile tõsta nii, et tulemus tõepooles ülejäänud materjalidest ja kataloogidest visuaalselt eristub. Annan ka teada, et Mauruses ei salvestata paroole avatekstina. **Märksõnad:** Moodle, e-õpe, e-tugi,e-kursus ## Küsimus: Miks on nii, et Mauruse testikeskkond näitab, et vastamise lõpetamiseni on veel aega, kuid tegelikult on aeg täis? **Vastus:** Arvuti kell jääb maha. Siin kirjeldatakse selle mõningaid põhjuseid. ## Küsimus: Milline on vääritu käitumine antud aine kontekstis? **Vastus:** Infotehnoloogia teaduskonnas kehtib õppuri akadeemiliste tavade rikkumise ja vääritu käitumise menetlemise kord. Selles dokumendis määratakse ära, milliseid õppuri poolseid tegevusi loetakse akadeemiliselt väärituks käitumiseks ning millised on tegevused ja võimalikud ametlikud tagajärjed õppuri jaoks (noomitus, eksmatrikuleerimine) kui ta millegi sellisega hakkama saab. Palun Teilt järgnevat. Ärge jagage enda tehtud projekte teiste üliõpilastega. Ärge tehke kellegi teise eest tema tööd ära. Ärge taluge projekti rühmas liikmeid, kes teistega võrdselt töösse ei panusta. Sellega teete tegelikult neile palju halba, sest nad ei õpi midagi!!! Veel enam, Te teete kahju endale, sest teadmisteta/oskusteta lõpetajad kahjustavad tööandjate silmis kõigi diplomisaajate mainet. Kui mõni projekti kaaslane ei panusta piisavalt, siis arvake ta palun oma projektist välja ja teavitage sellest (nt õppekeskkonna kaudu) õppejõudu. ## Küsimus: Millises järjekorras ja millisel viisil soovitate aine õppimist alustada? Millele kõigepealt tähelepanu pöörata? **Vastus:** Soovitan alustada sellest, et jälgite pealehele ilmuvaid kuupäevi ja üritate täita nendega seotud ülesanded. Pealehel näidatakse lähenevaid tähtaegu. Kõiki kuupäevi saab vaadata aine tutvustuse alt. Kuluva aja ja üliõpilaste tagasisiside järgi vaadates on õppeaine kõige raskem osa iseseisava töö projekt. On väga oluline, et teeksite selle tegemiseks head valikud (üksi või kaaslastega; kui kaaslastega, siis kellega; mis viisil teha (töövihik vs. omalooming), mis teemal teha, mis vahendeid kasutada) ja kui tuleb välja, et need ei olnud ikkagi head valikud, siis korrigeeriksite neid kiiresti. See on nagu süsteemiarendusega - mida hiljem viga avastada, seda kulukam on seda parandada. Leidke palun aega, et ülesande püstitus korralikult läbi lugeda ja valida meeldiv ja jõukohane teema. Selle arvelt kokku hoitud viis minutit võib hiljem valusalt kätte maksta. Töö tegemist nõuab iseseisev töö igal juhul, aga mõni teema/tegemise viisi korral kindlasti rohkem kui mõne teise korral. Soovitan iseseisva töö kiireks ja edukaks sooritamiseks sellega iga nädal kasvõi natukenegi tegeleda. Praktikumide ajakavas on kirjas, mis võiks olla iseseisva töö osas tehtud viienda õppenädala lõpuks. Kui teete projekti rühmas, siis kasutage palun maksimaalselt paralleeltöö võimalust, et sama ajaga rohkem tehtud saada. Selles mõttes pole üldse paha mõte (pole muidugi kohustuslik), et 3-5 õppenädalal käiksid sama projekti tegijad erinevates praktikumides 3*3*1.5 tundi projekti tegemist on kindlasti parem kui 3*1.5 tundi projekti tegemist. Siis tuleb muidugi oma tunnitöö järgmisena tundi tulijale edasi anda. --- # Teema: Küsimused seoses jätkuainega ## Küsimus: Arvestades sellega, et "Andmebaasid II" aines tuleb seda projekti edasi teha, siis millised oleksid soovitused "Andmebaasid I" projekti jaoks andmebaasisüsteemi valimisel? **Vastus:** Jätkuaines "Andmebaasid II" peate Te valima ühe serveri andmebaasisüsteemi, mille põhjal oma projekti edasi teha. Süsteemid, mille hulgast valik teha, on rangelt ette antud - PostgreSQL ja Oracle (ei näe põhjust seda valikut lähitulevikus muuta, sest tegu on väga heade süsteemidega). Projektis tuleb valitud serveri andmebaasisüsteemi abil realiseerida andmebaas ning samuti realiseerida seda andmebaasi kasutav rakendus valitud allsüsteemi ühe töökoha piires. Rakenduse tegemise vahendi valik on vaba, kuid tulemust peab olema muidugi võimalik mulle demonstreerida. Eelnevast tulenevalt soovitan kevadise projekti tegemiseks kasutada kas: MS Access PostgreSQL Oracle Kui kasutate MS Accessi, siis on Teil võimalik sügisel töötada MS Accessis tehtud rakendus ümber nii, et see hakkab ODBC andmeühenduse tehnoloogia vahendusel kasutama PostgreSQL andmebaasi. Kui kasutate MS Accessi ja plaanite ka sügisel projekti rakenduse osa MS Accessis teha, siis valige kevadises projektis realiseerimiseks töökoht, mis võiks ka reaalses elus kasutada kahekihilist klient/server süsteemi, kus rakendus on kliendi arvutis. Seega ei sobi MS Accessis realiseerimiseks kõikvõimalikud "kliendi" töökohad, mis kindlasti peavad olema tehtud veebirakendusena. Kui teete oma kevadise projekti PostgreSQLis või Oracles, siis saate sügisel tehtud serveri andmebaasi edasi arendada. Kindlasti on sügisel disaini parandamisega omajagu tööd, kuid kevadel saadud kogemus võib tööd lihtsamaks muuta. Huvilistele saan juba kevadel anda juurdepääsu serverile apex.ttu.ee, kus on PostgreSQL (11) ja Oracle (12c Enterprise Edition, Release 1). Kuna seal serveris on andmebaaside disaini automaatkontrollimise vahendid, siis palun PostgreSQLis või Oracles tehtud "Andmebaasid I" projekti andmebaas sinna enne ettenäitamist üles panna. ## Küsimus: Kas aines "Andmebaasid I" tehtava projekti rühm peab jääma samaks jätkuaine "Andmebaasid II" raames? **Vastus:** Ei pea. ## Küsimus: Kas sügisel saab teha "Andmebaasid II" õppeainet, kui "Andmebaasid I" jäi kevadel tegemata? **Vastus:** Võite sügisel deklareerida "Andmebaasid II", kui "Andmebaasid I" on tegemata. Muidugi hoiatan, et üks on teisele sisuline eeldus ja kui eeldusaine pole selgeks saanud, siis on jätkuaine kindlasti selle võrra raskem. "Andmebaasid II" õppeaines arendatakse edasi "Andmebaasid I" projekti. Pakun välja kolm "Andmebaasid I" projekti, mille hulgast saavad üliõpilased, kellel on eeldusaine tegemata, valida projekti, mida sügisel edasi arendada. Nii saavad üliõpilased "Andmebaasid II" projekti tegemisega kohe septembri alguses pihta hakata. Teine võimalus on, et liitute sügiseks mõne rühmaga, kus "Andmebaasid I" projekt on tehtud. Nii nagu kevadel on ka sügiseses projektis lubatud osalejate arv 1-3 üliõpilast. "Andmebaasid I" projekti sügisel kaitsta ei saa. Seda saab teha järgmisel kevadel. Siis saate ka teenida varase esitamisega seotud soodustuse (suur kordaja väärtus). Selles mõttes pole paha mõte sügisel "Andmebaasid I" projekt ikkagi ära teha, et siis kohe järgmise aasta veebruaris/märtsis see ette näidata. Te ei pea valima uut "Andmebaasid I" projekti teemat. Piirang millega tuleb arvestada "Andmebaasid II" projekti teema valimisel on, et eelnevalt kirjeldatud viisidel projekti tehes ei tohi "Andmebaasid I" ja "Andmebaasid II" projekti teemad kokku langeda. Sellel semestril kogutud lisapunktid "Andmebaasid I" uuesti deklareerides arvesse ei lähe, kuid saate neid koos ülejäänud üliõpilastega järgmisel kevadel uuesti koguda. SQL kontrolltöö tuleb õppeainet uuesti deklareerides uuesti teha ning lävend ületada. Kui saite projekti kevadel tehtud, siis saate sellega sügisel jätkata. Õppeaine uuesti deklareerimisel ei ole vaja projekti uuesti teha. Projekti kordaja leitakse uuesti deklareerimise semestril kehtivate reeglite kohaselt. ## Küsimus: Kui nt üks liige peab ajateenistuse tõttu aasta vahele jätma, kas siis seda projekti võivad erinevad rühma liikmed erinevatel aastatel edasi teha "Andmebaasid II" aine raames, st kaks liiget selle aasta sügisel ja kolmas liige eraldi üksi järgmise aasta sügisel? Kas selline olukord on üldse võimalik või tuleks siis "Andmebaasid I" projekt üksi teha? **Vastus:** Kõigepealt tuleb muidugi öelda, et me keegi ei tea täpselt ette, mis juhtub mitme aasta pärast ning elu võib igasugustes nõuetes ja plaanides teha korrektiive. Järgnev on minu käesoleva hetke vaade ning praegu pole mul plaani selles vaates muudatusi teha. Jätkuaines "Andmebaasid II" peate Te valima ühe serveri andmebaasisüsteemi, mille põhjal oma projekti edasi teha. Süsteemid, mille hulgast valik teha, on rangelt ette antud - PostgreSQL ja Oracle (ei näe põhjust seda valikut lähitulevikus muuta, sest tegu on väga heade süsteemidega). Projektis tuleb valitud serveri andmebaasisüsteemi abil realiseerida andmebaas ning samuti realiseerida seda andmebaasi kasutav rakendus valitud allsüsteemi ühe töökoha piires. Rakenduse tegemise vahendi valik on vaba, kuid tulemust peab olema muidugi võimalik mulle demonstreerida. Ka sügisese aine projekti saab teha 1-3 üliõpilast. Nagu kevadel, ei sõltu ka sügisese aine projekti maht/nõuded/tähtajad tegijate arvust. Millised oleksid Teie kaaslase valikud järgmise aasta sügisel, eeldusel, et teete "Andmebaasid I" projekti mitmekesi? 1. Kaaslane teeb edasi kevadel alustatud ja arvestuse saanud projekti, kuid kasutab sügisese projekti tegemiseks teist andmebaasisüsteemi kui Teie sügisel kasutasite. Toon näite. Oletame, et töö teemaks on "e-poe infosüsteemi kaupade arvestus". Sellel sügisel realiseerib üks grupp selle kasutades Oracle andmebaasisüsteemi. Järgmisel sügisel realiseerib teine grupp selle kasutades PostgreSQL andmebaasisüsteemi. Vahendite valikus võiks muidugi omavahel aegsasti kokku leppida. 2. Kaaslane leiab järgmisel sügisel projekti, millesse ta läheb teiseks või kolmandaks liikmeks. 3. Kaaslane valib projekti tegemiseks ühe selleks otstarbeks "Andmebaasid II" kodulehele välja pandud (mõnede teiste üliõpilaste tehtud) "Andmebaasid I" projekti. --- # Teema: Loengud ## Küsimus: Kus on kodulehel loengute lindistused? **Vastus:** Kataloogi Teooria testideks (vahetestid, eksam) valmistumine alguses. OTSEVIIDE Echo lindistuste lehele. Seal pole loengute annotatsioone. **Märksõnad:** loengud, loeng, echo, lindistus, lindistused, salvestus, salvestused, video, videod ## Küsimus: Millele oleks eriti oluline andmebaaside õppimisel tähelepanu pöörata? **Vastus:** Kui maailmas on üldse midagi kindlat, siis see, et kõik on pidevas muutumises. Kui loote infosüsteemi ja selle andmebaasi, siis tuleb neid ajaga kaasaskäimiseks pidevalt kohandada. Hoolduskulud võivad lõpuks moodustada kuni 80% süsteemi kogukuludest. Selles kontekstis on väga oluline andmebaasi hallatavus. Artiklis: Riaz, M., Tempero, E., Sulayman, M., & Mendes, E. (2013). Maintainability Predictors For Relational Database-Driven Software Applications: Extended Results From A Survey. International Journal of Software Engineering and Knowledge Engineering, 23(04), 507-522. esitatakse 40 tarkvaraarenduse spetsialisti hulgas läbiviidud küsitluse tulemused. Selle küsitlusega sooviti teada saada, millised tegevused aitavad parandada SQL-andmebaasi põhiste andmebaasirakenduste hallatavust. Vastusele lisatud failis tuuakse välja kõik sellised aspektid, millel on küsitlusele vastanute arvates mõõdukas või suur positiivne mõju hallatavusele. See fail esitab artiklis esitatud diagrammi. ## Küsimus: Mul ei õnnestu vaadata loengute lindistusi, sest saan videote vaatamisel veateate. ERROR:Unable to process language file located at: language/ru.xml The file is either missing or corrupt. **Vastus:** Ilmselt on probleem selles, et veebilehitseja on vene keelne. Lahendus oleks kasutada inglise keelset veebilehitseja. Ehk siis peaksite ära muutma keele sätted. GoogleChromes saaks korda kui võtta Настройка и управление Google Chrome Настройки ->Показать дополнительные настройки -> Языки ->Настройка языков и способов ввода ja võtate kasutusse inglise keele (англиский (США)). ## Küsimus: Mul on veidi vaba aega ja tahaks kuulata audio- või videoloenguid. Kas oskate soovitada midagi andmebaaside kohta? **Vastus:** Kursus andmebaasisüsteemide kohta Carnegie Mellon ülikoolis. "Andmebaasid I" kursuse temaatika alla lähevad esimesed viis loengut. https://www.youtube.com/playlist?list=PLSE8ODhjZXjYutVzTeAds8xUt1rcmyT7x 01 Course introduction & Relational Data Model (Fall 2017) - täiendus teemale 2 02 Relational Algebra (Fall 2017) - täiendus teemale 3 03 Advanced SQL (Fall 2017) - täiendus teemadele 4, 5 04 Functional Dependencies (Fall 2017) - täiendus teemale 9 05 Normal Forms (Fall 2017) - täiendus teemale 9 Carnegie Mellon ülikoolis on andmebaaside teadusgrupp. Nende Youtube lehel leidub päris palju loenguid tehnilisemate (edasijõudnute) teemade kohta. Osasid nendest teemadest käsitleb ka sügisene "Andmebaasid II" õppeaine. https://www.youtube.com/channel/UCHnBsf2rH-K7pn09rb3qvkA Relatsioonilised andmebaasid: https://www.youtube.com/watch?v=qx0F7TfA8CI https://www.youtube.com/watch?v=kSZX3fBgg1A&index=5&list=PLWIxuiyTh_yY3w26sJMbdTDXuEYJp-GxT (puuduvate andmetega toimetulek. SQLis on selleks üks väga veider omamoodi elukas NULL - sellest ka loengu nimi) Esimene on küll väga lühike video, kuid lektoriks mõlemal on C.J.Date, kellel minu arvates on väga hea selgitamisoskus. NoSQL süsteemid ja suurandmed: https://www.youtube.com/watch?v=qI_g07C_Q5I (hea kõrgtaseme ülevaade; lektorist) https://www.youtube.com/watch?v=_7GLkbgc7WE (lektorist) --- # Teema: Vahendid - CASE ## Küsimus: Kas iseseisva töö projektis võib kasutada mõnda muud CASE vahendit kui Enterprise Architect (EA) või Rational Rose (RR)? **Vastus:** Keelatud see ei ole. Kuid palun arvestage järgnevaga. Kui Te ei kasuta EA või RR, siis Te ei saa kasutada töövihiku projekti puhul eelnevalt valmistehtud diagramme ja peate need nullist käsitsi joonistama. Kui Te ei kasuta mõnda andmete modelleerimisele spetsialiseerunud CASE vahendit (näiteks kasutate ArgoUMLi või Cacood), siis Te ei saa kasutada kontseptuaalsest andmemudelist andmebaasi disaini mudeli genereerimise võimalust ja peate andmebaasi disaini mudeli looma nullist käsitsi. Kui Te ei kasuta mõnda andmete modelleerimisele spetsialiseerunud CASE vahendit (näiteks kasutate ArgoUMLi või Cacood), siis Te ei saa kasutada andmebaasi disaini mudelist SQL koodi genereerimise võimalust ja peate SQL koodi tabelite loomiseks kirjutama nullist käsitsi. ## Küsimus: Kuidas käivitada Enterprise Architecti mudeliteisenduste täiendust arvutiklassides? **Vastus:** Kuna laienduse autor ei teadnud installeerimise programmi loomisel kõiki tsentraalse installeerimise eripärasid, siis on selle laienduse korrektseks töölehakkamiseks vaja arvutiklassi arvutis üks kord käivitada reg.reg fail, mis on kataloogis Tarkvara saamine ja kasutamine/CASE: Enterprise Architect (ver 11 baasil) õppevideod/EA mudeliteisenduse täiendus. Seda saavad üliõpilased oma konto alt ise teha. Pärast seda, peale EA taaskäivitamist, hakkab laiendus tööle. Kui arvutis on see fail korra käivitatud, siis rohkem pole seda vaja enam teha. Isiklikule arvutile installeerides seda pole vaja teha - peaks koheselt töötama, kui olete juhendis olevat installeerimise protseduuri järginud. Mingil põhjusel funktsioneerib see mudeliteisendus vaid osades arvutiklassi arvutites. Seega, kui see ühes ei tööta proovige teist. ## Küsimus: Kuidas on võimalik Rational Rose'ist eksportida mõni diagramm bmp/jpg/gif/png kujul? **Vastus:** Näiteks copy=>paste diagramm programmi "Paint" ja seejärel salvestate faili Teile sobival kujul. Võib ka kasutada mõnda ekraanipiirkondadest tehtud pildi salvestamiseks mõeldud programmi - nt MWSnap http://www.snapfiles.com/get/mwsnap.html ## Küsimus: Kuidas parandada Enterprise Architect CASE vahendis loodud andmebaasi disaini mudelis riknenud tabelite vahelist seost? **Vastus:** Vaadake palun lisatud faili. ## Küsimus: Kumba CASE vahendit eelistada projekti tegemiseks - kas Enterprise Architect (EA) või Rational Rose (RR)? **Vastus:** Mõlemad vahendid on projekti tegemiseks sobivad. Järgnevalt tuuakse esile kummagi tugevad küljed võrreldes teisega. EA eelised RR ees Palju uuem, ettevõtetes rohkem kasutusel Installeerimine ja litsentsi hankimine lihtsam Võimalused luua palju rohkem erinevat tüüpi mudeleid (kuid selles aines ei lähe neid vaja) Võimalik programmeerida juurde laiendusi (ühte sellist hakkame kasutama) (vaadake palun Tarkvara saamine ja kasutamine/CASE: Enterprise Architect (ver 11) videod/EA mudeliteisenduse täiendus ja proovige installeerida) Andmebaasi disaini mudeli saab luua spetsiifiliselt PostgreSQL või MS Accessi jaoks RR eelised EA ees Litsentsi ei pea käima iga 30 päeva tagant värskendamas Vähem funktsionaalsust (selleks aineks kõik vajalik olemas), kuid tänu sellele ka lihtsam ja kiiremini kasutatav kasutajaliides Kaasa tulev genereerimismoodul, mis tekitab kontseptuaalsest andmemudelist füüsilise SQL-andmebaasi disaini mudeli, on parem (disaineril on hiljem vaja teha vähem käsitsi muudatusi) Väga palju lihtsam ja kiirem on muuta SQL-andmebaasi disaini kirjeldustes välisvõtmeid - tegevus, mida on vaja päris palju teha Genereeritav SQL kood on lihtsamini käivitataval ja loetaval kujul - koodi tuleb vähem käsitsi muuta Mõlema vahendi nõrkused Fail võib rikneda, mis tähendab, et eelnev töö läheb kaotsi SQL lausete generaator teeb vigu Ükskõik kumma vahendi kasuks otsustage - laadige palun alla kõige viimane pakutav versioon. ## Küsimus: Ma ei suuda Enterprise Architect (EA) vahendi menüüde rägastikus orienteeruda. Millised on kõige olulisemad menüüpunktid antud aine jaoks? **Vastus:** Järgnevalt on nimetatud EA12 näitel mõnede oluliste funktsioonide asukoht menüüsüsteemis. Tööriistakast, kust saab valida mudelisse lisamiseks uusi elemente. Kui olete selle kinni pannud, siis saate uuesti avada: Diagram=>Toolbox (kiirkorraldus ALT+5) Projekti elementide hierarhia. Kui olete selle kinni pannud, siis saate uuesti avada: View=>Project Browser (kiirkorraldus ALT+0) Andmebaasi disaini mudeli loomiseks mõeldud täiustatud teisenduse kasutusele võtmine: Project=>Data Management=>Import Reference Data Enne andmebaasi disaini mudeli teisenduse abil loomist tuleb määrata, millise andmebaasisüsteemi jaoks disaini mudel luuakse: Project=>Settings=>Database Datatypes Avanenud aknas tuleb soovitud andmebaasisüsteemi juures märkida Set as Default Mudeliteisendus kontseptuaalsest andmemudelist andmebaasi disaini mudeliks: Package=>Model Transformation (MDA)=>Transform Current Package SQL koodi genereerimine: Package=>Database engineering=>Generate package DDL ## Küsimus: Meil tekkis andmebaasi füüsisilise disaini mudeli genereerimisega probleem: veerg nimega kood esineb mitmes kohas. Milles võib olla probleem? **Vastus:** See probleem tekib Enterprise Architecti (EA) täiendatud mudeliteisenduse kasutamise korral. Tekib, sest ka EA täiendatud mudeliteisendus pole paraku ideaalne. Konkreetne põhjus on selles, et kontseptuaalses andmemudelis on olemitüüp Klassifikaator, millel on atribuut kood. Klassifikaatoril on palju alamtüüpe (Riik, Amet, Töötaja_seisundi_liik jne) millest igaühe põhjal luuakse eraldi tabel. Kõikidesse nendesse tekib teisenduse tulemusena primaarvõtme veerg kood. See veeru nimi tuleb ära muuta nii klassifikaatorite tabelites kui ka tabelites, kuhu koodid lähevad välisvõtmeks. Näiteks kui tabelis Amet on veerg kood, siis selle uus nimi võiks olla amet_kood. Kui tabelis Töötaja on välisvõtme veerg kood, milles olevad andmed viitavad ridadele tabelis Amet, siis ka sellele veerule tuleb anda nimi amet_kood. Järgnevalt esitan soovitusliku parandamise algoritmi. Kõigepealt terminoloogiast: [Amet]-1--------0..*-[Töötaja] Välisvõti on tabelis Töötaja Amet - primaarne tabel, antud juhul klassifikaatori tabel Töötaja - sõltuv tabel 1. Juhul kui sõltuvas tabelis on täpselt üks välisvõtme veerg nimega kood (näiteks töövihiku kasutamise korral Klient). Muuda primaarvõtme veeru nime klassifikaatori tabelis (näiteks tabelis Kliendi_seisundi_liik: kood=> kliendi_seisundi_liik_kood). Muuda vastavat välisvõtme veeru nime sõltuvas tabelis (antud juhul tabelis Klient: kood=> kliendi_seisundi_liik_kood). 2. Juhul kui sõltuvas tabelis on rohkem kui üks välisvõtme veerg nimega kood (näiteks töövihiku kasutamise korral Töötaja). Kustuta sõltuvast tabelist kõik välisvõtme kitsendused, mis viitavad klassifikaatorite tabelitele (näiteks kaks kitsendust tabelist Töötaja). Muuda primaarvõtme veeru nime kõikides asjassepuutuvates klassifikaatori tabelites (näiteks tabelis Amet: kood=> amet_kood; tabelis Töötaja_seisundi_liik: kood=> töötaja_seisundi_liik_kood). Muuda vastavate välisvõtme veergude nimesid sõltuvas tabelis (antud juhul tabelis Töötaja: kood=> amet_kood; kood=> töötaja_seisundi_liik_kood ). Loo välisvõtme kitsendused mudelis käsitsi uuesti. ## Küsimus: Mida teha, kui arvutiklassi arvutis küsib Enterprise Architect (EA) avamisel võtit ja ei ole nõus ilma selleta käivituma? **Vastus:** Valige: Control Panel => System and Security => Configuration Manager => Configurations => evaluate CB WRK Enterprise Achitect Key Seejärel avage EA uuesti. ## Küsimus: Mul registrite analüüsi mudel loodud. Pärast andmebaasi disaini mudeli nagu videos õppeaine kodulehel. Kokku kõik on korras, aga tekib tõsine probleem. CASE vahend ehitab seosed Kliendi, Ameti, Treeningu ja Töötaja seisundi liigi vahel. Aga ei peaks ja ma ei taha. Mida teha? **Vastus:** Arvan, et põhjuseks on analüüsi mudelisse kogemata tehtud ja korralikult kustutamata jäänud valed seosed. Konkreetsel juhul võtke palun lahti analüüsi mudelis klientide registri olemi-suhte diagramm ja lohistage sellele mudelist olemitüübid (klassid) Amet, Töötaja_seisundi_liik ja Treening. Kui selle tulemusel tekivad diagrammile ka seosed Kliendiga, siis kustutage need seosed. Seose mudelist kustutamiseks tehke: Enterprise Architect (EA) CASE vahendis seos aktiivseks; valige parema hiire klahvi alt hüpikmenüüst "Delete connector" või vajutage Delete klahvile; valige "Delete the connector from the model". Rational Rose (RR) CASE vahendis seos aktiivseks; valige parema hiire klahvi alt hüpikmenüüst "Edit" => "Delete from Model". Seejärel genereerige andmebaasi disaini mudel uuesti. Samuti eemaldage klientide registri olemi-suhte diagrammilt Amet, Töötaja_seisundi_liik ja Treening. Kuna kasutate analüüsi mudelit uue tehise (disaini mudeli) genereerimiseks, siis on väga oluline, et analüüsi mudelisse ei jääks "prügi". ## Küsimus: Rationa Rose-il pole menüüs punkti Data Modeler => New => Database, millega genereerida andmebaasi füüsilise disaini mudelit. Mis on valesti? **Vastus:** Selleks, et saaksite kasutada Rational Rose'i (2007) Data Modeleri, peab arvutis eelnevalt olema installeeritud .NET Framework redistributable (ver. 1.1) või kõrgem Installige enne .NET ja siis Rational. --- # Teema: Vahendid - MS Access ## Küsimus: Kas ja millised on MS Accessi eelised SQLi õppimisel? **Vastus:** SQL andmekäitluskeele lausete (SELECT, INSERT, UPDATE, DELETE) koostamiseks saab kasutada graafilist kasutajaliidest - Query Designer. See graafiline kasutajaliides realiseerib visuaalse andmebaasikeele Query by Example. Võimalik on tõlkida lauseid ühest keelest (SQL ja Query by Example) teise. Siit saab vaadata videoid Query by Example abil päringute kooostamisest. Tabelites on läbi graafilise kasutajaliidese lihtne teha andmemuudatusi. Nii saab kergelt teha andmemuudatusi, kontrollimaks, et koostatud SQL laused annavad igas olukorras oodatud tulemuse. MS Accessi SQLi mägimurrak ei ole nii suurte võimalustega kui võimekamatel SQL-andmebaasisüsteemidel, kuid kõik põhiline on olemas. Näiteks lendama õppimisel ei alustata praktiseerimist ka mitte kohe reisi- või sõjalennukist, vaid kõigepealt saavutatakse põhjendatud enesekindlus väikesel lennukil ja sellega sillutatakse teed aina suuremate lennukitega lendamiseks. ## Küsimus: Kuidas jõustada MS Accessis tabeliga seotud kitsendus, et elukoht ei tohi olla ainult numbritest koosnev string? **Vastus:** MS Access ei paku täielikku toetust regulaaravaldiste kasutamisele, kuid selle LIKE predikaadi mustrite koostamise võimalusi on laiendatud regulaaravaldistest tuntud võimalustega. Nimetatud kitsenduse jõustamiseks on abi, kui see kitsendus ümbersõnastada. Kui elukoha stringis on vähemalt üks numbrimärk, siis peab selles olema ka mõni selline märk, mis ei ole numbrimärk. Teatavasti võib binaarset loogilist operatsiooni implikatsioon kasutava avaldise P=>Q kirjutada teisendusreeglite alusel ümber samaväärseks avaldiseks: NOT (P) OR Q. Sellise avaldise saab aga juba tabelitaseme valideerimisreeglina kirja panna. Antud juhul P="Kui elukoha stringis on vähemalt üks numbrimärk" Q="peab selles olema ka mõni selline märk, mis ei ole numbrimärk" Seega seon MS Accessis veeruga elukoht valideerimisreegli: Not ([elukoht] ALike '%[0-9]%') Or ([elukoht] ALike '%[!0-9]%') [!0-9] ütleb mustris, et leiduma peab vähemalt üks märk, mis ei kuulu numbrimärkide hulka. Veel üks võimalus on defineerida MS Accessis veeruga elukoht seotud valideerimisreegel: IsNumeric([elukoht])=False Võrdluseks, PostgreSQL ja Oracle võimaldavad regulaaravaldiste kasutamist: PostgreSQLis tuleks tabeliga Isik siduda CHECK kitsendus: CHECK (elukoht!~'^[[:digit:]]*$') Oracles tuleks tabeliga Isik siduda CHECK kitsendus: CHECK(NOT REGEXP_LIKE(elukoht,'^[[:digit:]]*$')) Need kitsendused kontrollivad, et elukoht ei vastaks mustrile, mille kohaselt sisaldab see ainult numbrimärke. ## Küsimus: Sain Tallinna Tehnikaülikooli tarkvara jaotamise keskkonna kaudu ligipääsu Microsoft Imagine keskkonnale. Juhiseid jälgides laadisin sealt alla MS Access'i. Käivitamisel küsitakse ikkagi kas Product Key'd või tellimusega seostatud emaili (eeldan, et siis @taltech.ee aadressi). Emaili sisestamisel ütleb, et antud email ei ole seostatud selle tellimusega. **Vastus:** Imagine annab ka toote võtme kaasa. Kui ununes see võtta, siis mine oma kontoga Imagine keskkonda, tee klikk Your Account/Orders peal ja siis avaneb seal kõik, mille oled endale alla laadinud. Toote nimetusel klikkides on seal punasega alati kaasas ka sinu personaalne toote võti. ## Küsimus: Teen MS Accessis currency veeru põhjal näiteks summeerimise või keskmise leidmise päringu. Tulemuses ei ole valuuta tähiseks Eur. Mida teha? **Vastus:** Põhjus on Windowsi regionaalsetes sätetes. Tähis võetakse sealt ning järelikult peitub ka tulemuse põhjus seal. ## Küsimus: Võtsime lahti Accessi faili, mida sai kunagi arvutiklassis täiendatud, ning nüüd viskab Error 2950-it (Action name: Set property). Milles on probleem ja kuidas seda lahendada? **Vastus:** Avasite 32-bitises MS Accessis tehtud faili 64-bitises MS Accessis. Kui seda teha, siis võib olla vaja VBA koodi parandada. --- # Teema: Vahendid - muu ## Küsimus: Kas "Andmebaasid I" iseseisvas töös võib rakenduse prototüübi tegemisel kasutada mõnda ORM (Object-Relational Mappers, objekt-relatsioonvastenduse) vahendit. **Vastus:** See pole keelatud, eeldusel, et loodud rakendus kasutab andmebaasi läbi avaliku andmebaasi liidese e virtuaalse andmete kihi. Teiste sõnadega peaks rakendus lugema andmeid vaadetest (näiteks Djangos on see võimalik) ning muutma andmeid kasutades andmebaasiserveris talletatud rutiine (näiteks Djangos on see võimalik). Andmete kitsendustele vastavuse kontroll peab toimuma andmebaasi tasemel (kasutades deklaratiivseid kitsendusi ja reegleid), mitte rakenduse tasemel nagu ORM vahendid üldiselt propageerivad. Rakenduse tasemele andmete kontrolli probleemiks on: üleliigsed päringud andmebaasi põhjal, mis kokkuvõttes aeglustavad ORM abil loodud programmi tööd, kontrollide ebapiisavus selles mõttes, et juhul kui samu andmeid kasutab samaaegselt mitu kasutajat, siis võivad need kontrollid lasta läbi reeglitele mittevastavaid andmeid. ORM vahendi(te) probleemidele osutab see uuring 67 avatud lähtekoodiga tarkvara põhjal. Siin on veel üks suure hulga põhjendustega selgitus, miks üks arendaja loobus ORMi kasutamisest ning eelistab ise SQL lauseid kirjutada. Siin on arutelu, kus kõrvutatakse ORMi ja andmebaasiserveris talletatud rutiinidest, vaadetest ja hetktõmmistest koosneva virtuaalse andmete kihi kasutamist. Kuigi eelnev näitab, et ORMi ja andmebaasi avalikku liidest saab koos kasutada, siis praktikas on need alternatiivid. Alternatiiv 1: Rakendus kasutab andmebaasi läbi ORMi. ORM vahend genereerib ise SQL koodi, millega loetakse ja muudetakse andmebaasis andmeid otse baastabelites. Selleks, et piirata kasutajate juurdepääsu teatud tingimustega tabeli ridadele, pakuvad andmebaasisüsteemid vahendeid nagu turvapoliitikad (PostgreSQL) või peeneteralised juurdepääsupiirangud. Alternatiiv 2: Rakendus kasutab andmebaasi läbi avaliku andmebaasi liidese, mille realiseerimiseks kasutatakse andmebaasis loodud vaateid, rutiine ja materialiseeritud vaateid e hetktõmmiseid. Rakendus ei pöördu otse baastabelite poole, vaid kasutab nendes olevaid andmeid läbi avaliku liidese. ## Küsimus: Kas projekti dokumenti võib teha Githubi Wikis, Google Docs'is või muus sarnases rühmatööd toetavas keskkonnas? **Vastus:** Miks mitte, kuid soovitan ikkagi kaaluda MS Wordi kasutamist, sest seal on mudeli koostajale väga kasulik funktsionaalsus - Split screen. See funktsionaalsus lihtsustab projekti erinevate osade kooskõla kontrollimist. Ükskõik mis vahendit Te dokumendi loomiseks kasutate, siis õppejõud soovib hindamiseks projekti dokumenti sellises formaadis, et seda saab MS Word programmis avada ja "Split screen" abil vaadata. Projekti pealkirjade struktuur PEAB täpselt vastama mallis ette antud struktuurile. See on vajalik, et oleks võimalik lühikese ajaga suur hulk projekte kiiresti läbi vaadata ja sisukat tagasisidet anda. ## Küsimus: Miks õppida SQLi? **Vastus:** SQLis kui keeles võiks kahtlemata olla palju asju teistmoodi ja paremini (vt "Andmebaasid I" teema 6 materjale). Arendajad kiristavad SQLi peale hambaid ja kiruvad, kuid ikkagi kasutavad seda. Miks nad seda teevad? 2019. aasta jaanuari seisuga on kümne kõige populaarsema andmebaasisüsteemi hulgas seitsmes kasutusel SQL. Sellest tulenevalt on lisaks arendajatele SQL hädavajalik keel andmeteadlastele. Nad peavad kuidagi enda uurimismaterjalile e andmetele ligi pääsema ja sageli on selleks vaja kasutada SQLi. Näiteks üleeuroopalisel suurandmete töötlemise maratonil 2017. aastal kolmanda koha saanud meeskonna liige kommenteeris, et sisendandmed olid SQL-andmebaasis, hierarhiatena, Adjacency List (külgnevusnimistu) mudeli alusel. Ta ütles SQLi kasutamise kohta: "asi kisub vist hoopis sql hackathoniks. /.../ eeltöötlus ja andmebaasides ringirändamine ja avastamine on 80-90% ajast." Osalejatele anti vahendite valik vabaks. Eesti meeskond otsustas esmajoones kasutada PostgreSQLi. See tähendab, et andmed laaditi PostgreSQLi tabelitesse ja otsiti vastuseid küsimustele kasutades SQL päringuid. Ainult siis, kui PostgreSQL jäi töökiiruse mõttes hätta ("5+ JOINiga päringutel kulus tulemusteni üle 15 minuti (võtmeveergude indekseerimised jm. "hügieenilised" tegevused olid eelnevalt tehtud)"), laaditi andmed päringu tegemiseks Hadoop klastrisse. Ka seal läks vaja SQLi oskust, sest läbi Hive pakutava liidese saab klastris olevate andmete poole pöörduda kasutades SQL-laadset keelt HiveQL. PostgreSQL päringuid polnud vaja palju muuta, kuid töökiiru paranes kuni 10 korda. Samas kommenteeris üks meeskonna liikmetest, et "Kui Hackathlonil poleks ajapiirangut olnud, siis selle andmestiku puhul oleks saanud ka ilma Hiveta." Samuti kasutati hajusarvutuste platvormi Spark, kuid ka selle kasutamiseks on kasulik SQLi tunda. Arvatavasti olete kuulnud NoSQL (kes interpreteerib seda kui "No to SQL", kes aga "Not only SQL") süsteemidest. Need süsteemid sõitsid 2010ndatel suure hurraaga turule, kui järjekordsed printsid valgel hobusel, mis pidid andmebaaside maailma kõigist hädadest päästma. Eriti alguses vastandusid need (nagu nimigi viitab) kõvasti SQLile. Nüüdseks aga on üha rohkemates sellistes süsteemides kasutusele võetud kõrgtaseme (deklaratiivne) päringukeel, mis kangesti meenutab SQLi. Irvhambad on hakanud NoSQLi kutsuma tänu sellele kui "Not yet SQL". Nii et kui "päris" SQLi oskate, siis pole keeruline ka neid uusi keeli suhu saada. Näited: CQL (Cassandra Query Language, andmebaasikeel veergude perekondade põhises andmebaasisüsteemis Cassandra). N1QL (päringukeel dokumendipõhises andmebaasisüsteemis Couchbase). SPARQL (standardiseeritud päringukeel andmebaasisüsteemidele, mis põhinevad RDF (Resource Description Framework, ressursside kirjeldamise karkass) andmemudelil). PGQL (katse pakkuda graafipõhistele süsteemidele välja ühtlustatud SQLi-laadset päringukeelt). Cypher (päringukeel graafipõhises andmebaasisüsteemis Neo4J). ## Küsimus: Mul on arvutiks Mac / minu arvutil on Linux operatsioonisüsteem. Millist tarkvara soovitate kasutada? **Vastus:** Kuna projekti tegemisel on võimalik kasutada töövihiku lahendust, kus suur osa diagrammidest on ette valmis tehtud, siis nende täiendamine on ajaliselt täiesti võimalik praktikumides. Seega on võimalik hakkama saada nii, et oma arvutis ei olegi CASE vahendit. Kui tekib vajadus CASE vahendi järgi (nt teete projekti vabal teemal), siis soovitan DB MAIN tarkvara, mis on loodud just andmekesksete süsteemide arendamist silmas pidades. Seda pakutakse nii Windowsile, Macile kui Linuxile. Siit võite vaadata ühte lõputööks teisenenud andmebaasi projekti, kus sama infosüsteemide projekteerimise ülesannet üritati lahendada nii Enterpise Architecti kui DB MAIN abil. DB MAIN puuduseks on, et seal ei saa luua seisundidiagramme e olekumasina mudeleid. See on suur puudus, sest seisundidiagramm võimaldab modelleerida elutsükleid ja need on oluliseks sisendiks kasutusjuhtude leidmisele. Seisundidiagrammi joonistamiseks võite kasutada mõnda veebipõhist diagrammide joonistamise vahendit nagu Cacoo või Creately. Andmete modelleerimist toetava CASE vahendi eelis on, et see suudab genereerida andmemudelist SQL koodi ja nii oluliselt suurendada Teie töö kvaliteeti ja tulemuslikkust. Ülikooli pakutav Enterprise Architect (EA) 12 on mõeldud Windowsile. EA14 näitel näen, et seda saab installeerida ka Maci, kuid see nõuab üsna palju lisatööd. Litsentsi taotlemine (bat failiga) on mõeldud just EA12 jaoks, st seda ei saa kasutada näiteks EA kodulehelt allalaaditud kõige viimasele EA versioonile litsentsi taotlemiseks. Maci/Linuxi kasutajad saaksid enda arvutis EA tööle nii, et panevad seal paralleelselt tööle Windowsi (Internetist leiab juhiseid; panin siia stiilinäiteks ühe juhise Maci ja ühe Linuxi kohta). Windowsi saate Azure Dev Tools for Teaching keskkonnast (sealtsamast, kus saaksite MS Accessi). Kuidas sellele keskkonnale juurdepääs saada on kirjas kataloogis Tarkvara saamine ja kasutamine dokumendis Kuidas saada enda arvutisse MS Access (2016)? Veel alternatiive: Installeerida EA12 oma Windowsi lauaarvutisse (tööl või kodus) ning taotleda litsentsi üle TORU VPNi. Koolis saab EAd kasutada arvutiklassides. Kui teete projekti mitmekesi, siis saate ehk tööd jaotada viisil, et Teie ei pea väljaspool praktikume EA faili kasutama. SQLi kodus harjutamiseks soovitan kasutada avatud lähtekoodiga LibreOffice kontoripaketi koosseisus olevat LibreOffice Base, mille allalaadimise koht on siin. https://maurus.ttu.ee/346 Andmebaasid 1 => Tarkvara juhendid ja koodinäited => Täiendavad andmebaasisüsteemid Sealt leiate enamiku harjutamise andmebaasidest LibreOffice Base jaoks ning ka pisikese MS Access ja LibreOffice Base võrdluse. Harjutustes kohapeal soovitan kasutada arvutiklassi arvutit ja MS Accessi, et seda keskkonda ka tundma õppida. SQL töö on arvutiklassi arvutis ja MS Accessis, et kõigil oleksid võrdsed tingimused ja võimalused. Iseseisva töö projekti ei pea tegema MS Accessis.