Slovník pojmů

Databázový sloupec a datový typ

Cena, měna, čas, e-mail a externí identifikátor nemají stejnou povahu. Datový typ a pravidla ji mají zachovat už při uložení.

Stručná definice

Typ určuje přípustné hodnoty i jejich význam.

Sloupec je jeden pojmenovaný údaj v řádku, například total_amount nebo created_at. Datový typ omezuje množinu hodnot a dává jim sémantiku: integer je celé číslo, numeric přesná desetinná hodnota a timestamptz okamžik v čase. Přesné názvy a rozsahy se podle databáze mohou lišit.

Typ doplňují pravidla, zda hodnotu lze vynechat, jaká má být výchozí hodnota a jaké další omezení platí. NULL znamená chybějící, neznámou nebo neaplikovatelnou hodnotu podle modelu. Není to nula ani prázdný řetězec a SQL s ním pracuje odlišně.

Jaký problém řeší

Správné uložení hodnot dříve, než je začne používat aplikace

Sloupce a typy dávají datům základní integritu, možnost řazení, porovnání a výpočtů.

  • přesná cena objednávky a měna
  • stav importu a externí identifikátor
  • datum vytvoření a okamžik změny
  • e-mail, telefon a další textové údaje
  • UUID pro identitu a JSONB pro proměnlivý integrační payload

SQL ukázka

PostgreSQL sloupce pro import objednávky

Ukázka ukazuje přesné typy pro hodnoty, které se budou filtrovat, validovat nebo dále zpracovávat.

CREATE TABLE order_imports (
    id uuid PRIMARY KEY,
    external_order_id text NOT NULL,
    total_amount numeric(12, 2) NOT NULL,
    currency char(3) NOT NULL,
    status text NOT NULL,
    customer_email text NOT NULL,
    created_at timestamptz NOT NULL DEFAULT now(),
    metadata jsonb NOT NULL DEFAULT '{}'::jsonb
);

Jak funguje

Od významu údaje k bezpečné změně

Textová alternativa: nejprve se určí význam hodnoty, potom typ a pravidla, nakonec se ověří migrace i přenos do aplikace.

  1. Význam Určí se, zda jde o částku, kód, datum, identifikátor nebo proměnlivý doplněk.
  2. Typ a rozsah Zvolí se vhodný typ a případně přesnost či délka podle významu dat.
  3. NULL a DEFAULT Rozhodne se, zda hodnota může chybět a co se stane při jejím vynechání v INSERTu.
  4. Další pravidlo Pokud typ nestačí, doplní se constraint, například nezáporná cena nebo jedinečný externí kód.
  5. Migrace a aplikace Změna typu se ověří nad existujícími daty i mapováním do PHP a API.

Důležité pojmy

Každý typ má odlišný kompromis.

Ukázky názvů vycházejí z PostgreSQL; jiné databáze mohou používat jiné typy nebo detaily chování.

Čísla

integer je pro celá čísla. numeric nebo decimal s přesností a měřítkem je vhodný pro peněžní částku; běžný floating-point typ neumí přesně reprezentovat mnoho desítkových hodnot.

Text a kódy

text drží obsahový text. Text může být i správný typ pro telefonní číslo nebo kód, protože může obsahovat úvodní nuly, plus či mezery.

Datum a čas

date je kalendářní den. Datum bez časové zóny není totéž co okamžik v čase; PostgreSQL timestamptz pracuje s okamžikem a převodem zón.

UUID, JSON a enum

UUID je identifikátor, nikoli autorizace. JSONB je v PostgreSQL vhodný pro proměnlivá data. Enum může uzavřít stabilní hodnoty, ale změny procesu pak vyžadují migraci.

NULL, NOT NULL a DEFAULT

NOT NULL je constraint. DEFAULT se použije při vynechání hodnoty; není to totéž jako povinná hodnota ani náhrada aplikačního rozhodnutí.

Vztah k podobným pojmům

Sloupec je základ tabulky, ne celý datový model.

Datový typ, constraint a PHP typ mají odlišnou odpovědnost.

Databázová tabulka
Seskupuje sloupce do struktury jednoho typu záznamu.
Databázový constraint
Doplňuje pravidlo nad typem, například NOT NULL, UNIQUE nebo CHECK.
Primární klíč
Používá jeden nebo více sloupců jako hlavní identitu řádku.
Databázová migrace
Verzovaně mění typ, výchozí hodnotu nebo omezení nad existujícími daty.

Výhody a omezení

Obecný textový sloupec není univerzální řešení.

Přínosy

  • odmítnutí nesmyslných hodnot už při zápisu
  • srozumitelnější výpočty, porovnání a řazení
  • základ pro constrainty, indexy a migrace
  • jasnější kontrakt mezi databází, PHP a API

Časté chyby

  • ukládání finančních hodnot jako floating point
  • zaměnění NULL s nulou nebo prázdným textem
  • datum bez zóny použité jako okamžik v čase
  • telefon uložený jako běžné číslo
  • všechna data jako text či JSON bez důvodu
  • představa, že UUID sám chrání přístup k datům

Praktický příklad

Typy pro import objednávky

Cena je numeric(12, 2), měna char(3), stav text nebo promyšlený enum, čas vytvoření timestamptz a e-mail text. Externí marketplace ID je text: jeho struktura může obsahovat nuly nebo jiné znaky a jedinečnost se vyjadřuje samostatným constraintem.

Proměnlivý payload integrace může patřit do JSONB. Jádro objednávky, například cena, měna, identita a vazby, tím nemá být skryto; potřebuje konkrétní typy a pravidla.

Na co myslet

Typ vychází z významu dat, ne jen z aktuálního formuláře.

Změna typu u velké tabulky může být provozně náročná, proto je vhodné model a migraci ověřit včas.

  • pro částky použít přesný decimal nebo menší jednotky dle domény
  • zvažovat rozdíl mezi kalendářním datem a okamžikem v čase
  • nepřipisovat varchar délce význam úplné business validace
  • NULL používat jen pro jasně popsaný stav
  • u enumu zohlednit, jak často se business proces mění

Časté otázky

Typy hodnot v praxi

Je NULL prázdný řetězec?

Ne. Jde o jiný stav, který vyjadřuje chybějící nebo neaplikovatelnou hodnotu. Nula a prázdný text jsou konkrétní uložené hodnoty.

Je UUID bezpečnostní ochrana?

Ne. Je to typ identifikátoru. Přístup ke konkrétnímu záznamu musí vždy ověřit serverová autorizace.

Proč neukládat cenu jako float?

Binární floating point neumí přesně reprezentovat mnoho desítkových hodnot. Pro částky je běžnější přesný numeric nebo model v menších jednotkách.

Stačí uložit datum jako text?

Jen výjimečně. Datový typ databázi umožní hodnotu validovat, porovnávat a pracovat s ní správněji.

Jak tento princip používám v praxi

Typy a pravidla volím podle významu dat.

V databázovém návrhu řeším přesné hodnoty, historická data, integrační payloady i změny schématu tak, aby byla data dlouhodobě čitelná.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.