Slovník pojmů

Relační databáze

Relační model není jen tabulkový vzhled dat. Stojí na významu sloupců, identitě řádků, vztazích, constraintách, SQL dotazech a transakcích.

Stručná definice

Tabulky a klíče popisují související fakta.

Relační databáze drží jeden druh faktu v tabulce a vztahy vyjadřuje klíči. Tabulka zákazníků tak nemusí opakovat údaje v každé objednávce; objednávka na zákazníka odkazuje. Databáze potom může spojovat související řádky dotazem, chránit odkazy cizím klíčem a provádět změny v transakci.

Relační model není Doctrine ORM ani tabulkový procesor. ORM je aplikační vrstva mapující PHP objekty; spreadsheet typicky nehlídá stejnou integritu a souběh. Konkrétní relační databází je například PostgreSQL, zatímco SQL je jazyk, kterým se s takovými daty pracuje.

Jaký problém řeší

Vztahy, které nesmějí skončit jako volný text

Relační model má největší hodnotu tam, kde data vzájemně souvisejí a pravidla musejí platit i při souběhu.

  • objednávkový proces, položky, platby, vratky a sklad
  • produkty, varianty, ceny, kategorie a výrobci
  • uživatelé, organizace, role a tenantní kontext
  • importy propojené s jedinečnými externími identifikátory
  • interní systémy s přehledy napříč více druhy dat

Praktický model

Vztahy v e-shopu

Objednávka obsahuje customer_id. Položka objednávky obsahuje order_id a product_id. Cena a název položky mohou být historický snapshot nákupu, zatímco tabulka products drží aktuální katalogový stav. Tato záměrná duplicita má jiný časový význam a není stejná jako nekontrolované kopírování dat.

Při založení objednávky databáze ověří cizí klíče a v transakci uloží objednávku i její položky. Dotaz s JOIN potom pro administraci sestaví potřebný přehled.

Jak funguje

Zákazník, objednávka a položka v jednom modelu

Textová alternativa: jeden zákazník má více objednávek; objednávka má více položek a každá položka odkazuje na produkt.

  1. Zákazník Tabulka customers drží stabilní identitu a údaje zákazníka.
  2. Objednávka Tabulka orders nese customer_id, který odkazuje na zákazníka a vyjadřuje vztah jeden ku více.
  3. Položka objednávky Tabulka order_items nese order_id a product_id; rozděluje opakující se položky na samostatné řádky.
  4. Klíče a constrainty Primární klíče určují identitu a cizí klíče chrání platné vazby mezi tabulkami.
  5. SQL join Dotaz spojí objednávku, zákazníka a položky pro administraci nebo API, aniž by se celý záznam kopíroval.

Důležité pojmy

Relace znamená víc než několik tabulek vedle sebe.

Pojmy popisují, co data znamenají a jak spolu mohou souviset.

Tabulka, řádek a sloupec

Tabulka ukládá jeden typ záznamu. Řádek je konkrétní záznam a sloupec jeho pojmenovaný atribut s datovým typem.

Doména hodnot

Datový typ a další pravidla určují, jaké hodnoty dávají ve sloupci smysl. Cena, datum a e-mail nemají stejnou povahu.

Klíče a vztahy

Primární klíč identifikuje řádek. Cizí klíč odkazuje na jiný řádek a chrání referenční integritu.

Jedna ku jedné, jedna ku více, více ku více

Jedna objednávka má více položek. Vztah více ku více, například produkt a kategorie, se vyjadřuje spojovací tabulkou.

Normalizace a transakce

Normalizace omezuje neřízené opakování faktů. Transakce drží související lokální změny pohromadě.

Vztah k podobným pojmům

Model, produkt a aplikační vrstva jsou tři různé věci.

Relační databáze je obecný model; nástroje nad ním mají jiné role.

Databáze
Obecné úložiště dat; relační databáze je jen jeden z možných modelů.
PostgreSQL
Konkrétní relační databázový systém, který model realizuje vlastním SQL dialektem.
Doctrine ORM
Mapuje objekty na relační data, ale nenahrazuje klíče, constrainty ani návrh schématu.
Dokumentová databáze
Často ukládá celek jako dokument; hodí se pro jiné přístupové vzory a kompromisy než vztahy v tabulkách.

Výhody a omezení

Integrita neznamená bezmezně dělit data.

Přínosy

  • jasné vztahy a ochrana neplatných odkazů
  • SQL dotazy a agregace napříč souvisejícími daty
  • transakční změny a databázové constrainty
  • omezení duplicit faktů v transakčním modelu

Časté chyby

  • považování každé tabulky za objekt aplikace
  • vztahy bez constraintů, které dovolí neplatné odkazy
  • představa, že JSON automaticky nahradí celý relační model
  • dělení dat do co nejvíce tabulek bez ohledu na jejich význam
  • zaměňování ORM za samotnou relační databázi

Praktický příklad

Objednávka není jeden nekonečný dokument.

Model customers → orders → order_items → products vyjadřuje, že zákazník může mít více objednávek a produkt se může objevit v mnoha položkách. Spojovací tabulka je stejný princip pro vztah více ku více, například products ↔ categories.

JSON sloupec může přirozeně nést proměnlivý payload externího API. Jádro objednávky, ceny, identity a vztahy však často potřebují tabulky, typy a constrainty, aby byly dobře dotazovatelné a konzistentní.

Na co myslet

Vztah musí mít význam, vlastníka a pravidlo.

Datový model se navrhuje podle skutečných faktů a změn, ne jen podle aktuální obrazovky formuláře.

  • pojmenovat, který fakt patří do které tabulky
  • zvolit stabilní identitu řádků a cizí klíče pro interní vazby
  • měřit dotazy a teprve potom přidávat indexy nebo denormalizaci
  • rozlišit aktuální katalogová data a historický snapshot objednávky
  • nechat ORM doplňovat práci s daty, nikoli skrýt základní model

Časté otázky

Relační model v praxi

Je každá databáze s tabulkami relační?

Ne nutně. Relace, klíče, integrita a způsob práce s daty jsou důležitější než samotný tabulkový vzhled.

Musím vždy používat cizí klíče?

U interních dat, kde databáze vlastní oba konce vztahu, jsou často vhodnou ochranou. Na hranici externí služby stejnou garanci databáze obvykle poskytnout nemůže.

Nahrazuje JSON relační model?

Ne. Hodí se pro proměnlivá doplňková data, ale u klíčových vztahů často ztrácí přímou integritu, constrainty a pohodlné dotazy.

Je Doctrine ORM relační databáze?

Ne. Je to PHP nástroj pro práci s relačními daty; databáze, SQL a její pravidla zůstávají samostatnou vrstvou.

Jak tento princip používám v praxi

Relační data navrhuji podle skutečných vztahů a změn.

U e-shopů a interních systémů řeším model objednávek, produktů, integračních identit i výkon dotazů nad jasně oddělenými fakty.

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.