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

V predchádzajúcom cvičení, Riešené úlohy k 7. lekcii MS-SQL, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

Dnes sa v MS-SQL tutoriáli 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 nášho on-line kurzu MS-SQL 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 MS-SQL) ich má samozrejme oveľa viac. Uveďme si niekoľko tabuliek a predstavme si tie najdôležitejšie.

Celé čísla

Na celé čísla používame tieto dátové typy:

Typ Rozsah Veľkosť
TINYINT 0 až 255 8 bitov
SMALLINT -32 768 až 32 767 16 bitov
INT -2 147 483 648 až 2 147 483 647 32 bitov
BIGINT -9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 64 bitov

Ak hľadáte dátový typ boolean (hodnoty true/false), tak na ukladanie tejto hodnoty sa spravidla používa typ BIT (0/1).

Texty

Už vieme, že existujú aj typy VARCHAR a CHAR. Tie však nepodporujú Unicode kódovanie a mohli by sme v nich mať problémy s diakritikou. Preto namiesto nich budeme používať typy:

Typ Rozsah
NVARCHAR (max. počet znakov) počet znakov, aký si zvolíme
NCHAR (počet znakov) pevný počet znakov, aký si zvolíme

N v dátových typoch označuje National, ako medzinárodný. Zaujímavá situácia nastane, keď zapíšeme dátový typ ako NVARCHAR (MAX). V tejto chvíli je dĺžka textu neobmedzená (prakticky je tam limit asi 2GB, čo jednou hodnotou len ťažko zaplníme). Na dlhé texty sa v minulosti používal typ NTEXT, ktorý je však teraz zastaraný.

Ostatné

Ďalej sa nám budú ešte hodiť nasledujúce dátové typy:

Typ Popis
DATE Dátum ako textový reťazec v tvare 'YYYY-MM-DD', rozsah od '0001-01-01' do '9999-12-31'
TIME Čas ako textový reťazec v tvare 'hh:mm:ss'
DATETIME2 Prakticky je to zreťazenie dátumu a času: 'YYYY-MM-DD hh:mm:ss' (prípadne 'YYYY-MM-DDThh:mm:ss')
BLOB a spol. Všeobecné dáta v binárnom tvare. Umožňujú do databázy ukladať napr. obrázky alebo iné súbory.

Hodnota NULL

Dátové typy v databázach sa trochu odlišujú od dátových typov, ako ich poznáme v programovacích jazykoch. Zatiaľ čo napríklad v jazyku C môže mať typ int hodnoty len nejakých -32 768 až 32 767 a nič okrem toho, databázový INT môže nadobúdať aj hodnotu NULL. NULL nemá vôbec nič spoločné s nulou (0), označuje to, že hodnota ešte nebola zadaná. Filozofia databáz je takto postavená, nezadané hodnoty majú predvolenú hodnotu NULL (ak im nenastavíme 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. Dátovému typu túto hodnotu môžeme aj zakázať, viac ďalej.

Ak si spomíname, keď sme vytvárali databázu a tabuľku Pouzivatelia, odškrtávali sme Allow Nulls. To zaistí, že sa nám do databázy NULL nedostanú. Skúsme si to. Zavolajme na našej tabuľke Pouzivatelia tento príkaz:

INSERT INTO [Pouzivatelia] ([Meno], [Priezvisko]) VALUES ('Pán', 'Neúplný');

Výsledkom bude chyba, ktorá nám hovorí, že niektoré stĺpce neumožňujú NULL:

Chyba pri vkladaní NULL hodnôt - MS-SQL databázy krok za krokom

Otvoríme si designer tabuľky Pouzivatelia dvojklikom na ňu v SQL Server Object Exploreri, zaškrtneme Allow Nulls pri všetkých stĺpcoch okrem Id, potvrdíme tlačidlom Update a následne tlačidlom Update Database:

Allow Nulls - MS-SQL databázy krok za krokom

Teraz rovnaký dotaz spustime znovu:

INSERT INTO [Pouzivatelia] ([Meno], [Priezvisko]) VALUES ('Pán', 'Neúplný');

Keď sa teraz pozrieme do dát v tabuľke (pravým tlačidlom klikneme na tabuľku a zvolíme View Data), na konci bude Pán Neúplný a bude mať v nevyplnených stĺpcoch NULL:

Hodnoty NULL v tabuľke - MS-SQL databázy krok za krokom

Prínos hodnoty NULL

Asi sa pýtate, na čo hodnota NULL vlastne je? Jej prínos je v tom, že zistíme, či bola hodnota zadaná. Napr. pri zadávaní čísla neexistuje hodnota, podľa ktorej by sme zistili, že číslo nie je zadané. Keby sme si na tento účel 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 predvolených hodnôt nezaberá miesto.

NULL na strane aplikácie

Už sme si povedali o tom, že programovacie jazyky hodnotu NULL spravidla nemajú (teda tie staticky typované). V typovaných jazykoch, ako je napríklad Java alebo C#, musíme použiť iné dátové typy. V C# môžeme ktorýkoľvek dátový typ označiť ako nullovateľný a on pochopí, že v ňom môže byť aj NULL. Používa sa na to otáznik, typ je potom napr. int?.

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

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

Názov Popis
IDENTITY Len pre čísla. Ak pri vkladaní riadku dáme tejto položke hodnotu NULL, databáza jej automaticky pridelí hodnotu o 1 väčšiu, než dala minulému riadku (prírastok sa teoreticky dá zmeniť, ale tým sa teraz nebudeme zaťažovať). Výborná vec na pohodlnú tvorbu unikátnych identifikačných kľúčov.
UNIQUE Hovorí, že nesmie existovať viac riadkov, ktoré majú v tejto položke rovnakú hodnotu (s výnimkou hodnoty NULL).
NOT NULL Udáva, že daná hodnota nesmie byť prázdna – nepôjde do nej vložiť hodnota NULL.
PRIMARY KEY Určuje, že sa tento stĺpec bude používať ako primárny kľúč. Vhodné pre nejaké relatívne krátke 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 nenariadime, dostane tieto vlastnosti implicitne.
DEFAULT hodnota Predvolená hodnota, ktorú položka dostane, keď ju pri vkladaní riadku neuvedieme.

Nové slová spresňujúce dátový typ sa vkladajú zaň, rovnako ako to bolo pri IDENTITY. Uveďme si nejaký príklad:

CREATE TABLE [Osoby] (
    [Id] INT PRIMARY KEY IDENTITY,
    [Meno] NVARCHAR(50) NOT NULL,
    [Email] NVARCHAR(100) UNIQUE,
    [Vek] SMALLINT NOT NULL DEFAULT 0
);

V nasledujúcom kvíze, Kvíz - Výber dát, radenie a dátové typy v MS-SQL, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Riešené úlohy k 7. lekcii MS-SQL
Všetky články v sekcii
MS-SQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
Kvíz - Výber dát, radenie a dátové typy v MS-SQL
Článok pre vás napísal Michal Žůrek - misaz
Avatar
Užívateľské hodnotenie:
18 hlasov
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity