Preskočiť na obsah
ORM knižnica

Drizzle ORM

Drizzle ORM je lightweight TypeScript ORM pre relačné databázy, ktorý sa odlišuje tým, že zachováva SQL ako prvý jazyk — schéma, dotazy aj migrácie píšete v TypeScripte, ale výsledok je vždy predvídateľný SQL, ktorý vidíte a kontrolujete.

Ako to funguje

ORM (Object-Relational Mapper) je vrstva medzi vaším kódom a databázou, ktorá prekladá TypeScript objekty na SQL dotazy a späť. Bez ORM píšete surové SQL stringy — čo funguje, ale stráca typovú bezpečnosť a je náchylné na chyby. Problémy začínajú, keď ORM generuje SQL, ktoré nevidíte alebo nerozumiete. Drizzle to rieši inak: je zámerné a transparentné — vždy viete, aký SQL sa vykoná.

Schéma v Drizzle sa definuje v TypeScripte: `export const users = pgTable('users', { id: serial('id').primaryKey(), email: text('email').notNull() })`. Tento kód je zároveň zdrojom pravdy pre databázovú štruktúru aj pre TypeScript typy. Drizzle z neho odvodí typy pre insert, select, update — bez zbytočného generovania kódu alebo externých toolov.

Dotazy sa píšu ako fluent builder API, ktorý tesne kopíruje SQL syntax: `db.select().from(users).where(eq(users.email, 'jan@example.sk')).limit(10)`. Pre komplexné prípady môžete použiť `db.execute(sql`SELECT ...`)` — surové SQL s typovými parametrami. Tento prístup eliminuje magické správanie za transparentnosť, čo uľahčuje debugging a optimalizáciu.

Migrácie sú generované automaticky z diffs schémy — Drizzle Kit porovná vašu schému s databázou a vygeneruje migračný SQL súbor. Na rozdiel od Prismy neprebehne migrácia automaticky na pozadí; máte explicitnú kontrolu nad tým, čo sa aplikuje a kedy. Pri tímovej práci je toto dôležité — každá zmena databázovej štruktúry je auditovateľná a verzionovaná.

Z našej praxe

Drizzle ORM je štandardný ORM v Strange Loops, používame ho na všetkých projektoch s PostgreSQL — SylvoRehab, QualiTravel, Ovulogy aj interné nástroje. Pred Drizzle sme používali Prismu, ale narážali sme na problémy s komplexnými dotazmi, kde Prisma generovala neefektívne SQL. Drizzle nám dáva plnú kontrolu bez obetovania typovej bezpečnosti. V kombinácii s tRPC a Fastify tvoríme end-to-end typovo bezpečný stack od databázy cez API po React komponent — bez jediného `any` typu.

Kedy to potrebujete

  • Máte komplexné databázové dotazy s viacerými JOINmi a chcete mať istotu, čo presne sa vykoná — nie čakať, čo ORM vygeneruje.
  • Výkonnostné problémy v Prisme vás nútia písať raw SQL, ale stratíte typovú bezpečnosť — Drizzle vám dá oboje.
  • Tím onboarduje nového vývojára a chcete, aby vedel čítať databázovú schému priamo z TypeScript kódu bez čítania extra dokumentácie.
  • Nasadzujete na edge runtime (Cloudflare Workers, Vercel Edge) kde Prisma engine nefunguje — Drizzle je pure JavaScript a beží všade.

Najčastejšie otázky

Aký je rozdiel medzi Drizzle ORM a Prisma?

Prisma používa vlastný schéma jazyk (`.prisma` súbory) a generuje JavaScript klienta. Je výborná pre rýchly štart a jednoduchšie prípady. Drizzle je celý v TypeScripte, generuje predvídateľnejší SQL a je výrazne ľahší (žiadny Rust engine). Pre komplexné dotazy a edge runtime je Drizzle lepšia voľba, pre tímy nové v databázach môže byť Prisma prístupnejšia.

Podporuje Drizzle aj MySQL a SQLite?

Áno — Drizzle podporuje PostgreSQL, MySQL/MariaDB a SQLite s rovnakou API. Pre SQLite má špeciálnu podporu pre Cloudflare D1 a libSQL (Turso). Schéma je mierne odlišná pre každý dialekt, ale koncepty sú rovnaké. Väčšina projektov používa PostgreSQL.

Ako sa riešia migrácie v Drizzle?

Drizzle Kit (`drizzle-kit generate` a `drizzle-kit migrate`) porovná vašu TypeScript schému s aktuálnym stavom databázy a vygeneruje SQL migračné súbory. Tieto súbory verzionujete v gite a aplikujete explicitne. Nikdy sa nespúšťajú automaticky — čo je zámer, nie obmedzenie.

Potrebujete s tým pomôcť?

Ak riešite niečo z toho, čo tu opisujeme, ozvite sa. Povieme vám, či a ako vieme pomôcť.