Täna on teisipäev 01.07.2025.
Teated ja oluline info

Aine uus kodulehekülg koos aktuaalse informatsiooniga asub http://maurus.ttu.ee/366
Lisainfot leiab Martin Kleppmanni ajaveebist.
Jätkata avatud lähtekoodiga veebipõhise metaandmetega juhitavate veebirakenduste kiirprogrammeerimise vahendi pgApex arendamist. Selle süsteemi esimese versiooni loomisega lõppenud magistritöös on arendusvaates kirjas suur hulk täiendusvajadusi. pgApexit tuleb ise katsetada, võrrelda Oracle APEXiga ja teha kindlaks, kas leidub veel täiendusvõimalusi. Järgmiseks ülesandeks on väljalaske planeerimine (release planning) – milline funktsionaalsus lõputöö tulemusena realiseerida. Tuleb valida meetod selle otsustamiseks ja seda rakendada. Kõik täiendused tuleb mudelite abil projekteerida ja ka tarkvaras realiseerida ning testida. Töö peab ka kirjeldama täienduste tegemise protsessi. Siin on pgApexi serverisse üles laetud arenduskeskkond ning siin on selle vahendi MIT litsentsiga kaitstud lähtekood. Töö tulemus peab olema samuti avatud lähtekoodiga, mida kaitseb MIT litsents. Projekt peab olema GitHubis. Töö kõrvaltegevusena tuleb teha statistikat andmebaasi skeemimuudatuste ja nendest tingitud rakenduse lähtekoodi muudatuste kohta.
Niitra (2017) kirjutab metsaregistrist toimunud andmelekkest. Väidetavalt luges üks artikli kirjutamise ajaks töölt lahkunud töötaja süstemaatiliselt infot isikute (nimed, sünniajad, telefoninumbrid) ja nende metsakinnistute kohta. Peale töölt lahkumist asus ta tööle erafirma metsakorraldajana. Lekkinud info alusel hakkasid metsaomanikud saama massiliselt telefonikõnesid, millega üritati neid kallutada müüma raieõigust turuhinnast madalamalt. Vahendusfirmasid huvitab põhiliselt raieõigus. Seda müüakse suure vaheltkasuga edasi metsa ülestöötamisega tegelevatele ettevõtetele. "Samad firmad tegelevad ka kinnistute vahendamisega rahvusvahelistele kontsernidele, Eesti kohalikele suurmaaomanikele ja välismaistele pensionifondidele. Mets saadakse inimestelt kätte muuhulgas neid juriidiliselt korrektsel moel pettes, kasutades selleks väga erinevaid võtteid." (Niitra, 2017)
Olgu öeldud, et avaliku teabe seadus keelab riigi infosüsteemis asutada ühtede ja samade andmete kogumiseks eraldi andmekogusid. Isikuandmete kogumise koht on rahvastikuregister. Metsaregistrisse jõuavad isikuandmed siis, kui inimesed esitavad e-kava keskkonna kaudu metsaregistrile enda metsa kohta infot.
Milliseid seoseid saab tõmmata selle juhtumi ja andmebaaside aines õpitu vahele?
- Andmete loata lugemine rikkus konfidentsiaalsuse nõuet.
- Kuna metsaregister ei loginud piisavalt infot selle kohta, kes ja milliseid andmeid täpselt luges ning milliseid tegevusi andmetega tegi (kas laadis alla või mitte), siis polnud täidetud ka revideeritavuse nõue.
- "Asutusesisese uurimise käigus suudeti küll tõestada, et mees oli käinud andmeid vaatamas, küll aga oli võimatu tagantjärele kindlaks teha, kas ta neid ka maha laadis." – puudus võimalus viia läbi turvarikke tõendtuvastus, mida on vaja turvarikete rangeks ja täpseks tõestamiseks (näiteks, et oleks võimalik kasutada süüdistusmaterjalina kohtus).
- Töötaja vaatas andmeid, mis ei kuulunud tema tööpiirkonda – õiguste jagamisel ei oldud lähtutud minimaalsuse printsiibist.
- Registri kasutamise paroolid on antud ka metsakonsulentidele. Neil võib tekkida huvide konflikt, kuid kuna andmete lugemisi piisavalt ei logita, siis on võimatu seda tuvastada. Võimalik, et süsteemile juurdepääsu andmisel pole lähtutud minimaalsuse põhimõttest ja juurdepääs on antud liiga suures ulatuses liiga laiale kasutajate ringile.
- Riiklike registrite andmete avalikustamine suurendab üheltpoolt läbipaistvust, kuid teisalt võib leiduda selle info kuritarvitajaid. "Isegi metsaregistri avalik osa on vahendajatele piisavalt huviväärne. Hiljuti muutis riik kaardil nähtavaks ka kõik need metsaeraldised, millel tohib teha uuendusraiet ehk lageraiet. Just sellised tükid tõotavad iseäranis suurt tulu vahendajatele ja metsa ülestöötajatele." (Niitra, 2017)
- Süsteemi kõige nõrgemaks lüliks on sellega seotud inimesed.
- Kasuahnus on väga levinud rünnaku motiiv.
- Ebaseaduslikult saadud andmed võivad anda ettevõttele konkurentide ees ebaseadusliku ja ebaeetilise eelise.
- Kõneluse töötaja elukaaslane töötab ühes riigi suurimas metsavahendusfirmas metsahindajana. Eelnev taustakontroll oleks võinud tuvastada töötaja puhul huvide konflikti ja talle poleks pidanud selliseid õiguseid andma või oleks vähemalt tulnud võtta selle töötaja tegevus tervadatud tähelepanu alla. Taustakontrolli vajaduse kehtestamine oleks organisatsiooniline tugevdusmeede. Selle tulemuste alusel juurdepääsu piiramine oleks tehniline tõkestusmeede.
- Selliste juhtumite uurimisega tegeleb Andmekaitse Inspektsioon.
- Ilmselt pole metsaregistri puhul ISKEt kasutatud.
17. jaanuaril on TTÜs loeng, kus professor ühest maailma tippülikoolist räägib samast teemast küberfüüsikaliste süsteemide võtmes. Kõik huvilised on oodatud!
*************
We have great opportunity to host a very special quest Prof. Stavros Tripakis from Berkeley (https://people.eecs.berkeley.edu/~stavros/) who is one of the big names in formal methods for cyber physical systems. His lecture will be on 17th of January at 12.00, room 507 ab. Please find the abstract and slides from the link below. All who are interested on formal methods and their application in CPS development are welcome.
Jüri Vain
Abstract
In this talk we will discuss systems, system design, and
compositionality. We begin by proposing a generic definition of system and debate classic and modern system theories. Motivated by cyber-physical systems, most of which are safety-critical, we ask what is the best way to design such systems, and answer "model-based design". We discuss work by the author on model-based design, focusing on compositionality, and in particular work on the refinement calculus of reactive systems.
Slides http://materials.dagstuhl.de/files/16/16491/16491.StavrosTripakis.Slides.pdf
Seega eksam toimub 17.01.2017 kell 16:00 ICT-402
Vabandan võimalike ebamugavuste pärast!
Üle kümne aasta uus väljaanne: Readings in Database Systems, 5th Edition. Selles esitavad andmebaasidega seotud teadus- ja arendustöö suurkujud viiteid mõnedele andmebaaside valdkonda palju ja püsivalt mõjutanud teadusartiklitele. Mis peamine, iga peatüki ees on toimetajate kommentaar, milles tutvustatakse artikleid ning kommenteeritakse andmebaasisüsteemide minevikku, olevikku ja tulevikku. Kellel on andmebaaside ja maailma selle valdkonna trendide vastu sügavam huvi, soovitan lugeda.
Küll aga aitab lävendi ületamisele kaasa järgnevale tähelepanu pööramine.
- Hindamismudelis ettenähtud lisapunktide (kokku 20 võimalikku) kogumine. Mille eest saab lisapunkte on kirjas hindamismudeli eraldi töölehel.
- Oma töö automaattestimine. Kes teeb projekti PostgreSQLis, see laske kindlasti käima "Quick test". Iga selle välja toodav tulemus tähendab punktikadu (välja arvatud vaadete suhtes õiguste jagamine, kus tulemuse PUUDUMINE tähendab punktikadu).
- Iga tööst leitud tekstilõik, mis on kopeeritud mõnest teisest kohast (nt näiteprojekt) ja on korrektselt viitamata (peab olema jutumärkides, taga viide allikale; allikas nimetatud kasutatud materjalides) tähendab ühte miinuspunkti.
Selles dokumendis on lk 29-46 minu eestikeelne ülevaade NoSQL süsteemidest.
Ingliskeelsetest allikatest soovitan esmatutvuseks järgnevaid:
- Martin Fowleri ettekanne NoSQL süsteemide põhimõtete kohta.
- Martin Fowler on üks raamatu NoSQL distilled : a brief guide to the emerging world of polyglot persistence autoritest. Selle raamatu leiate raamatukogust.
- Selle raamatu põhjal kirjutatud ülevaade.
Kõik need ingliskeelsed allikad pärinevad umbes 2013. aastast. Süsteemide tehnilised detailid on sellest ajast kindlasti muutunud, kuid nendes süsteemides andmete esitamise üldised põhimõtted on jäänud samaks.
UPDATE Isik SET parool=... WHERE isik_id IN (...);
Räsiväärtuste arvutamist on võimalik automatiseerida, sidudes tabeliga Isik INSERT trigeri ja UPDATE trigeri, mis käivitub andmete muutmisel parooli veerus. Huvilised leiavad selliste trigerite koodinäite Oracle jaoks kataloogist: Tarkvara saamine ja kasutamine/Oracle APEX õppevideod (APEX 4.2 baasil) dokumendist "APEXis autentimisskeemi muutmine, et kasutada parooli kontrollimiseks funktsiooni."
Rõhutan, et see pole hindamismudeli mõttes kohustuslik. Projektis peab olema tehtud miinimum kaks trigerit (PostgreSQLis võivad nende asemel olla ka reeglid).
- Harjutustund: 23. detsember 2016 kell 12:00-13:30 ICT-637.
- Harjutustund: 23. detsember 2016 kell 14:00-15:30 ICT-404.
- Vastuvõtuaeg: 23. detsember 2016 kell 16:00-17:00 ICT-627 (vajalik eelregistreerimine e-meili teel).
Võimalus on veel projekti kohta küsimusi esitada.
Tegemist on näitega, kuidas liiasust kasutatakse andmete kaitse ühe vahendina.
Pange tähele, kuidas artiklis rõhutatakse korduvalt andmete tervikluse vajadust "Selle kontseptsiooni juures ei saa me aga üle ega ümber vajadusest andmete tervikluse järele –kuidas me tagame, et mingi Eestis kasutusel olevas andmekogus ja selle peegelduses kas siis saatkondades ja mujal välismaa pilveteenustes olevad andmed oleksid igal ajahetkel samad."
Teemas 12 on juttu CAP teoreemist, mille kohaselt andmete hajutatud paiknemise korral on disaineritel valida, kas tagada süsteemi kättesaadavus igal ajahetkel (leppides sellega, et andmed koopiates pole igal hetkel ühesugused) või koopiate kooskõla igal ajahetkel (leppides sellega, et süsteemi või selle osi ei saa mõnikord kasutada). Paljud (kergekaalulisemad) hajutatult paiknevad süsteemid eelistavad tagada kättesaadavust. Kriitilise tähtsuega andmetega süsteemid (nagu riiklikud süsteemid, aga ka pangad), aga ei saa kuidagi koopiate kooskõlast mööda vaadata.
Kataloogi Teooria testideks (vahetestid, eksam) valmistumine/Harjutustunni slaidid (enamasti iseseisvaks uurimiseks) on pandud viimane slaidikomplekt, millest võiks olla abi nii projektis nõutud täitmisplaani kirjelduse koostamisel, kui ka viimaseks lisapunktide testiks ja eksamiks (teema 7 kohta) ettevalmistamisel.
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 tarkvararenduse spetsialisti hulgas läbiviidud küsitluse tulemused. Selle küsitlusega sooviti teada saada, millised tegevused aitavad parandada SQL-andmebaasi põhiste andmebaasirakenduste hallatavust. Teatele 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.
- 24. detsember 2016 – 30. detsember 2016 esitatud töö saab hilinemise eest 5 miinuspunkti
- 31. detsember 2016 – 28. jaanuar 2017 esitatud töö saab hilinemise eest 10 miinuspunkti
Hindamismudelis on lehekülg Lisapunktid, kus on kirjas võimalused saada projekti eest rohkem punkte, tehes selleks projekti nõutust mahukamaks.
Testil osalemiseks on kohustuslik registreerida. Registreerimine toimub Mauruse kaudu: Üldist => Teadmiste kontroll (nagu kevadel SQL kontrolltööle). Testil osalemiseks peab olema kaasas isikut tõendav dokument (nagu kevadel SQL kontrolltööl ja eksamil; raamatukogu- krediit- jms kaardid ei sobi ja nendega testi teha ei saa; autojuhiluba sobib).
Erinevused võrreldes eelmise kahe lisapunktide testiga.
- Loodud rakendus peab kasutama apex.ttu.ee serveris olevat andmebaasi.
- Serverirakenduse korral peab teil peab olema keskkond, kus seda käitada.
- apex.ttu.ee serveris on PHP (5.5.3), pgApex, Oracle APEX (4.2).
- Väljaspool ülikooli võrku oleva rakenduse korral peate apex.ttu.ee serveriga looma SSH ühenduse.
- Rakendust peab olema võimalik õppejõule demonstreerida. Üldiselt ei ole vaja tulla projekti, sh rakendust isiklikult ette näitama. Sellele tingimusele on järgmised erandid, mille korral on vaja tulla rakendust eksamisessiooni ajal vastuvõtuajal ette näitama. Projekti tulemuse saab teada alles peale seda kohtumist. Vastuvõtule tulek on vaja eelnevalt e-meili teel registreerida.
- Kui rakenduse kasutamine eeldab kasutaja arvutisse lisaks PostgreSQL ODBC draiverile või MS Accessile täiendava tarkvara installeerimist.
- Kui serverirakenduse poolt andmebaasisüsteemiga ühenduse loomine ei õnnestu (nt tasuta keskkonnad ei võimalda luua SSH ühendust) ja rakendus töötab vaid üliõpilase enda arvutis.
- Sõltumata sellest, kas Teil on vaja tulla rakendust ette näitama või mitte, loetakse projekt esitatuks alles siis, kui kõik projekti osad, sh rakenduse lähtekood on Maurusesse laaditud.
- Oracle APEXi korral on vaja esitada rakenduse eksportimisel loodud fail.
- pgApexi korral on vaja esitada apex.ttu.ee serverist andmebaasi pgapex eksportimisel saadud fail (plain formaadis, SQL laused; loomiseks saate kasutada pgAdmin programmi Backup funktsiooni).
- MS Accessi korral on vaja esitada *.mdb või *.accdb laiendiga fail, mitte *.mde või *.accde laiendiga fail.
- Kui teete rakenduse mõnes programmeerimiskeeles, siis tuleb saata nii lähtekood, käivitatavad failid kui ka käivitamise juhend (veebirakenduse korral viimase asemel link).
Selle asemel on vastuvõtuaeg neljapäeval 8. detsembril 2016 kell 13:00-14:00 ruumis ICT-627.
- Oracle SQL Developer
- PostgreSQL ODBC draiver
- Looge ODBC andmeühenduse spetsifikatsioon nimega PostgreSQL_yhendus
VÕI
logige harjutustunnis arvutiklassi arvutisse, sest seal on see tarkvara olemas.
Viited tarkvarale ja ODBC andmeühenduse spetsifikatsiooni loomise juhend on õppeaine kodulehel teates "Tarkvara" (kuupäevaga 05.09.2016)
CREATE TABLE Brin_test (brin_test_id INTEGER PRIMARY KEY,
reg_aeg TIMESTAMP NOT NULL DEFAULT timeofday()::timestamp);
INSERT INTO Brin_test(brin_test_id)
SELECT generate_series
FROM generate_series (1,1000000);
/*Lisasin tabelisse miljon rida.*/
ANALYZE;
\timing
SELECT Count(*) AS cnt FROM Brin_test WHERE reg_aeg>'2016-11-25';
/*Tulemuses 0 rida.
Ilma BRIN indeksita kulus tulemuse leidmiseks aega 167.908 ms*/
CREATE INDEX idx_brin_test ON Brin_test USING BRIN (reg_aeg);
ANALYZE;
SELECT Count(*) AS cnt FROM Brin_test WHERE reg_aeg>'2016-11-25';
/*Tulemuses 0 rida.
BRIN indeksiga kulus tulemuse leidmiseks aega 1.442 ms*/
Sellest tulenevalt võite PostgreSQL korral kaaluda BRIN indeksi loomist veergudele reg_aeg. Read on registreerimisaja järgi kettal loomulikul viisil järjestatud ja loodud indeksist oleks abi, kui ridu otsitakse registreerimisaja vahemike alusel. Sellist indeksi tüüpi ei saa EA ning RR vahendis kirjeldada. Seega tuleb sellise indeksi loomise kood ise kirjutada.
Testil osalemiseks on kohustuslik registreerida. Registreerimine toimub Mauruse kaudu: Üldist => Teadmiste kontroll (nagu kevadel SQL kontrolltööle). Testil osalemiseks peab olema kaasas isikut tõendav dokument (nagu kevadel SQL kontrolltööl ja eksamil; raamatukogu- krediit- jms kaardid ei sobi ja nendega testi teha ei saa; autojuhiluba sobib).
Test toimub elektrooniliselt, Mauruse testikeskkonnas. Kasutada võib arvutiklassi arvutit või oma arvutit (erinevalt eksamist, mis toimub ainult arvutiklassi arvutites). Küsimustele vastamiseks materjale kasutada ei või. Testis on viis juhuslikult valitud küsimust, vastamiseks on aega 10 minutit. Küsimused on valikvastustega ning ainult üks vastuse variant on õige. Tulemuse saate teada kohe, kuid vastuste õigsust saab vaadata üheksanda nädala harjutustundides. Nädala jooksul saab testi teha maksimaalselt ühe korra. Kui Te ei soovi testi teha, siis võiksite tundi tulla 15 minutit peale algust.
Andmed sellesse tabelisse saaksite Te võtta Global Product Classification (GPC) rahvusvahelisest standardist.
- Shared Nothing Partitioning kasutuselevõtt Pinteresti näitel.
- Suurettevõtte andmebaasi ühest andmebaasisüsteemist (Oracle => PostgreSQL) teise migreerimine Yandex Mail näitel (saab vaadata videot).
Vihje
Kui tegite kevadise projekti MS Accessis ja kasutasite SQL lausete käivitamiseks minu poolt pakutud abiprogrammiga faili, siis seal saate ekraanivormil SQL_skripti_käivitamine vajutada nupule, mis ekspordib MS Accessi andmebaasist CREATE TABLE, DROP TABLE ja INSERT laused (Nupp SQL lausete eksport teatele lisatud pildil). Võibolla on genereeritud INSERT lausetest kasu. Nendes INSERT lausetes puuduvad veergude nimed (tuleb ise juurde kirjutada). Kui peale faili avamist on sisu "välja lülitatud", siis tuleb eksportimise võimaldamiseks valida Enable Content.
- 4_4.jpg [126 KB]
- Liitindeks (perenimi, eesnimi) tabelis Isik, et kiirendada isikute otsimist nime järgi.
- Osaline indeks tabeli Klient veerule on_nous_otseturundusega. Selle indeksi võiks luua ridadele, kus on_nous_otseturundusega=TRUE, sest just selliseid ridu otsivad ilmselt otseturunduse tegijad. Sellist indeksit ei saa Enterpise Architect ning Rational Rose vahendis kirjeldada. Seega tuleb sellise indeksi loomise kood ise kirjutada.
- PostgreSQL korral BRIN (plokkide vahemiku) indeksid veergudel reg_aeg. Read on selle järgi kettal loomulikul viisil järjestatud ja loodud indeksist oleks abi, kui ridu otsitakse registreerimisaja vahemike alusel. Sellist indeksi tüüpi ei saa EA ning RR vahendis kirjeldada. Seega tuleb sellise indeksi loomise kood ise kirjutada.
- Esmaspäeval kell 8:00 ruumis ICT-401
- Reedel kell 14:00 ruumis ICT-404
- Kui Te ei õpi automaatjuhtimissüsteemide ainet, siis ka reedel kell 12:00 ruumis ICT-637
- Kui ma projekte vaatan ning küsimustele vastan, siis astuge harjutustunnis julgelt ligi kuulama. Projektide teemad, lahendamist vajavad probleemid ning vastamist ootavad küsimused on sageli ühesugused.
- Reedeti kell 12:00 käib ICT-637 umbes 10 inimest harjutustunnis ning reedeti kell 14:00 käib ICT-404 vaid paar inimest harjutustunnis. Seal jätkub aega kõigile.
{Riikide koodid koosnevad vastavalt ISO 3166 standardile täpselt kolmest suurtähest.}
2. Kui Te soovite vaikimisi väärtusena registreerida ajatempli minuti täpsusega, siis kasutage vaikimisi väärtusena järgnevaid avaldisi:
- PostgreSQLis: date_trunc('minute',LOCALTIMESTAMP)
- Oracles: trunc(LOCALTIMESTAMP,'mi')
3. Leiate materjalidest regulaaravaldise, mis kontrollib isikukoodi vastavust Eesti isikukoodi reeglitele. Kui Teie projekt lubab registreerida isikukoode erinevatest riikidest, siis ei saa Te seda kontrolli üks-ühele kasutada. Aga, kui soovite (pole kohustuslik), saate andmebaasis jõustada reegli "Kui isikukoodi riik on Eesti, siis isikukood peab vastama mustrile ...". Formaalsemalt kirja panduna on tegemist implikatsiooni reegliga, mille üldkuju on selline P=>Q. See tähendab, et kui kehtib tingimus P, siis peab kehtima ka tingimus Q. Sellise reegli CHECK kitsendusena jõustamiseks, saate kasutada avaldisega P=>Q loogiliselt samaväärset avaldist NOT(P) OR Q.
- PostgreSQLis oleks kitsenduse loogikaavaldis selline: NOT (riigi_kood='EST') OR isikukood~'^([3-6]{1}[[:digit:]]{2}[0-1]{1}[[:digit:]]{1}[0-3]{1}[[:digit:]]{5})$'
- Oracles oleks kitsenduse loogikaavaldis selline: NOT (riigi_kood='EST') OR REGEXP_LIKE(isikukood, '^([3-6]{1}[[:digit:]]{2}[0-1]{1}[[:digit:]]{1}[0-3]{1}[[:digit:]]{5})$')
Testil osalemiseks on kohustuslik registreerida. Registreerimine toimub Mauruse kaudu: Üldist => Teadmiste kontroll (nagu kevadel SQL kontrolltööle). Testil osalemiseks peab olema kaasas isikut tõendav dokument (nagu kevadel SQL kontrolltööl ja eksamil; raamatukogu- krediit- jms kaardid ei sobi ja nendega testi teha ei saa).
Test toimub elektrooniliselt, Mauruse testikeskkonnas. Kasutada võib arvutiklassi arvutit või oma arvutit (erinevalt eksamist, mis toimub ainult arvutiklassi arvutites). Küsimustele vastamiseks materjale kasutada ei või. Testis on viis juhuslikult valitud küsimust, vastamiseks on aega 10 minutit. Küsimused on valikvastustega ning ainult üks vastuse variant on õige. Tulemuse saate teada kohe, kuid vastuste õigsust saab vaadata üheksanda nädala harjutustundides. Nädala jooksul saab testi teha maksimaalselt ühe korra. Kui Te ei soovi testi teha, siis võiksite tundi tulla 15 minutit peale algust.
Samuti on raamatukogus hetkel saadaval üks eksemplar raamatust SQL antipatterns : avoiding the pitfalls of database programming. Ütleksin, et see on lausa kohustuslik kirjandus kõigile SQL-andmebaaside disainiga tõsisemalt tegeleda soovijatele.
NULL & tekstiline väärus = tekstiline väärtus
NULL & NULL = tühi string
CREATE FUNCTION textcat_coalesce(text, text) RETURNS text AS $$
SELECT coalesce($1,'') || coalesce($2,'');
$$ LANGUAGE sql IMMUTABLE LEAKPROOF;
COMMENT ON FUNCTION textcat_coalesce(text, text) IS
'Stringide konkatenatsiooni operaatorit & realiseeriv funktsioon. Tagab, et operatsiooni tulemus pole NULL.';
CREATE OPERATOR & (
LEFTARG = text,
RIGHTARG = text,
PROCEDURE = textcat_coalesce
);
SELECT NULL || 'katsetus' AS tulemus;
Tulemus: NULL
SELECT NULL & 'katsetus' AS tulemus;
Tulemus: katsetus
- TTÜ wifist,
- eduroamist,
- kodust läbi TORU.ttu.ee https://wiki.ttu.ee/it/et/doc/lib_toru.
PostgreSQL andmebaasile rakenduse tegijad peaksid arvestama järgnevaga.
- Kui teete kahekihilise süsteemi, kus rakendus on kliendi arvutis (nt kasutades MS Accessi või Javat), siis kodus rakendusega tegeledes on kõigepealt vajalik luua TORU.ttu.ee kaudu VPN ühendus. Muide, samal viisil saate kasutade väljaspool TTÜd ülikooli raamatukogu andmebaase.
- Veebirakenduste tegijad - apex.ttu.ee serveris on PHP ja pgApex. Kui soovite rakenduse jaoks kasutada mõnda muud serverit/vahendit, siis tuleks kas valida TTÜ võrgus olev server (mõnest teisest ainest) või luua rakenduses apex.ttu.ee serveriga SSH ühendus (näide).
Kui soovite kodust PostgreSQLiga töötamiseks kasutada pgAdmini, siis tuleb teha ühte järgnevast.
- Luua kõigepealt TORU.ttu.ee kaudu VPN ühendus.
- Luua ühendus kasutades SSH tunnelit (ühenduse defineerimisel pgAdmin 3 ver 1.22 sisestada info nii sakkide Properties kui SSH Tunnel alla).
Andmebaas on kohustuslik paigutada apex.ttu.ee serverisse, sest seal on automaattestimise vahendid ja õppejõul on sellele hindamiseks vajalik täielik juurdepääs
TTÜ raamatukogu kaudu on tehtud üliõpilastele elektrooniliselt kättesaadavaks raamat Disciplined Agile Delivery: A Practitioner’s Guide to Agile Software Delivery in the Enterprise. See kirjeldab suurte projektide jaoks kohandatud paindmetoodikat.
Siit aga leiab info, kuidas pääseda raamatule ligi ka väljaspoolt TTÜ võrku.
- SSH Secure Shell Client - Delete
- Putty - Backspace
Väga segadus tekitav. Vähemasti PostgreSQLi psqlis selliseid anomaaliaid ei ole ja teksti kustutab alati Backspace.
Palun lugege sellest raamatust esimese peatüki osi My Approach ja The Black Box Approach.
Jah, seal kiidetakse muuhulgas Oraclet. Võtke seda kergelt, sest ka mitmed teised andmebaasisüsteemid (sh PostgreSQL) on sama võimekad. Kuid seal kirjeldatav üldine andmebaasirakenduste loomise mõtteviis on selline, mida pean mõistlikuks ja millest lähtun ka käesolevas kursuses.
Siit aga leiab info, kuidas pääseda raamatule ligi ka väljaspoolt TTÜ võrku.
Põhimõte on, et hea andmebaasirakenduse loomiseks tuleks tunda ja kasutada andmebaasisüsteemide pakutavaid võimalusi. Lisan siia lõppu tsitaadi raamatust, mida ma tõlkima ei hakka. Viidatud osades tuuakse mõned ilmekad näited selle kohta, kuidas rakenduse arendajate poolne andmebaasi/andmebaasisüsteemi musta kastina vaatamine viis halbade tulemusteni.
My point about the power of database features is not a criticism of tools or technologies like Hibernate, EJBs, and container-managed persistence. It is a criticism of purposely remaining ignorant of the database and how it works and how to use it. The technologies used in this case worked well—after the developers got some insight into the database itself.
The bottom line is that the database is typically the cornerstone of your application. If it does not work well, nothing else really matters. If you have a black box and it does not work, what are you going to do about it? About the only thing you can do is look at it and wonder why it is not working very well. You can’t fix it, you can’t tune it. Quite simply, you do not understand how it works—and you made the decision to be in this position. The alternative is the approach that I advocate: understand your database, know how it works, know what it can do for you, and use it to its fullest potential.
Iseseisva töö registreerimiseks valige õppekeskkonna vasakpoolsest menüüst
"Tudeng->Ülesanded" ning avanenud leheküljelt ülesanne "Iseseiseva töö registreerimine".
Ühte tööd võib teha koos kuni kolm inimest. Kui teete tööd mitmekesi, siis peab ülesandele vastama ainult üks tegijatest. Kutsun üles koonduma ja tegema projekti mitmekesi!
Nimetan järgnevalt ka mõningaid tüüpilisi probleeme vastustes ja loodan, et Te väldite neid.
- Teisi andmebaasisüsteeme peale PostgreSQL ja Oracle iseseisva töö tegemiseks kasutada ei saa.
- Oraclet ja MS Accessi on raske koos kasutada ja seega ei sobi MS Access Oracle andmebaasi rakenduse tegemiseks.
- Oracle Application Express vahendi abil ei saa teha PostgreSQL andmebaasi kasutamiseks mõeldud veebirakendust.
- Enterprise Architect ja Rational Rose ei ole rakenduse tegemise vahendid, vaid on modelleerimisvahendid.
Arvan, et käesolevaks ajaks on NoSQL jõudnud haibitsüklis ülisuurte ootuste tipust üle, pettumuste lohust läbi, võibolla isegi juba taasavastamise tõusule.
Üha rohkem ilmub seisukohti ja tähelepanekuid, mis osundavad lähenemise või süsteemide üldistele puudujääkidele (näide1, näide2) ja konkreetsete süsteemide probleemidele (näide3, näide4, näide5). Muidugi saab öelda, et ühes või teises NoSQL süsteemis selliseid probleeme ei ole, kuid küsimus on, kuidas see toode kümnete teiste seast üles leida ja kas on kindel, et selle teinud idufirma pole viie aasta pärast hingusele läinud. NoSQL süsteemid peavad oma arengus jõudma produktiivsuse platoole ja tõsised tegijad välja settima.
Näen tõsist probleemi selles, et NoSQL süsteeme üritatakse kasutada ka seal, kus see pole kindlasti mõistlik. Teha raamatupidamise tarkvara NoSQL süsteemi põhjal on sama lahe kui kratsida kukalt pannes käe jalge vahelt läbi. Alguses paistab huvitav ja ekstravagantne, sellest tehtud piltidega saab sotsiaalmeedias praalida - pärast on kael ja keha kanged ning selg paigast ära. Mulle meeldis ühes arutelus võrdlus andmete ja koduse tööriistakuuri vahel. Oletame, et Teil on kuuris palju tööriistu. Üks võimalus on võtta erinevat tüüpi tööriistade jaoks kasutusele erinevad kastid. Kahtlemata võtab kastide valimine, neile siltide kleepimine ning tööriista ära panemisel õige kasti otsimine aega. Andmebaaside maailmas vastab sellele skeemi defineerimine SQL/relatsioonilises andmebaasis. Selle tulemusena on vajaliku tööriista leidmine kiire. Kas tõesti oleks lahendus, kus kuuris on hulk kaste ja tööriist pannakse esimesse vabasse kasti, kokkuvõttes kiirem ja parem? Andmebaaside maailmas vastaks sellele skeemitu NoSQL andmebaasi kasutamine.
Näen NoSQL süsteemide peamist kasutusvaldkonda suurandmete (big data) hoiustamisel - andmeid on hästi palju, neid tuleb nagu kosest juurde ja andmete struktuur ei ole ühe vitsaga löödud, vaid küllaltki muutlik. Kena oleks need kuskile kiiresti ja odavalt ära panna, lootuses, et ehk on hiljem aega, tahtmist ja raha, et neid lähemalt uurida. Tööriistade näitel oleks see umbes midagi sellist. Asjade hunnikusse paigutajal oli oma süsteem ja ta leiab vajaliku kiiresti üles. Teistel see nii kiiresti ei lähe. Teisalt, nagu tõestavad seriaalid nagu American Pickers, võib sellisest hunnikust igasugu väärt kraami leida. Samamoodi ei tasu ka andmeid lihtsalt ära visata. Graafipõhistel andmebaasisüsteemidel on kindlasti oma kindel koht igat sorti võrgustike (kes on kelle sõber, kust kuhu tee viib või kaabel jookseb jne) andmete käepäraseks muutmisel. Arvan, et mõistlikuks arengusuunaks on SQL ja NoSQL kokkusulamine, mille näiteks on PostgreSQLis JSON tüüpi andmetega töötamise võimalus. See võimaldab lahendusi, kus ühes geograafilises punktis oleva andmebaasi piires on teatud osa andmetest esitatud rohkem struktureeritult (eraldi veergudes) ja muutlikum osa andmeid on surutud kokku JSON andmeväärtustesse (vt kolmandat disaini selles näites). Kõiki neid andmeid kantseldab ACID omadusi toetav transaktsioonide juhtimise moodul.
NoSQL and Technical Debt on 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.
Palun Teilt järgnevat.
- Ärge jagage enda tehtud projekte teiste üliõpilastega.
- Ärge tehke kellegi teise eest tema tööd ära.
- Ärge taluge projekti meeskonnas 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.
Vahend käivitab andmebaasi süsteemikataloogi põhjal päringuid. Osa päringuid suudavad leida vigu. Osa aga otsivad andmebaasi disainist halva lõhnaga kohti (vt halvasti lõhnav disain ja halvasti lõhnav kood). Halvasti lõhnavad kohad ei takista andmebaasi ja seda kasutavate süsteemide toimimist, kuid muudavad andmebaasi kasutamise, haldamise või arendamise mingis aspektis raskemaks kui see võiks olla. Halvasti lõhnavad kohad on sügavamate probleemide sümptomid. Nende probleemide lahendamine aitab koodi puhastada. Halb lõhn on tehnilise võla tunnus. Tehniline võlg tähendab, et "asi" töötab, kuid saaks olla sisemiselt tehtud paremini. Kuna praegu on seal midagi "üle jala" lastud, siis see on probleem tulevikus, kui "asja" on vaja edasi arendada. Kliendile kiiresti töötava asja üleandmiseks on võetud võlga tuleviku arenduste arvelt. Tehnilist võlga aitab vähendada refaktoreerimine.
Kui teete oma projekti PostgreSQLis, siis minge aadressile. Logige sisse kasutades apexi kasutajanime ja parooli. Valige kontrollitav andmebaas. Ilmselt on see samasuguse nimega nagu ühe projekti tegija kasutajanimi ja sisaldab tema matriklinumbrit. Valige "Käivita saadaolevaid teste". Valige test "Databases II (fall 2016)". Vaadake päringu tulemusi, milles on üks või rohkem rida. Lugege kirjeldust, vaadake tulemusi. Usaldusväärsus on hinnang sellele, kuidas päring oma eesmärke täidab.
- Alajaotuses "General" on päringud, mis otsivad andmebaasist spetsiifilist infot, kuid otsuse selle kohta, kas midagi on õigesti või valesti peab tegema inimkasutaja, kes tulemust vaatab.
- Alajaotuses "Flaw detection" on päringud, mille tulemuses olev iga riga osundab mingile võimalikule disaini veale. Sõltuvalt päringu usaldusväärsuse hinangust peaks inimkasutaja selle üle kontrollima.
- Alajaotuses "Software measure" on päringud, mis arvutavad andmebaasi skeemi põhjal mingi arvulise väärtuse.
Soovi korral võite kasutada ka kasutajaliidese vana versiooni, kus kõik tulemused on ühel lehel. Mina kasutan tundides Teiega koos andmebaase vaadates seda. Päringud on samad, kasutajaliides erinev.
Kui teete oma projekti Oracles, siis minge aadressile. Päringud, mida saate sealt kaudu käivitada leiate andmebaasi disaini kontrollimiseks mõeldud SQL laused kataloogist Iseseisva töö projekti tegemine. 990999 tuleb asendada matrikli numbriga, mida kasutate projekti tulemusena loodud andmebaasiobjektide nimedes.
Võite neid päringuid regulaarselt ise käivitada ja interpreteerida üritada. Küsimuste korral pöörduge õppejõu poole. Oleks väga hea, kui mõnes semestri lõpu harjutustunnis, kui projekt juba valmis saama hakkab, jõuaksite koos õppejõuga need päringu tulemused üle vaadata.
Üliõpilaste töökeskkond:
- Oracle Application Express (Oracle APEX): http://apex.ttu.ee:8000/apex/apex_login
- PostgreSQL phpPgAdmin: http://apex.ttu.ee/andmebaas/
Oracle Application Express abil tehtud rakenduste näiteid:
- Töötajate andmebaas (rakenduse tegemiseks kulus umbes 30 minutit)
(kasutajanimi: testkasutaja
parool: 1234) - Koristajate andmebaas
(kasutajanimi: testkasutaja
parool: 1234) - Seisundimuudatuste realiseerimise näide
- APEXiga kaasa tulev näiterakendus
(kasutajanimi: testkasutaja
parool: 1234)
2016. aasta kevadel arendas hr Rait Raidma välja Oracle APEXile sarnase süsteemi nimega pgApex, mis põhineb PostgreSQLil. Magistritööd saab lugeda siit.
- apex.ttu.ee serveris üles seatud arenduskeskkond (sisselogimiseks apex kasutajanimi/parool)
- MIT litsentsiga kaitstud avalik lähtekood
- Tubade halduse näiterakendus (
kasutajanimi: kask@ttu.ee
parool: test)
PHP rakenduse näide:
- Teadetetahvel - sisselogimiseks on vaja kasutada apex.ttu.ee PostgreSQL kasutajanime ja parooli.
NB! apex.ttu.ee serveris tuleb PHP rakendus paigutada kataloogi /usr/local/apache2/htdocs alamkataloogi.
Kui loote seal näiteks oma rakenduse jaoks kataloogi rakendus, siis rakenduse veebiaadress on: http://apex.ttu.ee/rakendus/
Abivahendid:
- StarUML CASE vahendil põhinev lahendus, mis võimaldab StarUML abil koostada SQL-andmebaasi disaini mudeleid ja genereerida nendest PostgreSQLi jaoks mõeldud SQL koodi (kaasa arvatud mõningate keerukamate kitsenduste jõustamiseks vajalik kood). Idee on, et mudelis saab deklareerida kitsenduse vajaduse ning generaator oskab selle deklaratsiooni alusel koodi genereerida.
- apex.ttu.ee serveris olevate PostgreSQL andmebaaside kvaliteedi kontroll - sisselogimiseks on vaja kasutada apex.ttu.ee PostgreSQL kasutajanime ja parooli. Siin on sama vahendi vana kasutajaliides.
- Erinevad tarkvaravahendid PostgreSQL andmebaaside projekteerimiseks, programmeerimiseks ja haldamiseks. Nimekirjas on nii vaba tarkvara kui ka kommertstarkvara.
Dokumentatsioon:
- Tigu lahkamas, ehk ekskursioon UNIXi maailma
- PostgreSQL (9.5) dokumentatsioon
- Oracle 12c Release 1 dokumentatsioon
- Ask Tom on koht kust leiab vastuseid paljudele küsimustele Oracle kohta. Ühtlasi on see keskkond näide Oracle Application Express kasutamise kohta.
- Oracle Application Express
- Oracle Application Express foorum
- Pistikprogrammid e pluginad, mida saab kasutada Oracle APEXI abil tehtud rakenduste funktsionaalsuse suurendamiseks.
- Mõned videod, mis demonstreerivad APEX 4.1 kasutamist.
Lisainfo:
- Suur hulk soovitusi ja näpunäiteid andmebaaside programmeerijatele
- Visioon, kuidas üles ehitada andmete haldamiseks mõeldud süsteeme
- Teadmusbaas Database Lifecycle Management, kus on palju andmebaasi testimisest, evitamisest, versioonihaldusest. Tehnilisemad näited on seal MS SQL Serveri baasil, kuid üldiselt on see jutt oluline ja vajalik mistahes andmebaasisüsteemi korral.
- Kümme tavalist viga, mida Java arendajad teevad SQLi kirjutamisel
- Veel kümme tavalist viga, mida Java arendajad teevad SQLi kirjutamisel
- Üle kümne aasta uus väljaanne raamatus, kus andmebaasidega seotud teadus- ja arendustöö suurkujud esitavad viiteid mõnedele andmebaaside valdkonda palju ja püsivalt mõjutanud teadusartiklitele. Mis peamine, iga peatüki ees on toimetajate kommentaar, milles tutvustatakse artikleid ning kommenteeritakse andmebaasisüsteemide minevikku, olevikku ja tulevikku. Kellel on andmebaaside ja maailma selle valdkonna trendide vastu sügavam huvi, soovitan lugeda.
Oracle andmebaasiga töötamiseks soovitan kasutada Oracle poolt pakutavat programmi Oracle SQL Developer (ülikooli serveriga ühenduse loomisel SID= orcl). Tarkvara on tasuta, kuid selle allalaadimiseks tuleb ennast registreerida.
apex.ttu.ee serveriga SSH ühenduse loomiseks võib kasutada programmi PuTTY või Bitvise SSH Client. Samuti võib mitte-kommerts otstarbel kasutada SSH Secure Shell klienti versiooni 3.2, kuid see on juba üsna vana ja ebaturvaline. Selles lõigus nimetatud programmidest piisab ühest!
apex.ttu.ee serverisse failide ülekandmiseks ja sealt failide allalaadimiseks võib kasutada programmi WinSCP. Tegelikult sisaldavad ka Bitvise ja SSH Secure Shell programmid sellist funktsionaalsust ja siis poleks WinSCPd vajagi.
Lähtekoodiga (sh SQL lausetega) töötamiseks sobib hästi tekstiredaktor SciTe või Notepad++.
Valikuline
PostgreSQL andmebaasisüsteemi kasutava kahekihilise klient-server süsteemi loomiseks läheb vaja PostgreSQL ODBC draivereid. Valige kõige hilisem versioon. Milline draiver valida ja kuidas andmeühendust seadistada lugege palun teatele lisatud failist.
PHP rakenduste genereerimiseks võib kasutada SQL Maestro koodigeneraatorit PostgreSQL jaoks või SQL Maestro koodigeneraatorit Oracle jaoks.
Kui PostgreSQLiga suhtlemiseks pakutud vahenditest väheks jääb, siis siit leiab veel alternatiive.
- ODBC_IDU0230.pdf [78 KB]
- Kui kasutate http://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, siis siis valige Mauruse esilehel menüüst Üldist=>Minu konto ja lisage enda aktiivsete lehtede hulka: "Andmebaasid II (IDU0230)(sügis 2016)" Ärge unustage vajutada "registreeri".
Registreerumise järel peate ootama kuni õppejõud teie juurdepääsu õiguse kinnitab.