{"id":156,"date":"2021-03-04T19:28:47","date_gmt":"2021-03-04T19:28:47","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/?post_type=chapter&#038;p=156"},"modified":"2021-05-06T19:01:30","modified_gmt":"2021-05-06T19:01:30","slug":"andmetuubid","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/chapter\/andmetuubid\/","title":{"raw":"Andmet\u00fc\u00fcbid","rendered":"Andmet\u00fc\u00fcbid"},"content":{"raw":"<p style=\"text-align: justify\">Kuna andmebaasis olevates tabelis peab igal tunnusel olema m\u00e4\u00e4ratud ka tema andmet\u00fc\u00fcp, tutvumegi k\u00e4esolevas peat\u00fckis peamiste PostgreSQL'is kasutusel olevate andmet\u00fc\u00fcpidega.<\/p>\r\n\r\n<h2>Arvu andmet\u00fc\u00fcbid<\/h2>\r\n<p style=\"text-align: justify\">Allolevas tabelis on v\u00e4lja toodud oluliseimad arvulised andmet\u00fc\u00fcbid. K\u00f5ige laialdasemalt kasutatavad on neist ilmselt <em>integer<\/em>, <em>serial,<\/em> <em>numeric<\/em> ning <em>real<\/em>. Kui aga on teada, et andmebaasis v\u00f5ivad arvud oma mahult liiga suureks minna, tasub kasutada nende andmet\u00fc\u00fcpide 'suuremaid' versioone, mis mahutavad endasse 4-baidi asemel 8-baiti. Kui aga vastupidiselt on teada, et arvud varieeruvad vaid n\u00e4iteks k\u00fcmne piires, oleks m\u00f5istlik m\u00e4lu kokkuhoiu m\u00f5ttes kasutada andmet\u00fc\u00fcpe <em>smallint<\/em> ning smallserial, mis on vastavalt <em>integer<\/em>i ning <em>serial<\/em>i 2-baidised versioonid.<\/p>\r\n<p style=\"text-align: justify\">\u00dcheks olukorraks, kus on alati m\u00f5istlik kasutada andmet\u00fc\u00fcpi <em>serial<\/em>, on primaarv\u00f5tmete korral. Nagu <a href=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/chapter\/andmebaaside-loomise-protsess\/\">\u00fcleeelmises peat\u00fckis<\/a> olnud tabelitelt n\u00e4ha oli, sisaldas iga tabel primaarv\u00f5tmena tunnust <em>id<\/em>, mis oli t\u00e4isarv ning mille eesm\u00e4rgiks oli aidata meil olemit \u00fcheselt identifitseerida. Kasutades andmet\u00fc\u00fcpi <em>serial<\/em>, pole meil uusi andmeid lisades vaja <em>id<\/em> v\u00e4\u00e4rtust ise v\u00e4lja m\u00f5elda ning t\u00e4psustada, sest <em>serial<\/em> andmet\u00fc\u00fcp valib oma v\u00e4\u00e4rtuseks ise esimese vaba oleva t\u00e4isarvu. Sellega oleme me taganud, et iga olemi ehk kirje <em>id<\/em> v\u00e4\u00e4rtus on unikaalne ka siis, kui me seda ise ei t\u00e4psusta.<\/p>\r\n<p style=\"text-align: justify\">Millal aga kasutada andmet\u00fc\u00fcpi <em>real<\/em> ning millal andmet\u00fc\u00fcpi <em>numeric<\/em>? Kuna <em>numeric<\/em> andmet\u00fc\u00fcp hoiab endas palju t\u00e4psemaid arve kui <em>real<\/em>, siis \u00fcldjuhul on m\u00f5istlik alati andmet\u00fc\u00fcbi <em>real <\/em>asemel valida <em>numeric<\/em> andmet\u00fc\u00fcp.<\/p>\r\n\r\n<table style=\"border-collapse: collapse;width: 100%;height: 130px\" border=\"0\">\r\n<tbody>\r\n<tr class=\"shaded\" style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>bigint<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">8-baidine t\u00e4isarv<\/td>\r\n<\/tr>\r\n<tr style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>integer<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">4-baidine t\u00e4isarv<\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>smallint<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">2-baidine t\u00e4isarv<\/td>\r\n<\/tr>\r\n<tr style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>bigserial<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">automaatselt suurenev 8-baidine t\u00e4isarv<\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>serial<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">automaatselt suurenev 4-baidine t\u00e4isarv<\/td>\r\n<\/tr>\r\n<tr style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>smallserial<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">automaatselt suurenev 2-baidine t\u00e4isarv<\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>double precision<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">8-baidine ujukomaarv<\/td>\r\n<\/tr>\r\n<tr style=\"height: 15px\">\r\n<td style=\"width: 21.066%;height: 15px\"><code>real<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 15px\">4-baidine ujukomaarv<\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 10px\">\r\n<td style=\"width: 21.066%;height: 10px\"><code>numeric<\/code><\/td>\r\n<td style=\"width: 78.934%;height: 10px\">reaalarv<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<h2>Teksti andmet\u00fc\u00fcbid<\/h2>\r\n<p style=\"text-align: justify\">Peamised teksti andmet\u00fc\u00fcbid on text, <em>varchar<\/em> ning <em>char<\/em>. Kui andmet\u00fc\u00fcp <em>text<\/em> mahutab endasse 'l\u00f5pmatu' arvu s\u00fcmboleid, siis andmet\u00fc\u00fcpidel <em>varchar<\/em> ning\u00a0<em>char<\/em> tuleks anda kaasa t\u00e4isarv <em>n<\/em>, mis t\u00e4psustab s\u00fcmbolite jada pikkust.<\/p>\r\n<p style=\"text-align: justify\">Hea tava on see, et <em>text<\/em> andmet\u00fc\u00fcbi asemel kasutatakse <em>varchar<\/em> andmet\u00fc\u00fcpi. P\u00f5hjus selleks on lihtne <span class=\"aCOpRe\">\u2013<\/span> 'l\u00f5pmatu' pikkusega s\u00fcmbolite jada v\u00f5tab m\u00e4lus v\u00e4ga palju ruumi ning \u00fcldiselt on andmebaasis hoitavatel andmetel siiski mingi m\u00e4\u00e4ratletav s\u00fcmbolite limiit olemas (nt inimese nimi ilmselt ei ole \u00fcle 200 t\u00e4hem\u00e4rgi pikk). Seega alati tasub m\u00f5elda, milline v\u00f5iks olla maksimaalne t\u00e4hem\u00e4rkide arv ning kasutadagi siis <em>varchar<\/em> andmet\u00fc\u00fcpi andmet\u00fc\u00fcbi <em>text<\/em> asemel.<\/p>\r\n<p style=\"text-align: justify\">Millal aga kasutada andmet\u00fc\u00fcpi <em>char<\/em>? Andmet\u00fc\u00fcpi <em>char<\/em> kasutame me juhul, kui teame, et k\u00f5ik tunnuse v\u00e4\u00e4rtused on alati t\u00e4pselt sama pikkusega. Kui me aga ei saa olla kindlad, et tunnuse v\u00e4\u00e4rtused on alati sama pikkusega, kasutame me andmet\u00fc\u00fcpi <em>varchar<\/em>.<\/p>\r\n\r\n<table style=\"border-collapse: collapse;width: 100%;height: 45px\" border=\"0\">\r\n<tbody>\r\n<tr class=\"shaded\" style=\"height: 15px\">\r\n<td style=\"width: 21.2836%;height: 15px\">text<\/td>\r\n<td style=\"width: 78.7165%;height: 15px\">m\u00e4\u00e4ratlemata pikkusega s\u00fcmbolite jada<\/td>\r\n<\/tr>\r\n<tr style=\"height: 15px\">\r\n<td style=\"width: 21.2836%;height: 15px\">varchar (<em>n<\/em>)<\/td>\r\n<td style=\"width: 78.7165%;height: 15px\">s\u00fcmbolite jada kuni pikkusega <em>n<\/em><\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 15px\">\r\n<td style=\"width: 21.2836%;height: 15px\">char (<em>n<\/em>)<\/td>\r\n<td style=\"width: 78.7165%;height: 15px\">s\u00fcmbolite jada fikseeritud pikkusega <em>n<\/em><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<h2>Veel andmet\u00fc\u00fcpe<\/h2>\r\n<p style=\"text-align: justify\">Allolevas tabelis on v\u00e4jla toodud veel m\u00f5ningad kasulikud andmet\u00fc\u00fcbid, mida ilmselt andmebaasi tabelite loomisel vaja l\u00e4heb. Kusjuures nurksulgudes on m\u00e4rgitud \u00e4ra vabatahtlik osa, seega nurksulgudes oleva v\u00f5ib v\u00e4lja j\u00e4tta.<\/p>\r\n\r\n<table class=\"no-lines\" style=\"height: 152px;width: 100%\" border=\"0\">\r\n<tbody>\r\n<tr class=\"shaded\" style=\"height: 19px\">\r\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">bit [ (<em>n<\/em>) ]<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">bittide jada fikseeritud pikkusega <em>n<\/em><\/td>\r\n<\/tr>\r\n<tr class=\"border\" style=\"height: 19px\">\r\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">varbit [ (<em>n<\/em>) ]<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">bittide jada kuni pikkusega <em>n<\/em><\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 19px\">\r\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">boolean<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">t\u00f5ev\u00e4\u00e4rtus (true\/false)<\/td>\r\n<\/tr>\r\n<tr class=\"border\" style=\"height: 19px\">\r\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">date<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">kuup\u00e4ev kujul 'yyyy-mm-dd'<\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 19px\">\r\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">time [ (<em>p<\/em>) ]<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">ilma ajatsoonita kellaaeg kujul 'hh:mm:ss', kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\r\n<\/tr>\r\n<tr style=\"height: 19px\">\r\n<td style=\"height: 19px;width: 21.8274%\">time [ (<em>p<\/em>) ] with time zone<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">ajatsooniga kellaaeg kujul 'hh:mm:ss+hhmm' v\u00f5i 'hh:mm:ss-hhmm', kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\r\n<\/tr>\r\n<tr class=\"shaded\" style=\"height: 19px\">\r\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">timestamp [ (<em>p<\/em>) ]<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">kuup\u00e4ev ja kellaaeg ilma ajatsoonita, kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\r\n<\/tr>\r\n<tr style=\"height: 19px\">\r\n<td style=\"height: 19px;width: 21.8274%\">timestamp [ (<em>p) <\/em>] with time zone<\/td>\r\n<td style=\"height: 19px;width: 78.1001%\">kuup\u00e4ev ja kellaaeg koos ajatsooniga, kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<p style=\"text-align: justify\">Millal kasutada erinevaid kellaaegade ning kuup\u00e4evadega seotud andmet\u00fc\u00fcpe on ilmselt k\u00f5igile selge. Samuti peaksite t\u00e4nu Pythonile olema tuttavad ka andmet\u00fc\u00fcbiga <em>boolean<\/em>.<\/p>\r\n<p style=\"text-align: justify\">V\u00f5\u00f5rasteks andmet\u00fc\u00fcpideks on ilmselt aga <em>bit<\/em> ning <em>varbit<\/em>. \u00dcheks n\u00e4iteks, kus kasutada\u00a0andmet\u00fc\u00fcpi <em>bit<\/em>, on jah\/ei v\u00e4\u00e4rtuste korral <span class=\"aCOpRe\">\u2013<\/span> 1 t\u00e4histab v\u00e4\u00e4rtust 'jah' ning 0 v\u00e4\u00e4rtust 'ei'. Samuti sobiks <em>bit<\/em> andmet\u00fc\u00fcpi kasutada, kui miski on lubatud\/keelatud, sissel\u00fclitatud\/v\u00e4ljal\u00fclitatud jne.<\/p>\r\n\r\n<h2>Kokkuv\u00f5te<\/h2>\r\n<p style=\"text-align: justify\">Nagu n\u00e4ha, siis erinevaid andmet\u00fc\u00fcpe on \u00fcpriski palju. Valikuv\u00f5imalus on oluline seet\u00f5ttu, et andmebaasi halduss\u00fcsteem annab alati teada, kui kasutaja sisestab mingile v\u00e4ljale valet t\u00fc\u00fcpi v\u00e4\u00e4rtuse. Ehk kui me kasutame iga tunnuse jaoks v\u00e4ga h\u00e4sti l\u00e4bim\u00f5eldud andmet\u00fc\u00fcpe, mis vastavad v\u00f5imalikult h\u00e4sti tunnuse reaalsele olemusele, on meil v\u00f5imalik andmete sisestamisel tehtavaid vigu v\u00e4ltida, sest andmebaasi halduss\u00fcsteem teavitab meid enamik juhtudel veast. Kui me aga kasutame iga tunnuse jaoks n\u00e4iteks andmet\u00fc\u00fcpi <em>text<\/em>, mis laseb meil hoida \u00fcksk\u00f5ik mis pikkusega s\u00fcmbolite jada, ei saa me kuidagi kontrollida, kas kasutaja sisestas t\u00e4isarvulise tunnuse v\u00e4\u00e4rtuseks t\u00e4isarvu, ujukomaarvu v\u00f5i sootuks midagi muud.<\/p>\r\n<p style=\"text-align: justify\"><strong>NB!<\/strong> Kui tulevikus peaks esinema vajadus kasutada m\u00f5nda muud andmebaasi halduss\u00fcsteemi kui PostgreSQL, siis tasub teada, et seal v\u00f5ivad andmet\u00fc\u00fcbid olla veidikene erineva nimetusega. Seet\u00f5ttu tasub alati konkreetse andmebaasi halduss\u00fcsteemi dokumentatsiooni uurida ning need erinevused \u00fcle vaadata. \u00dcldjoontes peaks k\u00f5ik siiski \u00fcpriski sarnane olema.<\/p>\r\n\r\n<h2>Enesekontroll<\/h2>\r\n[h5p id=\"30\"]","rendered":"<p style=\"text-align: justify\">Kuna andmebaasis olevates tabelis peab igal tunnusel olema m\u00e4\u00e4ratud ka tema andmet\u00fc\u00fcp, tutvumegi k\u00e4esolevas peat\u00fckis peamiste PostgreSQL&#8217;is kasutusel olevate andmet\u00fc\u00fcpidega.<\/p>\n<h2>Arvu andmet\u00fc\u00fcbid<\/h2>\n<p style=\"text-align: justify\">Allolevas tabelis on v\u00e4lja toodud oluliseimad arvulised andmet\u00fc\u00fcbid. K\u00f5ige laialdasemalt kasutatavad on neist ilmselt <em>integer<\/em>, <em>serial,<\/em> <em>numeric<\/em> ning <em>real<\/em>. Kui aga on teada, et andmebaasis v\u00f5ivad arvud oma mahult liiga suureks minna, tasub kasutada nende andmet\u00fc\u00fcpide &#8216;suuremaid&#8217; versioone, mis mahutavad endasse 4-baidi asemel 8-baiti. Kui aga vastupidiselt on teada, et arvud varieeruvad vaid n\u00e4iteks k\u00fcmne piires, oleks m\u00f5istlik m\u00e4lu kokkuhoiu m\u00f5ttes kasutada andmet\u00fc\u00fcpe <em>smallint<\/em> ning smallserial, mis on vastavalt <em>integer<\/em>i ning <em>serial<\/em>i 2-baidised versioonid.<\/p>\n<p style=\"text-align: justify\">\u00dcheks olukorraks, kus on alati m\u00f5istlik kasutada andmet\u00fc\u00fcpi <em>serial<\/em>, on primaarv\u00f5tmete korral. Nagu <a href=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/chapter\/andmebaaside-loomise-protsess\/\">\u00fcleeelmises peat\u00fckis<\/a> olnud tabelitelt n\u00e4ha oli, sisaldas iga tabel primaarv\u00f5tmena tunnust <em>id<\/em>, mis oli t\u00e4isarv ning mille eesm\u00e4rgiks oli aidata meil olemit \u00fcheselt identifitseerida. Kasutades andmet\u00fc\u00fcpi <em>serial<\/em>, pole meil uusi andmeid lisades vaja <em>id<\/em> v\u00e4\u00e4rtust ise v\u00e4lja m\u00f5elda ning t\u00e4psustada, sest <em>serial<\/em> andmet\u00fc\u00fcp valib oma v\u00e4\u00e4rtuseks ise esimese vaba oleva t\u00e4isarvu. Sellega oleme me taganud, et iga olemi ehk kirje <em>id<\/em> v\u00e4\u00e4rtus on unikaalne ka siis, kui me seda ise ei t\u00e4psusta.<\/p>\n<p style=\"text-align: justify\">Millal aga kasutada andmet\u00fc\u00fcpi <em>real<\/em> ning millal andmet\u00fc\u00fcpi <em>numeric<\/em>? Kuna <em>numeric<\/em> andmet\u00fc\u00fcp hoiab endas palju t\u00e4psemaid arve kui <em>real<\/em>, siis \u00fcldjuhul on m\u00f5istlik alati andmet\u00fc\u00fcbi <em>real <\/em>asemel valida <em>numeric<\/em> andmet\u00fc\u00fcp.<\/p>\n<table style=\"border-collapse: collapse;width: 100%;height: 130px\">\n<tbody>\n<tr class=\"shaded\" style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>bigint<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">8-baidine t\u00e4isarv<\/td>\n<\/tr>\n<tr style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>integer<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">4-baidine t\u00e4isarv<\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>smallint<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">2-baidine t\u00e4isarv<\/td>\n<\/tr>\n<tr style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>bigserial<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">automaatselt suurenev 8-baidine t\u00e4isarv<\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>serial<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">automaatselt suurenev 4-baidine t\u00e4isarv<\/td>\n<\/tr>\n<tr style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>smallserial<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">automaatselt suurenev 2-baidine t\u00e4isarv<\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>double precision<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">8-baidine ujukomaarv<\/td>\n<\/tr>\n<tr style=\"height: 15px\">\n<td style=\"width: 21.066%;height: 15px\"><code>real<\/code><\/td>\n<td style=\"width: 78.934%;height: 15px\">4-baidine ujukomaarv<\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 10px\">\n<td style=\"width: 21.066%;height: 10px\"><code>numeric<\/code><\/td>\n<td style=\"width: 78.934%;height: 10px\">reaalarv<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Teksti andmet\u00fc\u00fcbid<\/h2>\n<p style=\"text-align: justify\">Peamised teksti andmet\u00fc\u00fcbid on text, <em>varchar<\/em> ning <em>char<\/em>. Kui andmet\u00fc\u00fcp <em>text<\/em> mahutab endasse &#8216;l\u00f5pmatu&#8217; arvu s\u00fcmboleid, siis andmet\u00fc\u00fcpidel <em>varchar<\/em> ning\u00a0<em>char<\/em> tuleks anda kaasa t\u00e4isarv <em>n<\/em>, mis t\u00e4psustab s\u00fcmbolite jada pikkust.<\/p>\n<p style=\"text-align: justify\">Hea tava on see, et <em>text<\/em> andmet\u00fc\u00fcbi asemel kasutatakse <em>varchar<\/em> andmet\u00fc\u00fcpi. P\u00f5hjus selleks on lihtne <span class=\"aCOpRe\">\u2013<\/span> &#8216;l\u00f5pmatu&#8217; pikkusega s\u00fcmbolite jada v\u00f5tab m\u00e4lus v\u00e4ga palju ruumi ning \u00fcldiselt on andmebaasis hoitavatel andmetel siiski mingi m\u00e4\u00e4ratletav s\u00fcmbolite limiit olemas (nt inimese nimi ilmselt ei ole \u00fcle 200 t\u00e4hem\u00e4rgi pikk). Seega alati tasub m\u00f5elda, milline v\u00f5iks olla maksimaalne t\u00e4hem\u00e4rkide arv ning kasutadagi siis <em>varchar<\/em> andmet\u00fc\u00fcpi andmet\u00fc\u00fcbi <em>text<\/em> asemel.<\/p>\n<p style=\"text-align: justify\">Millal aga kasutada andmet\u00fc\u00fcpi <em>char<\/em>? Andmet\u00fc\u00fcpi <em>char<\/em> kasutame me juhul, kui teame, et k\u00f5ik tunnuse v\u00e4\u00e4rtused on alati t\u00e4pselt sama pikkusega. Kui me aga ei saa olla kindlad, et tunnuse v\u00e4\u00e4rtused on alati sama pikkusega, kasutame me andmet\u00fc\u00fcpi <em>varchar<\/em>.<\/p>\n<table style=\"border-collapse: collapse;width: 100%;height: 45px\">\n<tbody>\n<tr class=\"shaded\" style=\"height: 15px\">\n<td style=\"width: 21.2836%;height: 15px\">text<\/td>\n<td style=\"width: 78.7165%;height: 15px\">m\u00e4\u00e4ratlemata pikkusega s\u00fcmbolite jada<\/td>\n<\/tr>\n<tr style=\"height: 15px\">\n<td style=\"width: 21.2836%;height: 15px\">varchar (<em>n<\/em>)<\/td>\n<td style=\"width: 78.7165%;height: 15px\">s\u00fcmbolite jada kuni pikkusega <em>n<\/em><\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 15px\">\n<td style=\"width: 21.2836%;height: 15px\">char (<em>n<\/em>)<\/td>\n<td style=\"width: 78.7165%;height: 15px\">s\u00fcmbolite jada fikseeritud pikkusega <em>n<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Veel andmet\u00fc\u00fcpe<\/h2>\n<p style=\"text-align: justify\">Allolevas tabelis on v\u00e4jla toodud veel m\u00f5ningad kasulikud andmet\u00fc\u00fcbid, mida ilmselt andmebaasi tabelite loomisel vaja l\u00e4heb. Kusjuures nurksulgudes on m\u00e4rgitud \u00e4ra vabatahtlik osa, seega nurksulgudes oleva v\u00f5ib v\u00e4lja j\u00e4tta.<\/p>\n<table class=\"no-lines\" style=\"height: 152px;width: 100%\">\n<tbody>\n<tr class=\"shaded\" style=\"height: 19px\">\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">bit [ (<em>n<\/em>) ]<\/td>\n<td style=\"height: 19px;width: 78.1001%\">bittide jada fikseeritud pikkusega <em>n<\/em><\/td>\n<\/tr>\n<tr class=\"border\" style=\"height: 19px\">\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">varbit [ (<em>n<\/em>) ]<\/td>\n<td style=\"height: 19px;width: 78.1001%\">bittide jada kuni pikkusega <em>n<\/em><\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 19px\">\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">boolean<\/td>\n<td style=\"height: 19px;width: 78.1001%\">t\u00f5ev\u00e4\u00e4rtus (true\/false)<\/td>\n<\/tr>\n<tr class=\"border\" style=\"height: 19px\">\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">date<\/td>\n<td style=\"height: 19px;width: 78.1001%\">kuup\u00e4ev kujul &#8216;yyyy-mm-dd&#8217;<\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 19px\">\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">time [ (<em>p<\/em>) ]<\/td>\n<td style=\"height: 19px;width: 78.1001%\">ilma ajatsoonita kellaaeg kujul &#8216;hh:mm:ss&#8217;, kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\n<\/tr>\n<tr style=\"height: 19px\">\n<td style=\"height: 19px;width: 21.8274%\">time [ (<em>p<\/em>) ] with time zone<\/td>\n<td style=\"height: 19px;width: 78.1001%\">ajatsooniga kellaaeg kujul &#8216;hh:mm:ss+hhmm&#8217; v\u00f5i &#8216;hh:mm:ss-hhmm&#8217;, kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\n<\/tr>\n<tr class=\"shaded\" style=\"height: 19px\">\n<td class=\"border\" style=\"height: 19px;width: 21.8274%\">timestamp [ (<em>p<\/em>) ]<\/td>\n<td style=\"height: 19px;width: 78.1001%\">kuup\u00e4ev ja kellaaeg ilma ajatsoonita, kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\n<\/tr>\n<tr style=\"height: 19px\">\n<td style=\"height: 19px;width: 21.8274%\">timestamp [ (<em>p) <\/em>] with time zone<\/td>\n<td style=\"height: 19px;width: 78.1001%\">kuup\u00e4ev ja kellaaeg koos ajatsooniga, kus <em>p<\/em> on sekundite j\u00e4rel olevate komakohtade arv<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">Millal kasutada erinevaid kellaaegade ning kuup\u00e4evadega seotud andmet\u00fc\u00fcpe on ilmselt k\u00f5igile selge. Samuti peaksite t\u00e4nu Pythonile olema tuttavad ka andmet\u00fc\u00fcbiga <em>boolean<\/em>.<\/p>\n<p style=\"text-align: justify\">V\u00f5\u00f5rasteks andmet\u00fc\u00fcpideks on ilmselt aga <em>bit<\/em> ning <em>varbit<\/em>. \u00dcheks n\u00e4iteks, kus kasutada\u00a0andmet\u00fc\u00fcpi <em>bit<\/em>, on jah\/ei v\u00e4\u00e4rtuste korral <span class=\"aCOpRe\">\u2013<\/span> 1 t\u00e4histab v\u00e4\u00e4rtust &#8216;jah&#8217; ning 0 v\u00e4\u00e4rtust &#8216;ei&#8217;. Samuti sobiks <em>bit<\/em> andmet\u00fc\u00fcpi kasutada, kui miski on lubatud\/keelatud, sissel\u00fclitatud\/v\u00e4ljal\u00fclitatud jne.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p style=\"text-align: justify\">Nagu n\u00e4ha, siis erinevaid andmet\u00fc\u00fcpe on \u00fcpriski palju. Valikuv\u00f5imalus on oluline seet\u00f5ttu, et andmebaasi halduss\u00fcsteem annab alati teada, kui kasutaja sisestab mingile v\u00e4ljale valet t\u00fc\u00fcpi v\u00e4\u00e4rtuse. Ehk kui me kasutame iga tunnuse jaoks v\u00e4ga h\u00e4sti l\u00e4bim\u00f5eldud andmet\u00fc\u00fcpe, mis vastavad v\u00f5imalikult h\u00e4sti tunnuse reaalsele olemusele, on meil v\u00f5imalik andmete sisestamisel tehtavaid vigu v\u00e4ltida, sest andmebaasi halduss\u00fcsteem teavitab meid enamik juhtudel veast. Kui me aga kasutame iga tunnuse jaoks n\u00e4iteks andmet\u00fc\u00fcpi <em>text<\/em>, mis laseb meil hoida \u00fcksk\u00f5ik mis pikkusega s\u00fcmbolite jada, ei saa me kuidagi kontrollida, kas kasutaja sisestas t\u00e4isarvulise tunnuse v\u00e4\u00e4rtuseks t\u00e4isarvu, ujukomaarvu v\u00f5i sootuks midagi muud.<\/p>\n<p style=\"text-align: justify\"><strong>NB!<\/strong> Kui tulevikus peaks esinema vajadus kasutada m\u00f5nda muud andmebaasi halduss\u00fcsteemi kui PostgreSQL, siis tasub teada, et seal v\u00f5ivad andmet\u00fc\u00fcbid olla veidikene erineva nimetusega. Seet\u00f5ttu tasub alati konkreetse andmebaasi halduss\u00fcsteemi dokumentatsiooni uurida ning need erinevused \u00fcle vaadata. \u00dcldjoontes peaks k\u00f5ik siiski \u00fcpriski sarnane olema.<\/p>\n<h2>Enesekontroll<\/h2>\n<div id=\"h5p-30\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-30\" class=\"h5p-iframe\" data-content-id=\"30\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AT_4_quiz\"><\/iframe><\/div>\n<\/div>\n","protected":false},"author":33,"menu_order":4,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-156","chapter","type-chapter","status-publish","hentry"],"part":3,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/156","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":29,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/156\/revisions"}],"predecessor-version":[{"id":1381,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/156\/revisions\/1381"}],"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\/156\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/media?parent=156"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapter-type?post=156"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/contributor?post=156"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/license?post=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}