Andmetüübid
Kuna igal atribuudil peab olema olema määratud tema andmetüüp, tutvutegi esmalt peamiste SQL Anywhere's kasutusel olevate andmetüüpidega. Kuna andmetüübid võivad erinevatel andmebaaside juhtimissüsteemidel erineda, seetõttu tuleb enne uue andmebaasisüsteemiga tööle hakates tutvuda kindlasti antud andmebaasisüsteemi dokumentatsiooniga.
Tekstilised andmetüübid
Tekstilist andmetüüpi kasutame siis kui on tarvis talletada teksti. Tekst võib koosneda ühest tähest (sümbolist) või tervest raamatust (palju sümboleid). Andmetüübi valimisel teksti talletamiseks tuleb analüüsida, kas teksti pikkus (mida tabelisse salvestada) on teada või teksti pikkus ei ole teada. Näiteks isiku nime puhul võime teha üldistuse, et üle saja sümboli vaja ei ole. Samas, kui me tahame tabelisse salvestada näiteks veebilehelt kogutud vabatekstina sisestatud tagasisidet, siis võib-olla mõistlik mitte piirata tabelis oleva andmetüübi pikkusega salvestatava teksti pikkust. Põhilised tekstilised andmetüübid on:
- varchar(n) - tekst kuni n sümbolit. Kasutatakse, kui oskame prognoosida atribuudi võimalikku maksimaalset pikkust. Näiteks eesnimi, perenimi, asula, pealkiri jms, aga ka siis kui tunnus sisaldab nii arve kui teksti (näiteks autonumber) või kui tunnust ei käsitleta kui arvu (näiteks isikukood, telefoninumber jms)
- char - ühesümboline tekst. Enamuses andmebaasi juhtimissüsteemides kasutusel char(n) fikseeritud pikkusega teksti jaoks, mis on alati täpselt n sümbolit. Kasutatakse olukorras, kus meil on atribuut, mille pikkus on fikseeritud. Näiteks olemi riik puhul võib olla üheks omaduseks riigi kood (Maailma riikide koodid Codes of countries of the World). Eesti puhul on koodiks EE. Antud juhul on kõik koodid täpselt kahe sümboli pikkused, seega saame kasutada atribuudi riigikood puhul andmetüübina char(2).
- text - tundmatu pikkusega tekst. Tekst tüüpi andmetüüpi peaks kasutama ainult siis, kui varchar või char andmetüüpe ei ole võimalik kasutada. Kuna text andmetüüp on mõeldud hoidma sellise pikkusega tekstilist infot, mille pikkust me ei suuda ette prognoosida, siis on andmebaasisüsteemi poolt text andmetüübi kasutamine väga ebaefektiivne, kuna text andmetüüp võtab arvutis palju ressursse (mälu ja salvestuspinda). Text andmetüüp kasutamine võib tulla kaalumisele näiteks juhul, kui meil on rakendus, mis kogub klientidelt tagasisidet ja me ei ole kuidagi piiranud sisestatava tagasiside pikkust. Samas, kui me oleme rakenduse tasemel piiranud sisestatavate sümbolite arvu näiteks 1000, siis tasub kasutada text andmetüübi asemel varchar(1000) kuna nüüd teame, et maksimaalne sümbolite arv on 1000 tähemärki.
Arvulised andmetüübid
Lisaks tekstile salvestatakse andmebaasis ka arve. Nende puhul on võimalik kasutada erinevaid andmetüüpe
- integer - täisarv, mis mahub 4 baidi sisse (-2147483647 kuni +2147483647). Taas mõelda, kui suuri arve on vaja sisestada, sest saab ka kasutada 1 baidilist tinyint, 2 baidilist smallint või 8 baidilist bigint.
- decimal(kogupikkus, komatagune pikkus) ja numeric(kogupikkus, komatagune pikkus) - ratsionaalarv. Andmemahu määrab kogupikkus (kuni 4 sümbolit 2 baiti, 5-9 sümbolit 4 baiti, 10-18 sümbolit 8 baiti, 19-126 sümbolit 16 baiti). Kasutatakse enamasti hinna märkimisel. Näiteks elektroonikal numeric(6,2), mis võtab 4 baiti, köögiviljadel võiks olla numeric(4,2), mis võtaks poole vähem andmemahtu.
- float ja real on 4 baidilised reaalarvude andmetüübid, aga saab ka kasutada 8 baidilist reaalarvu tüüpi double.
Aega kirjeldavad andmetüübid
Kuupäevade ja kellaaja märkimiseks on eraldi andmetüübid. Samas võib küsida, et miks ei võiks kasutada kuupäeva hoidmiseks mõnda teksti hoidmiseks mõeldud andmetüüpi või mõnda numbrite hoidmiseks mõeldud andmetüüpi? Tehniliselt ei piira miski tekstina salvestada kuupäeva kujul "2021-12-29". Samuti võib proovida mahutada kuupäeva ka numbrina. Näiteks integer andmetüübiga väljale kujul 20211229 või loome kolm eraldi integer välja - aasta, kuu ja päev. Iga andmetüübiga on aga seotud andmebaasi juhtimisüsteemiga kaasa tulevaid funktsioone. Näiteks agregeeriv funktsioon avg(), mis arvutab aritmeetilise keskmise on mõeldud arvulisteste andmetüüpidega opereerimisel. Funktsioon upper() on mõeldud tekstiliste andmetüüpidega tegelemisel. Omaette funktsioonid tulevad kaasa ka kuupäevadega ja ajaga seotud andmetüüpidega. Seega on rangelt soovitatav kuupäevade ja ajaga seotud andmete talletamiseks kasutada date ja time andmetüüpe.
- date - kuupäev formaadis yyyy-mm-dd, kasutab 4 baiti andmemahtu.
- datetime - lisaks kuupäevale kuvatakse ka kellaaeg, 8 baiti võtab ja formaat yyyy-mm-dd hh:mm:ss.
- time - kellaaja märkimiseks, kuid sybase käsitleb seda kui stringi, seega kasutamisel peab "ütlema" programmile, millise formaadiga tegu.
Teised andmetüübid
Lisaks tekstilistele, arvulistele ja aega kirjeldavatele andmetüüpidele toome siinkohal ära veel kaks andmetüüpi.
- bit, mis võtab vähe andmemahtu (1 bait) ja kuhu saab sisestada 0 või 1, kus siis need numbrid tähistavad vastavalt ei/jah, väljas/sees, vale/õige vms.
- binary (maksimaalne pikkus) - saab sisaldada ka pilte.
Enesekontroll