Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

8. diel - Oracle krok za krokom: Dátové typy a NULL

V minulej lekcii, Oracle krok za krokom: Radenie, Fetch a agregačné funkcie , sme sa dozvedeli niečo o radení ao agregačných funkciách.

Dnes sa vrátime k dátovým typom, predstavíme si tabuľky tých najdôležitejších a povieme si niečo o hodnote NULL.

Dátové typy

Hneď na začiatku seriálu sme si uviedli niekoľko základných dátových typov. Vtedy som vám s nimi nechcel motať hlavu. Reč bola o typoch INT, VARCHAR a DATE. Databáza (konkrétne tu Oracle) ich má samozrejme omnoho viac. Uveďme si pár tabuliek a predstavme si tie najdôležitejšie. Nasledujúce tabuľky obsahujú tie najpoužívanejšie dátové typy.

Celé čísla

Oracle (na rozdiel napr. Od MySQL) nevyužíva celočíselné dátové typy ako TINYINT, MEDIUMINT a BIGINT. Z klasických celočíselných dátových typov je tu iba SMALLINT a INT. Ostatné celočíselné dátové typy nám nahrádza dátový typ NUMBER, za ktorý sa potom do zátvoriek udáva veľkosť (rozsah):

Typ (MySQL) Typ (Oracle) rozsah
TINYINT NUMBER (3) 8b
SMALLINT SMALLINT alebo NUMBER (5) 16b
MEDIUMINT NUMBER (7) 24b
INT INT alebo NUMBER (10) 32b
BIGINT NUMBER (19) 64b
Pozn. ak hľadáte dátový typ boolean (hodnoty TRUE / FALSE), tak na ukladanie tejto hodnoty sa spravidla používa NUMBER(1,0).

Texty

typ rozsah
VARCHAR2 (max. Počet znakov) počet znakov aký si zvolíte, max. 32kB
CHAR (počet znakov) pevný počet znakov aký si zvolíte, max. 2kB
CLOB až 8 terabajtov
NVARCHAR2 (max. Počet znakov) rovnaký ako VARCHAR2, iba pre Unicode znaky
NCHAR (počet znakov) rovnaký ako CHAR, iba pre znaky Unicode
NCLOB rovnaký ako CLOB, iba pre znaky Unicode
Ostatné
typ rozsah
DATE Dátum ako textový reťazec v tvare 'dd.mm.rr', rozsah od '1.1.4712' pnl do '31 .12.4712 'nl
TIMESTAMP Dátum is konkrétnym časom v tvare 'dd.mm.rr hh: mm: ss, ms'
INTERVAL Časový interval medzi dvoma dátumami
BLOB atď. Všeobecná dáta v binárnom tvare. Umožňujú do databázy ukladať napr. Obrázky alebo zvuky.
Hodnota NULL

Dátové typy v databázach sa málinko odlišujú od dátových typov ako ich poznáme v programovacích jazykoch. Kým napríklad v céčku môže mať INT hodnoty len nejakých -32.000+32.000 a nič okrem toho. Databázový INT môže nadobúdať aj hodnoty NULL. NULL nemá vôbec nič spoločné s nulou (0), označuje to, že hodnota nebola ešte zadaná. Dá sa povedať, že to je prázdna hodnota. Filozofia databáz je takto postavená, nezadaných hodnoty majú predvolenú hodnotu NULL (ak im nenastavíte inú) a každý dátový typ má okrem hodnôt, ktoré by sme v ňom očakávali, navyše možnú hodnotu NULL.

Každému stĺpci v tabuľke môžeme tiež už pri tvorbe tabuľky explicitne zakázať hodnotu NULL. Urobíme to pridaním slov NOT NULL za dátový typ stĺpca:

CREATE TABLE knihy
(
  knihy_ID INT PRIMARY KEY,
  nazev VARCHAR2(50) NOT NULL,
  autor VARCHAR2(50)
);

Vidíme, že u primárneho kľúča NOT NULL pridávať nemusíme, ten totiž NULL nikdy byť nemôže. U stĺpca nazev sme hodnotu NULL explicitne zakázali, au stĺpce autor nechali povolenú.

Môžeme to teraz otestovať. Skúsme si spustiť nasledujúci dotaz:

INSERT INTO knihy(knihy_ID, nazev) VALUES (1, 'Střet Králů')

Všetko prebehlo v poriadku. Pri vložení zázname sme tu vynechali stĺpec autor, to ale nevadí, pretože ten hodnotu NULL obsahovať môže. Skúsme si teraz otázku trochu upraviť:

