Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

V minulej lekcii, MS-SQL krok za krokom: Import , sme si ukázali import databázy.

Dnes sa v MS-SQL tutoriálu 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 omnoho viac. Uveďme si niekoľko tabuliek a predstavme si tie najdôležitejšie.

Celé čísla

typ rozsah
TINYINT 8-bitové číslo
SMALLINT 16-bitové číslo
INT 32b
BIGINT 64b
Pozn .: 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

typ rozsah
Nvarchar (max. Počet znakov) počet znakov aký si zvolíte
NCHAR (počet znakov) pevný počet znakov aký si zvolíte
Už vieme, že existujú aj typy VARCHAR a CHAR. Tie ale nepodporujú Unicode kódovanie a mohli by ste v nich mať problémy s diakritikou. Preto ich nebudeme používať. 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 raz hodnotou len ťažko zaplníme). Pre dlhé texty sa v minulosti používal typ NTEXT, ktorý je však teraz zastaraný.

Ostatné

typ popis
DATE Dátum ako textový reťazec v tvare 'rrrr-mm-dd', rozsah od '0001-01-01' do '9999-12-31'
TIME Čas ako textový reťazec v tvare 'hh: mm: ss'
DATETIME Prakticky je to zreťazenie dátumu a času: 'rrrr-mm-dd hh: 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 málinko odlišujú od dátových typov, ako ich poznáme v programovacích jazykoch. Kým 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 hodnoty NULL. NULL nemá vôbec nič spoločné s nulou (0), označuje to, že hodnota nebola ešte zadaná. 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. Dátovému typu túto hodnotu môžeme aj zakázať, viac ďalej.

Ak si spomínate, keď sme vytvárali databázu, odškrtávali sme Allow Nulls. To zabezpečí, že sa nám do databázy NULL nedostanú. Skúsme si to:

INSERT INTO [Uzivatele] ([Jmeno], [Prijmeni]) VALUES ('Pan', 'Neuplny');

Výsledkom bude chyba, ktorá nám hovorí, že niektoré stĺpce neumožňujú NULL. Otvorte si designer tabuľky, zaškrtejte Allow Nulls u všetkých stĺpcov okrem Id, potvrďte tlačidlom Update a následne tlačidlom Update Database. Teraz dotaz spustite znova. Keď sa teraz pozriete do dát v tabuľke, na konci bude Pan 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 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 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. Používa sa k tomu otáznik, typ je potom napr. int?.

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 IDENTITY. Pozrime sa na ďalšie.

Názov popis
IDENTITY Len pre čísla. Pri vkladaní riadku dajte tejto položke hodnotu NULL a databázy jej automaticky pridelí hodnotu o 1 väčšia ako dala minulému riadku (prírastok sa teoreticky dá zmeniť, ale tým sa teraz nebudeme zaťažovať). Výborná vec pre 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 (v každej tabuľke max. Jeden) bude používať ako primárny 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 tieto vlastnosti implicitne.
DEFAULT hodnota Východisková hodnota, ktorú položka dostane, keď ju pri vkladaní riadku neuvedieme.
Nové slová upresňujúce dátový typ sa vkladajú za neho, rovnako ako tomu bolo u IDENTITY. Uveďme si nejaký príklad:
CREATE TABLE [Osoby] (
    [Id] INT NOT NULL IDENTITY(1, 1),
    [Jmeno] CHAR(35) NOT NULL,
    PRIMARY KEY ([Id])
);

V budúcej lekcii, MS-SQL 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 lekcie 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
MS-SQL krok za krokom: Import
Všetky články v sekcii
MS-SQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
MS-SQL krok za krokom: Otázky cez viac tabuliek (JOIN)
Článok pre vás napísal Michal Žůrek - misaz
Avatar
Užívateľské hodnotenie:
2 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