{"id":59,"date":"2021-03-04T08:42:09","date_gmt":"2021-03-04T08:42:09","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/?post_type=chapter&#038;p=59"},"modified":"2021-05-06T19:29:38","modified_gmt":"2021-05-06T19:29:38","slug":"andmebaaside-loomise-protsess","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/chapter\/andmebaaside-loomise-protsess\/","title":{"raw":"Andmebaaside loomise protsess","rendered":"Andmebaaside loomise protsess"},"content":{"raw":"<p style=\"text-align: justify\">Andmebaasi loomine on pikk protsess. Selleks tuleb l\u00e4bida j\u00e4rgnevad etapid:<\/p>\r\n\r\n<ol style=\"text-align: justify\">\r\n \t<li>N\u00f5uete anal\u00fc\u00fcs<\/li>\r\n \t<li>Andmebaasi mudeli loomine<\/li>\r\n \t<li>Vaadete loomine<\/li>\r\n \t<li>Andmebaasi andmetega t\u00e4itmine<\/li>\r\n \t<li>Rakenduse loomine<\/li>\r\n \t<li>Rakenduse ning andmebaasi omavaheline sidumine<\/li>\r\n<\/ol>\r\n<p style=\"text-align: justify\">Selles peat\u00fckis r\u00e4\u00e4gime me t\u00e4psemalt esimesest kahest etapist.<\/p>\r\n\r\n<h2>N\u00f5uete anal\u00fc\u00fcs<\/h2>\r\n<p style=\"text-align: justify\">N\u00f5uete anal\u00fc\u00fcsi all tuleks selgelt s\u00f5nastada, mida peaks loodav andmebaas v\u00f5imaldama. Selleks tuleb end loodava andmebaasi temaatikaga kurssi viia ning v\u00e4lja selgitada konkreetse teema n\u00f5uded, reeglid ning tavad.<\/p>\r\n<p style=\"text-align: justify\"><span style=\"color: #333333\">N\u00e4iteks kui luua andmebaas \u00f5pilaste, \u00f5petajate ning kursuste kohta (sh kes mis kursusel \u00f5pib), tuleks m\u00f5elda sellele, et kas ka \u00f5petaja v\u00f5ib olla \u00f5pilase rollis? M\u00f5eldes g\u00fcmnaasiumi peale, siis ilmselt mitte, kuid n\u00e4iteks \u00fclikoolis on see p\u00e4ris tavaline, et ka \u00f5ppej\u00f5ud ise osaleb m\u00f5nel \u00fclikooli pakutaval kursusel. Kui aga sellele kohe alguses m\u00f5tlemata vale struktuuriga andmebaas luua, ilmneb hiljem probleeme, sest \u00fckski \u00f5petaja ei saa ise \u00fchtegi kursust v\u00f5tta.<\/span><\/p>\r\n&nbsp;\r\n\r\n[h5p id=\"20\"]\r\n<p style=\"text-align: justify\">Selleks, et konkreetse andmebaasi n\u00f5udeid paika panna, v\u00f5iks alustada p\u00f5hiliste objektide ja n\u00e4htuste v\u00e4lja selgitamisega. N\u00e4iteks luues andmebaasi suurele ostuketile, tuleks kindlasti m\u00f5elda poodidele, t\u00f6\u00f6tajatele, klientidele, toodetele jne.<\/p>\r\n<p style=\"text-align: justify\">Seej\u00e4rel v\u00f5iks m\u00f5elda nende objektide ja n\u00e4htuste vahelistele seostele. N\u00e4iteks t\u00f6\u00f6taja t\u00f6\u00f6tamine poes, toote ostmine kliendi poolt jne.<\/p>\r\n<p style=\"text-align: justify\">Oluline on m\u00f5elda ka sellele, kui spetsiifiliseks peab andmebaasis kajastatuga minema. N\u00e4iteks v\u00f5ib-olla pole suure ostuketi jaoks oluline, kas t\u00f6\u00f6tajal on lapsi v\u00f5i mitte, seega seda ei peaks andmebaasis kajastama.<\/p>\r\n<p style=\"text-align: justify\">K\u00f5ik eelnevad sammud on \u00e4\u00e4rmiselt olulised selleks, et andmebaas vastaks reaalsetele vajadustele ning ootustele. Alles siis, kui n\u00f5uded on v\u00e4lja selgitatud, v\u00f5ib minna edasi andmebaasi mudeli loomise juurde.<\/p>\r\n\r\n<h2>Andmebaasidega seotud m\u00f5isted<\/h2>\r\n<p style=\"text-align: justify\">Selleks, et r\u00e4\u00e4kida andmebaasi mudeli loomisest, tuleb esmalt selgitada lahti m\u00f5ningad m\u00f5isted:<\/p>\r\n\r\n<ul style=\"text-align: justify\">\r\n \t<li><strong>Olem<\/strong> - reaalselt eksisteeriv ning identifitseeritav asi v\u00f5i n\u00e4htus (nt konkreetne isik, konkreetne toode jne).<\/li>\r\n<\/ul>\r\n<ul style=\"text-align: justify\">\r\n \t<li><strong>Olemit\u00fc\u00fcp<\/strong> - kogum sarnaseid olemeid (nt isik, toode jne).<\/li>\r\n<\/ul>\r\n<ul style=\"text-align: justify\">\r\n \t<li><strong>Tunnus<\/strong> - tunnused kirjeldavad andmebaasides olemit\u00fc\u00fcpe (nt isiku korral <em>eesnimi<\/em>, <em>perenimi<\/em>, <em>sugu<\/em>). Tunnuste v\u00e4\u00e4rtused kirjeldavad\/esindavad olemeid (nt \u2018Oskar\u2019, \u2018Ohakas\u2019, \u2018mees\u2019).<\/li>\r\n<\/ul>\r\n<ul style=\"text-align: justify\">\r\n \t<li><strong>V\u00f5ti<\/strong> - neid tunnuseid, mille v\u00e4\u00e4rtused identifitseerivad olemi \u00fcheselt, nimetatakse olemi v\u00f5tmetunnusteks. Ehk siis v\u00f5ti on mingisugune tunnuste komplekt, mille v\u00e4\u00e4rtust teades oskan ma kindlaks teha, millise olemiga on tegu.<\/li>\r\n<\/ul>\r\n<ul style=\"text-align: justify\">\r\n \t<li><strong>Primaarv\u00f5ti<\/strong> - \u00a0minimaalne tunnuste hulk, mille abil oskan ma kindlaks teha, millise olemiga on tegu. N\u00e4iteks Eesti kodaniku puhul oleks primaarv\u00f5tmeks isikukood, sest isikukood on igal inimesel erinev ehk see aitab meil \u00fchte kindlat inimest m\u00e4\u00e4ratleda.<\/li>\r\n<\/ul>\r\n<ul style=\"text-align: justify\">\r\n \t<li><strong>Seos<\/strong> - seosed eksisteerivad olemit\u00fc\u00fcpide vahel. Seoseid klassifitseeritakse selle j\u00e4rgi, mitu \u00fche olemit\u00fc\u00fcbi olemit saavad olla seotud teise olemit\u00fc\u00fcbi olemiga. N\u00e4iteks klient saab osta mitut toodet, kuid iga ost on seotud \u00fche kindla kliendiga. Seega olemit\u00fc\u00fcbi Klient ning olemit\u00fc\u00fcbi Ost vahel on 1:n ehk \u00fcks-mitmele seos. Samas olemit\u00fc\u00fcbi Toode ning olemit\u00fc\u00fcbi Klient vahel on n:m ehk mitu-mitmele seos, sest \u00fcks klient saab osta mitut toodet ning \u00fchte toodet saab osta mitu erinevat klienti. On olemas ka 1:1 ehk \u00fcks-\u00fchele seoseid. Selliseks seoseks on n\u00e4iteks abielu Euroopas <span class=\"aCOpRe\">\u2013<\/span> m\u00f5lemal abielu osapoolel on parajasti \u00fcks abikaasa.<\/li>\r\n<\/ul>\r\n&nbsp;\r\n\r\n[h5p id=\"21\"]\r\n\r\n[h5p id=\"22\"]\r\n<h2>Andmebaasi mudeli loomine<\/h2>\r\n<p style=\"text-align: justify\">R\u00e4\u00e4gime n\u00fc\u00fcd sellest, milline \u00fcldse \u00fcks andmebaas v\u00e4lja n\u00e4eb.<\/p>\r\n<p style=\"text-align: justify\">Andmebaas koosneb erinevatest tabelitest. \u00dcldiselt pole andmed andmebaasis kunagi vaid \u00fches tabelis, vaid need on jagatud mitme v\u00e4iksema tabeli vahel. Lisaks tabelitele on andmebaasis kirjeldatud ka tabelite vahelised seosed. Tabeleid ning nendevahelisi seosed on hea vaadelda andmebaasi mudeli abil. All on n\u00e4ide lihtsustatud andmebaasi mudelist, mis v\u00f5iks kirjeldada poes ostu tegemist.<\/p>\r\n<img class=\" wp-image-942 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel-300x59.png\" alt=\"\" width=\"802\" height=\"158\" \/>\r\n<p style=\"text-align: justify\">Kuna me soovime infot talletada nii kliendi, toote, kui ka konkreetse ostu kohta, olemegi loonud kolm eri tabelit, mis kirjeldavad olemit\u00fc\u00fcpe <em>Klient<\/em>, Ost ning <em> Toode<\/em>.<\/p>\r\n<p style=\"text-align: justify\">Nagu n\u00e4ha, siis tabelis <em>Klient<\/em> on kolm tunnust - <em>id<\/em>, <em>eesnimi<\/em> ja <em>perenimi<\/em>. Tunnuse<em> id<\/em> k\u00f5rval on n\u00e4ha v\u00f5tmekest, mis n\u00e4itab, et tegu on primaarv\u00f5tmega, seega tunnuse <em>id<\/em> abil on v\u00f5imalik \u00fchte konkreetset klienti \u00fcheselt tuvastada. Samuti on tabelis <em>Klient <\/em>tunnused <em>eesnimi<\/em> ning <em>perenimi<\/em>.<\/p>\r\n<p style=\"text-align: justify\">Miks me aga tuvastame \u00fchte konkreetset klienti t\u00e4isarvulise tunnuse <em>id<\/em> abil, mitte n\u00e4iteks isikukoodi abil? Seda seet\u00f5ttu, et me ei taha, et primaarv\u00f5tme v\u00e4\u00e4rtus s\u00f5ltuks v\u00e4lismaailmast. P\u00e4riseluline tunnus primaarv\u00f5tmena on alati potentsiaalne veakoht andmebaasis. N\u00e4iteks kui kasutaja sisestab oma isikukoodi valesti, v\u00f5ib see kattuda m\u00f5ne teise isiku isikukoodiga, mis omakorda t\u00e4hendab seda, et meie primaarv\u00f5ti ei m\u00e4\u00e4ra olemit \u00fcheselt. Samuti v\u00f5ib juhtuda, et m\u00f5nel kliendil \u00fcldse polegi isikukoodi, mida siis teha? Lisaks eelnevale on eri riikide isikukoodid teadup\u00e4rast erinevad. N\u00e4iteks Ameerika \u00dchendriikides on isiku identifitseerimiseks kasutusel sotsiaalkindlustuse number (ingl <em>social security number<\/em>), mis on 9-kohaline arv, kuid Eesti isikukood koosneb 11 numbrist. K\u00f5ikide selliste probleemide v\u00e4ltimiseks on m\u00f5istlik primaarv\u00f5tmeks valida tunnus, mis ei s\u00f5ltu v\u00e4lismaailmast. Antud juhul on meil selliseks tunnuseks <em>id<\/em>, mille v\u00e4\u00e4rtused on t\u00e4isarvud. Lisades andmebaasi uusi olemeid ehk kirjeid saame me alati tunnuse <em>id<\/em> v\u00e4\u00e4rtuseks m\u00e4\u00e4rata t\u00e4isarvu, millega \u00fchegi muu andmebaasis oleva kirje <em>id<\/em> v\u00e4\u00e4rtus ei kattu. Sellega oleme me alati taganud primaarv\u00f5tme unikaalsuse ja j\u00e4relikult saamegi me selle tunnuse abil olemit \u00fcheselt m\u00e4\u00e4rata. \u00dcldiselt pannakse sellise tunnuse nimeks <em>id.<\/em><\/p>\r\n<p style=\"text-align: justify\">Sellel samal p\u00f5hjusel on ka igal teisel mudelil oleval olemit\u00fc\u00fcbil primaarv\u00f5tmeks tunnus <em>id<\/em>.<\/p>\r\n&nbsp;\r\n\r\n[h5p id=\"23\"]\r\n<p style=\"text-align: justify\">Tabelis <em>Toode<\/em> on sarnaselt tabelile <em>Klient<\/em> v\u00e4li <em>id<\/em>, mis on primaarv\u00f5ti. Seega tunnuse <em>id<\/em> abil saame \u00fcheselt m\u00e4\u00e4ratleda \u00fchte kindlat toodet. Samuti on olemit\u00fc\u00fcbil <em>Toode<\/em> tunnused <em>nimi<\/em>, <em>\u00fchikuhind<\/em> ja <em>\u00fchik<\/em>. \u00dchik on oluline seet\u00f5ttu, et osade toodete korral \u00fchik muutub. N\u00e4iteks banaane ostes on \u00fchikuks kg, kuid \u0161okolaadi ostes r\u00e4\u00e4gime me t\u00fckihinnast.<\/p>\r\n<p style=\"text-align: justify\">Mudelil olev kolmas tabel <em>Ost<\/em> on selleks, et \u00fcks klient saaks osta mitut toodet ning et \u00fchte toodet saaks osta mitu klienti. Alati kui meil on kuskil n:m seos (antud juhul olemit\u00fc\u00fcpide <em>Klient <\/em>ja <em>Toode <\/em>vahel), tuleks luua uus tabel, mis hoiaks m\u00f5lema n:m seoses oleva olemit\u00fc\u00fcbi (antud juhul <em>Klient <\/em>ja <em> Toode<\/em>) primaarv\u00f5tmeid. Seda seet\u00f5ttu, et mitu-mitmele seoseid ei saa muul moel andmebaasides kirjeldada - me ei saa lihtsalt viidata tabelist Klient konkreetsele tootele, sest sel juhul saaks klient osta vaid \u00fchte toodet ning me ei saa viidata tabelist <em>Toode<\/em> \u00fchele konkreetsele kliendile, sest sel juhul saaks toodet osta vaid \u00fcks klient. Luues aga uue olemit\u00fc\u00fcbi <em>Ost<\/em>, saame me hoopis kaks 1:n seost - olemit\u00fc\u00fcpide <em>Klient<\/em> ja <em>Ost<\/em>\u00a0 vahel ning olemit\u00fc\u00fcpide <em>Toode<\/em> ja <em>Ost<\/em> vahel.<\/p>\r\n\r\n<h2>Enesekontroll<\/h2>\r\n<p style=\"text-align: justify\">Vaata allolevat andmebaasi mudelit ning vasta k\u00fcsimustele.<\/p>\r\n<img class=\" wp-image-944 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/oppimine_mudel-300x167.png\" alt=\"\" width=\"1023\" height=\"570\" \/>\r\n\r\n&nbsp;\r\n\r\n[h5p id=\"29\"]","rendered":"<p style=\"text-align: justify\">Andmebaasi loomine on pikk protsess. Selleks tuleb l\u00e4bida j\u00e4rgnevad etapid:<\/p>\n<ol style=\"text-align: justify\">\n<li>N\u00f5uete anal\u00fc\u00fcs<\/li>\n<li>Andmebaasi mudeli loomine<\/li>\n<li>Vaadete loomine<\/li>\n<li>Andmebaasi andmetega t\u00e4itmine<\/li>\n<li>Rakenduse loomine<\/li>\n<li>Rakenduse ning andmebaasi omavaheline sidumine<\/li>\n<\/ol>\n<p style=\"text-align: justify\">Selles peat\u00fckis r\u00e4\u00e4gime me t\u00e4psemalt esimesest kahest etapist.<\/p>\n<h2>N\u00f5uete anal\u00fc\u00fcs<\/h2>\n<p style=\"text-align: justify\">N\u00f5uete anal\u00fc\u00fcsi all tuleks selgelt s\u00f5nastada, mida peaks loodav andmebaas v\u00f5imaldama. Selleks tuleb end loodava andmebaasi temaatikaga kurssi viia ning v\u00e4lja selgitada konkreetse teema n\u00f5uded, reeglid ning tavad.<\/p>\n<p style=\"text-align: justify\"><span style=\"color: #333333\">N\u00e4iteks kui luua andmebaas \u00f5pilaste, \u00f5petajate ning kursuste kohta (sh kes mis kursusel \u00f5pib), tuleks m\u00f5elda sellele, et kas ka \u00f5petaja v\u00f5ib olla \u00f5pilase rollis? M\u00f5eldes g\u00fcmnaasiumi peale, siis ilmselt mitte, kuid n\u00e4iteks \u00fclikoolis on see p\u00e4ris tavaline, et ka \u00f5ppej\u00f5ud ise osaleb m\u00f5nel \u00fclikooli pakutaval kursusel. Kui aga sellele kohe alguses m\u00f5tlemata vale struktuuriga andmebaas luua, ilmneb hiljem probleeme, sest \u00fckski \u00f5petaja ei saa ise \u00fchtegi kursust v\u00f5tta.<\/span><\/p>\n<p>&nbsp;<\/p>\n<div id=\"h5p-20\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-20\" class=\"h5p-iframe\" data-content-id=\"20\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AT_2_kontrollk\u00fcsimus_1\"><\/iframe><\/div>\n<\/div>\n<p style=\"text-align: justify\">Selleks, et konkreetse andmebaasi n\u00f5udeid paika panna, v\u00f5iks alustada p\u00f5hiliste objektide ja n\u00e4htuste v\u00e4lja selgitamisega. N\u00e4iteks luues andmebaasi suurele ostuketile, tuleks kindlasti m\u00f5elda poodidele, t\u00f6\u00f6tajatele, klientidele, toodetele jne.<\/p>\n<p style=\"text-align: justify\">Seej\u00e4rel v\u00f5iks m\u00f5elda nende objektide ja n\u00e4htuste vahelistele seostele. N\u00e4iteks t\u00f6\u00f6taja t\u00f6\u00f6tamine poes, toote ostmine kliendi poolt jne.<\/p>\n<p style=\"text-align: justify\">Oluline on m\u00f5elda ka sellele, kui spetsiifiliseks peab andmebaasis kajastatuga minema. N\u00e4iteks v\u00f5ib-olla pole suure ostuketi jaoks oluline, kas t\u00f6\u00f6tajal on lapsi v\u00f5i mitte, seega seda ei peaks andmebaasis kajastama.<\/p>\n<p style=\"text-align: justify\">K\u00f5ik eelnevad sammud on \u00e4\u00e4rmiselt olulised selleks, et andmebaas vastaks reaalsetele vajadustele ning ootustele. Alles siis, kui n\u00f5uded on v\u00e4lja selgitatud, v\u00f5ib minna edasi andmebaasi mudeli loomise juurde.<\/p>\n<h2>Andmebaasidega seotud m\u00f5isted<\/h2>\n<p style=\"text-align: justify\">Selleks, et r\u00e4\u00e4kida andmebaasi mudeli loomisest, tuleb esmalt selgitada lahti m\u00f5ningad m\u00f5isted:<\/p>\n<ul style=\"text-align: justify\">\n<li><strong>Olem<\/strong> &#8211; reaalselt eksisteeriv ning identifitseeritav asi v\u00f5i n\u00e4htus (nt konkreetne isik, konkreetne toode jne).<\/li>\n<\/ul>\n<ul style=\"text-align: justify\">\n<li><strong>Olemit\u00fc\u00fcp<\/strong> &#8211; kogum sarnaseid olemeid (nt isik, toode jne).<\/li>\n<\/ul>\n<ul style=\"text-align: justify\">\n<li><strong>Tunnus<\/strong> &#8211; tunnused kirjeldavad andmebaasides olemit\u00fc\u00fcpe (nt isiku korral <em>eesnimi<\/em>, <em>perenimi<\/em>, <em>sugu<\/em>). Tunnuste v\u00e4\u00e4rtused kirjeldavad\/esindavad olemeid (nt \u2018Oskar\u2019, \u2018Ohakas\u2019, \u2018mees\u2019).<\/li>\n<\/ul>\n<ul style=\"text-align: justify\">\n<li><strong>V\u00f5ti<\/strong> &#8211; neid tunnuseid, mille v\u00e4\u00e4rtused identifitseerivad olemi \u00fcheselt, nimetatakse olemi v\u00f5tmetunnusteks. Ehk siis v\u00f5ti on mingisugune tunnuste komplekt, mille v\u00e4\u00e4rtust teades oskan ma kindlaks teha, millise olemiga on tegu.<\/li>\n<\/ul>\n<ul style=\"text-align: justify\">\n<li><strong>Primaarv\u00f5ti<\/strong> &#8211; \u00a0minimaalne tunnuste hulk, mille abil oskan ma kindlaks teha, millise olemiga on tegu. N\u00e4iteks Eesti kodaniku puhul oleks primaarv\u00f5tmeks isikukood, sest isikukood on igal inimesel erinev ehk see aitab meil \u00fchte kindlat inimest m\u00e4\u00e4ratleda.<\/li>\n<\/ul>\n<ul style=\"text-align: justify\">\n<li><strong>Seos<\/strong> &#8211; seosed eksisteerivad olemit\u00fc\u00fcpide vahel. Seoseid klassifitseeritakse selle j\u00e4rgi, mitu \u00fche olemit\u00fc\u00fcbi olemit saavad olla seotud teise olemit\u00fc\u00fcbi olemiga. N\u00e4iteks klient saab osta mitut toodet, kuid iga ost on seotud \u00fche kindla kliendiga. Seega olemit\u00fc\u00fcbi Klient ning olemit\u00fc\u00fcbi Ost vahel on 1:n ehk \u00fcks-mitmele seos. Samas olemit\u00fc\u00fcbi Toode ning olemit\u00fc\u00fcbi Klient vahel on n:m ehk mitu-mitmele seos, sest \u00fcks klient saab osta mitut toodet ning \u00fchte toodet saab osta mitu erinevat klienti. On olemas ka 1:1 ehk \u00fcks-\u00fchele seoseid. Selliseks seoseks on n\u00e4iteks abielu Euroopas <span class=\"aCOpRe\">\u2013<\/span> m\u00f5lemal abielu osapoolel on parajasti \u00fcks abikaasa.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<div id=\"h5p-21\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-21\" class=\"h5p-iframe\" data-content-id=\"21\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AT_2_kontrollk\u00fcsimus_2\"><\/iframe><\/div>\n<\/div>\n<div id=\"h5p-22\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-22\" class=\"h5p-iframe\" data-content-id=\"22\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AT_2_kontrollk\u00fcsimus_3\"><\/iframe><\/div>\n<\/div>\n<h2>Andmebaasi mudeli loomine<\/h2>\n<p style=\"text-align: justify\">R\u00e4\u00e4gime n\u00fc\u00fcd sellest, milline \u00fcldse \u00fcks andmebaas v\u00e4lja n\u00e4eb.<\/p>\n<p style=\"text-align: justify\">Andmebaas koosneb erinevatest tabelitest. \u00dcldiselt pole andmed andmebaasis kunagi vaid \u00fches tabelis, vaid need on jagatud mitme v\u00e4iksema tabeli vahel. Lisaks tabelitele on andmebaasis kirjeldatud ka tabelite vahelised seosed. Tabeleid ning nendevahelisi seosed on hea vaadelda andmebaasi mudeli abil. All on n\u00e4ide lihtsustatud andmebaasi mudelist, mis v\u00f5iks kirjeldada poes ostu tegemist.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-942 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel-300x59.png\" alt=\"\" width=\"802\" height=\"158\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel-300x59.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel-768x152.png 768w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel-65x13.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel-225x44.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel-350x69.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/ost_mudel.png 835w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/p>\n<p style=\"text-align: justify\">Kuna me soovime infot talletada nii kliendi, toote, kui ka konkreetse ostu kohta, olemegi loonud kolm eri tabelit, mis kirjeldavad olemit\u00fc\u00fcpe <em>Klient<\/em>, Ost ning <em> Toode<\/em>.<\/p>\n<p style=\"text-align: justify\">Nagu n\u00e4ha, siis tabelis <em>Klient<\/em> on kolm tunnust &#8211; <em>id<\/em>, <em>eesnimi<\/em> ja <em>perenimi<\/em>. Tunnuse<em> id<\/em> k\u00f5rval on n\u00e4ha v\u00f5tmekest, mis n\u00e4itab, et tegu on primaarv\u00f5tmega, seega tunnuse <em>id<\/em> abil on v\u00f5imalik \u00fchte konkreetset klienti \u00fcheselt tuvastada. Samuti on tabelis <em>Klient <\/em>tunnused <em>eesnimi<\/em> ning <em>perenimi<\/em>.<\/p>\n<p style=\"text-align: justify\">Miks me aga tuvastame \u00fchte konkreetset klienti t\u00e4isarvulise tunnuse <em>id<\/em> abil, mitte n\u00e4iteks isikukoodi abil? Seda seet\u00f5ttu, et me ei taha, et primaarv\u00f5tme v\u00e4\u00e4rtus s\u00f5ltuks v\u00e4lismaailmast. P\u00e4riseluline tunnus primaarv\u00f5tmena on alati potentsiaalne veakoht andmebaasis. N\u00e4iteks kui kasutaja sisestab oma isikukoodi valesti, v\u00f5ib see kattuda m\u00f5ne teise isiku isikukoodiga, mis omakorda t\u00e4hendab seda, et meie primaarv\u00f5ti ei m\u00e4\u00e4ra olemit \u00fcheselt. Samuti v\u00f5ib juhtuda, et m\u00f5nel kliendil \u00fcldse polegi isikukoodi, mida siis teha? Lisaks eelnevale on eri riikide isikukoodid teadup\u00e4rast erinevad. N\u00e4iteks Ameerika \u00dchendriikides on isiku identifitseerimiseks kasutusel sotsiaalkindlustuse number (ingl <em>social security number<\/em>), mis on 9-kohaline arv, kuid Eesti isikukood koosneb 11 numbrist. K\u00f5ikide selliste probleemide v\u00e4ltimiseks on m\u00f5istlik primaarv\u00f5tmeks valida tunnus, mis ei s\u00f5ltu v\u00e4lismaailmast. Antud juhul on meil selliseks tunnuseks <em>id<\/em>, mille v\u00e4\u00e4rtused on t\u00e4isarvud. Lisades andmebaasi uusi olemeid ehk kirjeid saame me alati tunnuse <em>id<\/em> v\u00e4\u00e4rtuseks m\u00e4\u00e4rata t\u00e4isarvu, millega \u00fchegi muu andmebaasis oleva kirje <em>id<\/em> v\u00e4\u00e4rtus ei kattu. Sellega oleme me alati taganud primaarv\u00f5tme unikaalsuse ja j\u00e4relikult saamegi me selle tunnuse abil olemit \u00fcheselt m\u00e4\u00e4rata. \u00dcldiselt pannakse sellise tunnuse nimeks <em>id.<\/em><\/p>\n<p style=\"text-align: justify\">Sellel samal p\u00f5hjusel on ka igal teisel mudelil oleval olemit\u00fc\u00fcbil primaarv\u00f5tmeks tunnus <em>id<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"h5p-23\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-23\" class=\"h5p-iframe\" data-content-id=\"23\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AT_2_kontrollk\u00fcsimus_4\"><\/iframe><\/div>\n<\/div>\n<p style=\"text-align: justify\">Tabelis <em>Toode<\/em> on sarnaselt tabelile <em>Klient<\/em> v\u00e4li <em>id<\/em>, mis on primaarv\u00f5ti. Seega tunnuse <em>id<\/em> abil saame \u00fcheselt m\u00e4\u00e4ratleda \u00fchte kindlat toodet. Samuti on olemit\u00fc\u00fcbil <em>Toode<\/em> tunnused <em>nimi<\/em>, <em>\u00fchikuhind<\/em> ja <em>\u00fchik<\/em>. \u00dchik on oluline seet\u00f5ttu, et osade toodete korral \u00fchik muutub. N\u00e4iteks banaane ostes on \u00fchikuks kg, kuid \u0161okolaadi ostes r\u00e4\u00e4gime me t\u00fckihinnast.<\/p>\n<p style=\"text-align: justify\">Mudelil olev kolmas tabel <em>Ost<\/em> on selleks, et \u00fcks klient saaks osta mitut toodet ning et \u00fchte toodet saaks osta mitu klienti. Alati kui meil on kuskil n:m seos (antud juhul olemit\u00fc\u00fcpide <em>Klient <\/em>ja <em>Toode <\/em>vahel), tuleks luua uus tabel, mis hoiaks m\u00f5lema n:m seoses oleva olemit\u00fc\u00fcbi (antud juhul <em>Klient <\/em>ja <em> Toode<\/em>) primaarv\u00f5tmeid. Seda seet\u00f5ttu, et mitu-mitmele seoseid ei saa muul moel andmebaasides kirjeldada &#8211; me ei saa lihtsalt viidata tabelist Klient konkreetsele tootele, sest sel juhul saaks klient osta vaid \u00fchte toodet ning me ei saa viidata tabelist <em>Toode<\/em> \u00fchele konkreetsele kliendile, sest sel juhul saaks toodet osta vaid \u00fcks klient. Luues aga uue olemit\u00fc\u00fcbi <em>Ost<\/em>, saame me hoopis kaks 1:n seost &#8211; olemit\u00fc\u00fcpide <em>Klient<\/em> ja <em>Ost<\/em>\u00a0 vahel ning olemit\u00fc\u00fcpide <em>Toode<\/em> ja <em>Ost<\/em> vahel.<\/p>\n<h2>Enesekontroll<\/h2>\n<p style=\"text-align: justify\">Vaata allolevat andmebaasi mudelit ning vasta k\u00fcsimustele.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-944 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/oppimine_mudel-300x167.png\" alt=\"\" width=\"1023\" height=\"570\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/oppimine_mudel-300x167.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/oppimine_mudel-65x36.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/oppimine_mudel-225x125.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/oppimine_mudel-350x195.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/oppimine_mudel.png 716w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><\/p>\n<p>&nbsp;<\/p>\n<div id=\"h5p-29\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-29\" class=\"h5p-iframe\" data-content-id=\"29\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AT_2_quiz\"><\/iframe><\/div>\n<\/div>\n","protected":false},"author":33,"menu_order":2,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-59","chapter","type-chapter","status-publish","hentry"],"part":3,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/59","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/users\/33"}],"version-history":[{"count":54,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/59\/revisions"}],"predecessor-version":[{"id":1393,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/59\/revisions\/1393"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/parts\/3"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/59\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/media?parent=59"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapter-type?post=59"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/contributor?post=59"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/license?post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}