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 - PostgreSQL - Dátové typy a NULL

V minulej lekcii, PostgreSQL - Export , sme si ukázali rôzne typy exportov databázy.

V minulom dieli seriálu tutoriálov o PostreSQL databáze 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 INTEGER, CHARACTER Varying a DATE. Databáza (konkrétne tu PostgreSQL) ich má samozrejme omnoho viac. Uveďme si pár tabuliek a predstavme si tie najdôležitejšie.

Celé čísla

typ veľkosť rozsah
SMALLINT 2 byty -32768 to +32767
INTEGER 4 byty -2147483648 to +2147483647
BIGINT 8 bytov -9223372036854775808 to +922337203685­4775807
Texty
Type veľkosť
CHARACTER (n) fixné dĺžka
CHARACTER Varying (n) variabilná dĺžka s limitom
TEXT neobmedzená dĺžka
V ASCII textoch platí uvedenej maximálnej dĺžky priamo pre znaky (1 znak = 1 B). V kódovanie Unicode je potrebné počítať s tým, že jeden znak môže zabrať viac bytov.

Boolean

Na rozdiel napríklad od MySQL ponúka PostgreSQL dátový typ boolean.

typ veľkosť hodnoty
boolean 1 byte true / false
Dátum a čas
typ veľkosť popis
DATE 4 byty dátum
TIMESTAMP 8 bytov dátum a čas
TIMESTAMP WITH TIME ZONE 8 bytov dátum a čas s časovou zónou
Binárne dáta

Do databázy môžeme uložiť aj dáta ako obrázky alebo iné súbory, aj keď sa to v praxi príliš nerobí.

typ veľkosť
byte 1 alebo 4 byty plus veľkosť binárneho reťazca
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 až +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á. 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 napr. Príkazom INSERT vložíme užívateľa a vyplníme len niektoré hodnoty, do ďalších hodnôt sa vloží NULL. Skúsme si to:

INSERT INTO uzivatel (jmeno, prijmeni) VALUES ('Pan', 'Neuplny');

výsledok:

Hodnota NULL v PostgreSQL - PostgreSQL databázy krok za krokom

Užívateľa vyhľadáme takto:

SELECT * FROM uzivatel WHERE datum_narozeni IS NULL OR pocet_clanku IS NULL;
Vyhľadávanie podľa NULL v PostgreSQL - PostgreSQL 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 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ť. 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ť 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í.

Názov popis
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 Táto 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 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 dátový typ. Uveďme si nejaký príklad:
DROP TABLE IF EXISTS uzivatel;

CREATE TABLE uzivatel (
    uzivatel_id serial NOT NULL,
    jmeno character varying(60) NOT NULL,
    prijmeni character varying(60) NOT NULL,
    datum_narozeni date,
    pocet_clanku integer NOT NULL DEFAULT 0,
    PRIMARY KEY (uzivatel_id)
);

INSERT INTO uzivatel (jmeno, prijmeni, datum_narozeni) VALUES ('Jan', 'Novák', '1978-03-21');
INSERT INTO uzivatel (jmeno, prijmeni, datum_narozeni, pocet_clanku) VALUES ('Jana', 'Nováková', '1976-11-02', 7);

SELECT * FROM uzivatel;

vysvetlenie:

DROP TABLE IF EXISTS uzivatel

Zmaže tabuľku uzivatel z databázy. If exists hovorí, že ak takáto tabuľka neexistuje, tak to nevadí. Ak by sme if exists nepoužili a tabuľka uzivatel by neexistovala, skončil by SQL príkaz chybou:

ERROR:  table "uzivatel" does not exist

********** Error **********

ERROR: table "uzivatel" does not exist
SQL state: 42P01

Popis chyby hovorí, že tabuľka uzívate neexistuje.

CREATE TABLE uzivatel (...)

Vytvorí tabuľku uzivatel tak ako je nadefinované. Stĺpce uzivatel_id, meno, priezvisko a počet_clanku budú nenulové (not null) a stĺpec pocet_clanku bude mať predvolenú hodnotu 0. To znamená, že v prípade, že pri vkladaní dát hodnotu pre tento stĺpec neuvedieme, vloží sa tam nula. U stĺpca uzivatel_id by sme NOT NULL nemuseli uvádzať, pretože tento stĺpec je PRIMARY KEY, kedy je NULL hodnota neprípustná.

INSERT INTO uzivatel ....

Vloží dáta do tabuľky uzivatel.

SELECT * FROM uzivatel;

Získa všetky záznamy z tabuľky uzivatel.

pgAdmin - PostgreSQL databázy krok za krokom

Všimnite si, že užívateľovi Ján Novák sa do stĺpca pocet_clanku vložila defaultný hodnota 0;

Nabudúce 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
PostgreSQL - Export
Všetky články v sekcii
PostgreSQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
PostgreSQL - Otázky cez viac tabuliek (JOIN)
Článok pre vás napísal vita
Avatar
Užívateľské hodnotenie:
1 hlasov
vita
Aktivity