Hlavní navigace

Minimum znalostí pro práci s SQL databázemi

2. 3. 2019 9:44 (aktualizováno) Pavel Stěhule

Roky píši o Postgresu, a o tom jak správně používat relační databáze. Relační databáze byly navržené tak aby se používaly jednoduše a efektivně,  a aby je mohli použít jak programátoři, tak běžní uživatelé.

To, že s relační databází může pracovat neprogramátor (koncový uživatel) je v podstatě  ten nejdůležitější benefit, který docení uživatel a v mnoha případech nepochopí programátor. Pro běžného uživatele napsat cyklus, případně zanořený
cyklus je problém. Pro programátora to samozřejmě problém není – a u SQL programátor musí překousnout fakt, že se úloha neřeší „programátorsky“. 

Mám pocit, že o všem důležitém ohledně Postgresu jsem napsal, a je čas na souhrn, co považuji za důležité a za minimální znalosti, které  by měl mít vývojář, který pracuje s databázemi. Upřesňuji, jedná se mi o vývojáře. Běžnému uživateli bohatě postačí znalost SQL, tak jak to  bylo původně tvůrci SQL zamýšleno.
 

  1. Alespoň základní znalost SQL – umět pospojovat tabulky (JOIN), umět filtrovat a agregovat (WHERE, GROUP BY, HAVING), umět si seřadit data (ORDER BY),  a oříznout (LIMIT)
    Úlohy: Mějme tabulku obce, okresy. Dohledat 10 největších obcí, dohledat 10 největších okresů.
  2. Neuškodí pokročilejší znalost SQL – CTE, LATERAL JOIN, .. nicméně člověk nemusí mít všechno hned
    Úlohy: Pro každý okres zobrazte 3 největší obce
  3. Znát základní principy pro správný návrh relačních databází – 1, 2, 3 normální forma. Použití číselníků.  
  4. Neuškodí znalost antipatternů – např. EAV, snaha o implementaci dědičnosti, .. 
  5. Přehled o základních strukturách používaných v relačních databázích (co a proč) – tabulka, index, sequence, partišna  
  6. Mít přehled o realizaci SQL příkazů, výhody, nevýhody, omezení: Sekvenční čtení, Čtení s náhodným přístupem (index scan), způsoby joinu (nested loop, merge join, hash join) – kdy použít, kdy nepoužít index, atd
    Úloha: umět číst prováděcí plán, a na základě prováděcího plánu identifikovat hrdla, a ty řešit (např. vytvořením indexu).
  7. Pochopit účel transakcí (ACID). Vědět, že co každý bod znamená (co přináší, co obnáší). Pochopit, že uživatel v databázi nevidí  nejnovější data, ale vždy snapshot v určitém čase. Pochopit, že databáze jsou multiuživatelské, a databáze uživatele od sebe izoluje (co to znamená, a jaký to má efekt pro programátora, pro uživatele).
  8. Znát vzory pro řešení race conditions – jak předcházet race conditions a přitom pokud možno umožnit efektivní paralelní provoz.
    Uloha: Prostudovat úrovně izolací, případně SELECT FOR UPDATE

Předchozí body jsou obecné, a měl by je zvládnout každý vývojář, který pracuje s relační databází. Mně osobně přijdou jako nezbytné minimum. Jedná se o jednoduché obecné znalosti na jejichž získání stačí minimum času – cca týden, 2 týdny.

Samozřejmě, že je dobré vědět o víc i o databázích, které používáme a to na úrovni dostatečné pro svou práci. Každá databáze má svoje  specifické vlastnosti na které můžeme při návrhu větší aplikace narazit, případně které můžeme využít pro vývoj. Tyto specifické vlastnosti  se mohou intenzivně měnit v čase. Mění se způsoby optimalizace, formáty uložení dat, limity.