Relační databáze versus NoSQL: kdy dát přednost SQL
Volba mezi relační databází a NoSQL není otázkou módnosti, ale povahy dat a způsobu, jakým se k nim přistupuje. Relační model stojí na pevně daném schématu, transakcích a silných konzistenčních zárukách. Když potřebujete víc než jen ukládat dokumenty – třeba spojovat data z několika tabulek, garantovat atomicitu operací nebo vynutit integritu cizích klíčů – je SQL databáze přirozenou volbou. Naopak NoSQL řešení vynikají tam, kde je schéma v pohybu, data přicházejí v obrovském objemu a horizontální škálování je důležitější než striktní konzistence. Pokud zvažujete, kdy použít NoSQL databáze, pomůže vám praktický přehled na kdy použít NoSQL databáze, který rozebírá konkrétní scénáře včetně kompromisů mezi dostupností a konzistencí.
Relační databáze dává smysl především u domén, kde jsou vztahy mezi entitami složité a stabilní. Účetnictví, objednávky, skladové hospodářství nebo personální systémy se bez spojování tabulek a transakcí neobejdou. Databázový stroj zde hlídá, že objednávka bez zákazníka nevznikne a že peníze nezmizí uprostřed převodu. NoSQL může být lákavé kvůli rychlému startu, ale jakmile začnete v aplikaci ručně simulovat joiny a transakce, platíte složitostí to, co by relační databáze vyřešila deklarativně. V takovém případě je návrat k SQL často levnější než další vrstva aplikační logiky.
Špatný návrh schématu poznáte podle několika signálů. Tabulky bez primárních klíčů, sloupce typu text pro data, která mají být číselná nebo datumová, a chybějící cizí klíče jsou varovné majáky. Stejně tak opakující se skupiny sloupců jako telefon1, telefon2, telefon3 nebo ukládání více hodnot do jednoho pole oddělovačem. Dalším příznakem je redundance, kdy se stejný údaj aktualizuje na několika místech a dříve nebo později se rozejde. Normalizace není dogma, ale cílem je, aby každý fakt byl uložen právě jednou a vztahy byly vynutitelné na úrovni databáze, ne jen dobré vůle aplikace.
Rozhodnutí tedy nestojí na tom, která technologie je modernější, ale na tom, jaké máte požadavky na konzistenci, jak složité jsou dotazy a jak rychle poroste objem dat. U mnoha projektů nakonec skončíte u relační databáze jako primárního úložiště a NoSQL použijete doplňkově pro logy, fulltext nebo cache. Klíčem je nenechat se strhnout módní vlnou a postavit schéma tak, aby odpovídalo realitě, kterou má modelovat.