Databáze - PostgreSQL, SQL a MongoDB
Databáze jsou klíčovou součástí většiny moderních webových aplikací. Umožňují nám ukládat, organizovat a efektivně vyhledávat data.
V této lekci si představíme dva hlavní typy databází: SQL databáze (např. PostgreSQL) a NoSQL databáze (např. MongoDB).
Co je databáze?
Databáze je organizovaná kolekce dat, která je uložena a přístupná elektronicky. Databáze nám umožňují efektivně ukládat, upravovat a vyhledávat informace.
Základní pojmy:
- Databáze (Database) - kolekce tabulek nebo kolekcí
- Tabulka/Kolekce (Table/Collection) - strukturovaná sada dat
- Záznam/Dokument (Row/Document) - jeden konkrétní záznam v tabulce/kolekci
- Sloupec/Pole (Column/Field) - atribut záznamu
SQL databáze - PostgreSQL
SQL (Structured Query Language) je programovací jazyk používaný pro správu relačních databází. PostgreSQL je jeden z nejpopulárnějších open-source SQL databází.
Charakteristiky SQL databází:
- Strukturovaná data - data jsou organizována do tabulek s pevně definovanými sloupci
- ACID vlastnosti - zajišťují konzistenci dat (Atomicity, Consistency, Isolation, Durability)
- Relační model - tabulky mohou být propojeny pomocí vztahů (relations)
- Schéma - pevně definovaná struktura dat
Základní SQL příkazy:
-- Vytvoření tabulky
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Vložení dat
INSERT INTO users (name, email)
VALUES ('Jan Novák', 'jan@example.com');
-- Čtení dat
SELECT * FROM users;
SELECT name, email FROM users WHERE id = 1;
-- Aktualizace dat
UPDATE users
SET email = 'novy@example.com'
WHERE id = 1;
-- Mazání dat
DELETE FROM users WHERE id = 1;
Kdy použít SQL databáze:
✅ Vhodné pro:
- Aplikace s komplexními vztahy mezi daty
- Když potřebujeme transakce a konzistenci dat
- Finanční aplikace, e-commerce
- Aplikace s jasně definovanou strukturou dat
NoSQL databáze - MongoDB
NoSQL (Not Only SQL) databáze jsou nestrukturované nebo semi-strukturované databáze. MongoDB je populární dokumentová NoSQL databáze.
Charakteristiky NoSQL databází:
- Flexibilní schéma - struktura dat může být různá pro různé dokumenty
- Horizontální škálovatelnost - snadné rozšiřování napříč více servery
- Rychlé čtení a zápis - optimalizované pro rychlost
- Dokumentový model - data jsou uložena jako dokumenty (obvykle JSON)
Základní MongoDB operace:
// Vytvoření kolekce (automaticky při prvním vložení)
// Vložení dokumentu
db.users.insertOne({
name: "Jan Novák",
email: "jan@example.com",
createdAt: new Date()
});
// Čtení dokumentů
db.users.find();
db.users.findOne({ email: "jan@example.com" });
// Aktualizace dokumentu
db.users.updateOne(
{ email: "jan@example.com" },
{ $set: { email: "novy@example.com" } }
);
// Mazání dokumentu
db.users.deleteOne({ email: "novy@example.com" });
Kdy použít NoSQL databáze:
✅ Vhodné pro:
- Aplikace s rychle se měnící strukturou dat
- Velké objemy nestrukturovaných dat
- Aplikace vyžadující vysokou škálovatelnost
- Real-time aplikace, IoT projekty
- Content management systémy
Porovnání SQL vs NoSQL
| Vlastnost | SQL (PostgreSQL) | NoSQL (MongoDB) |
|---|---|---|
| Struktura | Tabulky s pevnými sloupci | Flexibilní dokumenty |
| Schéma | Pevně definované | Dynamické |
| Škálovatelnost | Vertikální (větší server) | Horizontální (více serverů) |
| Transakce | Plná podpora ACID | Omezená podpora |
| Dotazy | SQL jazyk | JavaScript-like dotazy |
| Vztahy | JOIN operace | Embedding nebo reference |
Práce s databázemi v React aplikacích
V React aplikacích obvykle nepřistupujeme přímo k databázi z frontendu. Místo toho používáme backend API, které komunikuje s databází.
Typická architektura:
React App → API (Node.js/Express, Next.js, ...) → Databáze
Příklady knihoven pro práci s databázemi:
PostgreSQL:
pg- PostgreSQL klient pro Node.jsPrisma- ORM (Object-Relational Mapping) pro TypeScriptSequelize- ORM pro Node.js
MongoDB:
mongodb- oficiální MongoDB drivermongoose- ODM (Object-Document Mapping) pro Node.js
Příklad s Prisma (PostgreSQL):
// schema.prisma
model User {
id Int @id @default(autoincrement())
name String
email String @unique
createdAt DateTime @default(now())
}
// V kódu
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
// Vytvoření uživatele
const user = await prisma.user.create({
data: {
name: 'Jan Novák',
email: 'jan@example.com',
},
});
// Čtení uživatelů
const users = await prisma.user.findMany();
Příklad s Mongoose (MongoDB):
// User model
import mongoose from 'mongoose';
const userSchema = new mongoose.Schema({
name: String,
email: { type: String, unique: true },
createdAt: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
// Vytvoření uživatele
const user = await User.create({
name: 'Jan Novák',
email: 'jan@example.com'
});
// Čtení uživatelů
const users = await User.find();
Závěr
Volba mezi SQL a NoSQL databází závisí na konkrétních potřebách vaší aplikace.
Doporučení:
- Začněte s PostgreSQL, pokud máte jasně definovanou strukturu dat
- Zvažte MongoDB, pokud potřebujete flexibilitu a rychlou škálovatelnost
- Mnoho aplikací používá obě - SQL pro strukturovaná data, NoSQL pro nestrukturovaná data
💡 Tip: Pro začátek můžete použít cloudové služby jako Supabase (PostgreSQL) nebo MongoDB Atlas (MongoDB), které nabízejí bezplatné tiery pro vývoj.
Zdroje
- PostgreSQL dokumentace
- MongoDB dokumentace
- Prisma dokumentace
- Mongoose dokumentace
- Supabase - PostgreSQL jako služba
- MongoDB Atlas - MongoDB jako služba