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 |
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 |
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. |
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
.
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. |
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 .