INSERT INTO knihy(knihy_ID, autor) VALUES (2, 'George R.R. Martin')

výsledok:

Error starting at line : 1 in command -
INSERT INTO knihy(knihy_ID, autor) VALUES (2, 'George R.R. Martin')
Error report -
ORA-01400: do ("NOVESCHEMA"."KNIHY"."NAZEV") nelze vložit hodnotu NULL

Z čoho už vidíme, že do stĺpca nazev hodnotu NULL vložiť nemôžeme.

Prínos hodnoty NULL

Asi sa pýtate na čo hodnota NULL vlastne je? Jej prínos je v tom, že spoznáme, či bola hodnota zadaná. Napr. pri zadávaní čísla neexistuje hodnota, podľa ktorej by sme poznali, že číslo nie je zadané. Keby sme si k tomuto určili hodnotu nula (0), nevieme, či používateľ číslo nezadal alebo zadal práve nulu. NULL okrem iného aj šetrí miesto v databáze, kde na rozdiel od pôvodnej hodnoty nezaberá miesto.

NULL na strane aplikácie

Už sme si povedali o tom, že programovacie jazyky hodnotu NULL spravidla nemajú (teda tie staticky typizovanej). V jazykoch ako je potrebné dynamické PHP nemusíme dátový typ vôbec riešiť, aj keď je dobré vedieť, že sa na NULL môžeme spýtať, keď to budeme potrebovať. Môžeme síce v nových verziách PHP určiť dátový typ, ale nie je to podmienkou. V jazykoch typovaných, ako je potrebné Java alebo C #, musíme použiť iné dátové typy. VC # môžeme ktorýkoľvek dátový typ označiť ako NULLovatelný a on pochopí, že v ňom môže byť aj NULL. V Jave budeme používať obaľovacej dátové typy s veľkými písmenami, teda napr. Pre čísla miesto int použijeme Integer.

Upresňujúce informácie k dátovým typom

K dátovým typom (ak chcete k stĺpcom) môžeme uviesť niekoľko upresňujúcich informácií. Už sme sa stretli s PRIMARY KEY. Pozrime sa na ďalšie.

Názov popis
GENERATED ALWAYS AS IDENTITY (START WITH n INCREMENT BY m) Pre automatické navyšovanie ID. Pri vkladaní riadku dajte tejto položke hodnotu NULL a systém jej automaticky pridelí hodnotu o m väčšia ako dal minulému riadku, pričom začiatok tu bude číslo n.
UNIQUE Hovorí, že nesmie existovať viac riadkov, ktoré majú v tejto položke rovnakú hodnotu (s výnimkou hodnoty NULL). Zmysel to má iba u kľúčov.
NOT NULL Tahle hodnota nesmie byť prázdna - nepôjde do nej vložiť hodnota NULL.
PRIMARY KEY Tým sa určí, že sa tento stĺpec (v každej tabuľke max. Jeden) bude používať ako kľúč. Vhodné pre nejaké relatívne krátkej identifikačné kódy, podľa ktorých budeme riadky najčastejšie hľadať. Primárny kľúč je vždy NOT NULL a UNIQUE ; aj keď to nenařídíme, dostane tyhle vlastnosti implicitne.
DEFAULT hodnota Východisková hodnota, ktorú položka dostane, keď ju pri vkladaní riadku neuvedieme. Nefunguje na binárne dátové typy a položky s GENERATED.

V budúcej lekcii, Oracle krok za krokom: Otázky cez viac tabuliek (JOIN) , si pripravíme tabuľky a testovacie dáta pre jednoduchý redakčný systém, ako je potrebné tu na ITnetwork. Ďalšie diely totiž budeme robiť otázky cez viac tabuliek a tzv. Poddotazy. Tak bude váš arzenál základných databázových nástrojov kompletné pre tvorbu prakticky akejkoľvek aplikácie:)


 

Predchádzajúci článok
Oracle krok za krokom: Radenie, Fetch a agregačné funkcie
Všetky články v sekcii
Oracle
Preskočiť článok
(neodporúčame)
Oracle krok za krokom: Otázky cez viac tabuliek (JOIN)
Článok pre vás napísal Matěj Kadlec
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se programování věnuje od střední školy, nyní studuje informatiku na VŠB-TUO a pracuje jako ETL developer pro společnost IDC. Mezi jeho oblíbené jazyky patří Python a SQL.
Aktivity