Slovník pojmů

Databázové schéma

Schéma je dohoda mezi datovým modelem, aplikací a provozem. Ruční změny produkční struktury bez migrace tuto dohodu rychle rozbíjejí.

Stručná definice

Struktura, podle níž databáze rozumí uloženým datům.

Databázové schéma určuje, jaké objekty databáze existují a jak spolu souvisejí: tabulky, jejich sloupce a typy, klíče, constrainty, indexy, view nebo sekvence. Aplikace, importy, reporty a migrace pak sdílejí stejný kontrakt pro ukládání a čtení dat.

Slovo schéma má v PostgreSQL ještě konkrétní technický význam: jde o namespace uvnitř jedné databáze, například public.orders nebo billing.invoices. Tento namespace není totožný s celým logickým návrhem databáze, i když je jeho součástí.

Jaký problém řeší

Srozumitelný a verzovaný datový kontrakt

Schéma dovoluje přezkoumat, jaká data systém vede, jaké má vztahy a co se smí změnit.

  • model zákazníků, objednávek, položek, produktů a skladových pohybů
  • verzování tabulek, sloupců, indexů a constraintů
  • spolupráce mezi aplikací, ORM, reporty a integračními službami
  • reprodukovatelné vytvoření vývojového, testovacího i produkčního prostředí
  • případné seskupení objektů do PostgreSQL namespace

SQL ukázka

PostgreSQL schema jako namespace

Tato krátká ukázka vysvětluje druhý význam slova schéma v PostgreSQL. Neznamená, že každá aplikace potřebuje více namespace nebo že tím získá hotovou multi-tenant izolaci.

CREATE SCHEMA billing;

CREATE TABLE billing.invoices (
    id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    order_id bigint NOT NULL
);

Jak funguje

Od doménových faktů k verzované struktuře

Textová alternativa: zákazník → objednávka → položka objednávky → produkt; schéma určuje atributy a pravidla všech vazeb.

  1. Doménová fakta Zákazník, produkt, objednávka, položka, platba a sklad mají odlišný význam a životní cyklus.
  2. Objekty schématu Fakta se promítnou do tabulek, sloupců, typů, klíčů, constraintů a indexů.
  3. Vztahy Cizí klíče vyjádří, které záznamy na sobě závisí a co musí při změně zůstat platné.
  4. Verzovaná změna Migrace mění schéma kontrolovaně a v pořadí slučitelném se starší i novou verzí aplikace.
  5. Provoz a čtení SQL, ORM, importy a reporty pracují s aktuálním schématem; změna názvu či typu je změna rozhraní.

Důležité pojmy

Schéma zahrnuje více než diagram tabulek.

Diagram je užitečný pohled, ale nevystihne automaticky všechny constrainty, migrace a procesní pravidla.

Tabulka, sloupec a typ

Definují strukturu jednoho druhu záznamu a přípustné hodnoty jeho atributů.

Klíč, constraint a index

Klíče a constrainty chrání identitu a integritu. Index podporuje konkrétní přístupové vzory, není náhradou datového návrhu.

View a sekvence

View zpřístupňuje definovaný dotaz jako objekt. Sekvence může vytvářet číselné hodnoty; obojí je součást širší struktury.

Migrace

Je verzovaný krok, který schéma mění. Aktuální schéma je stav, ne seznam kroků, které k němu vedly.

PostgreSQL schema namespace

Umožňuje oddělit jmenné prostory objektů. Výběr nekvalifikovaného názvu ovlivňuje search_path, který má být nastaven uvážlivě.

Výhody a omezení

Struktura musí žít společně s aplikací.

Přínosy

  • jasnější model dat a jejich vztahů
  • reprodukovatelné prostředí přes migrace
  • lepší review změn a dopadů na integrace
  • pravidla integrity blízko dat

Časté chyby

  • ruční změny produkce mimo migrace
  • považování PostgreSQL namespace za automatickou izolaci tenantů
  • změna názvu či typu bez kompatibility se starší aplikací
  • spoléhání na diagram místo skutečných constraintů a migrací
  • nepromyšlený search_path pro namespace s nedůvěryhodnými objekty

Praktický příklad

Schéma e-shopu jako dlouhodobé rozhraní

Schéma obsahuje customers, orders, order_items, products a inventory_movements. Určuje typy cen a časů, primární identity, cizí klíče, kontrolní pravidla i indexy pro administraci. ORM a SQL nad tímto kontraktem jen pracují.

Při nasazení nové funkce se schéma nemění ručně na produkci. Migrace přidá například nový nullable sloupec, aplikace jej začne umět číst a zapisovat, data se doplní a teprve později se pravidlo zpřísní.

Na co myslet

Názvy a změny schématu jsou dlouhodobý kontrakt.

Dobrá struktura je verzovaná, dokumentovaná a slučitelná s rolloutem aplikace.

  • verzovat schéma společně s kódem a kontrolovat migrace
  • neprovádět nezdokumentované ruční změny na produkci
  • název objektu posuzovat i jako rozhraní pro reporty a integrace
  • plánovat kompatibilní změny pro souběh staré a nové verze aplikace
  • nepovažovat více PostgreSQL schémat za obecně nejlepší model tenantů

Časté otázky

Schéma v praxi

Je databázové schéma totéž co PostgreSQL schema?

Ne úplně. Obecně jde o návrh databázových objektů; PostgreSQL používá schema také jako konkrétní namespace uvnitř jedné databáze.

Může ORM nahradit databázové schéma?

Ne. ORM může popsat část mapování, ale schéma zahrnuje také constrainty, indexy, pohledy, migrace a vlastnosti konkrétní databáze.

Proč schéma verzovat?

Aplikace musí vědět, s jakými tabulkami, typy a pravidly pracuje. Migrace drží vývoj, test a produkci ve vysvětlitelném stavu.

Jsou více PostgreSQL schémata nutná pro multi-tenant aplikaci?

Ne. Jsou jednou z organizačních možností, ale přinášejí vlastní provozní a migrační náklady. Volba záleží na modelu tenanta a správě dat.

Jak tento princip používám v praxi

Datový kontrakt propojuji s architekturou a nasazením.

Při vývoji řeším schéma, migrace, aplikaci i integrační dopady jako jeden celek, aby změny šly bezpečně zavádět a dohledat.

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.