Pular para o conteúdoPedro Farbo
Lição 8 / 2530 min

Introdução a Bancos de Dados

Introdução a Bancos de Dados

Toda aplicação backend precisa persistir dados. Nesta aula, vamos entender os tipos de bancos de dados e quando usar cada um.

SQL vs NoSQL

Bancos SQL (Relacionais)

  • Estrutura: Tabelas com linhas e colunas
  • Schema: Fixo e definido previamente
  • Relacionamentos: Foreign keys, JOINs
  • Exemplos: PostgreSQL, MySQL, SQLite
sql
-- Estrutura rígidaCREATE TABLE users (  id SERIAL PRIMARY KEY,  name VARCHAR(100) NOT NULL,  email VARCHAR(255) UNIQUE NOT NULL,  created_at TIMESTAMP DEFAULT NOW());

Bancos NoSQL

  • Estrutura: Documentos, chave-valor, grafos
  • Schema: Flexível
  • Exemplos: MongoDB, Redis, Neo4j
javascript
// Documento MongoDB (flexível){  _id: ObjectId("..."),  name: "João",  email: "joao@email.com",  address: { city: "São Paulo", country: "BR" }, // Aninhado  tags: ["premium", "active"] // Array}

Quando usar cada um?

Use SQL quandoUse NoSQL quando
Dados estruturados e relacionadosDados semi-estruturados
Transações ACID importantesAlta escalabilidade horizontal
Queries complexas com JOINsSchema muda frequentemente
E-commerce, finanças, ERPLogs, analytics, cache, CMS

Por que PostgreSQL?

Para nosso projeto e-commerce, usaremos PostgreSQL:

  • ✅ ACID compliance (transações seguras)
  • ✅ Suporte a JSON (flexibilidade quando necessário)
  • ✅ Full-text search
  • ✅ Extensões poderosas (PostGIS, etc)
  • ✅ Performance excelente
  • ✅ Gratuito e open source

Instalando PostgreSQL com Docker

yaml
# docker-compose.ymlversion: '3.8' services:  postgres:    image: postgres:16    container_name: ecommerce-postgres    environment:      POSTGRES_USER: ecommerce      POSTGRES_PASSWORD: secret123      POSTGRES_DB: ecommerce_db    ports:      - "5432:5432"    volumes:      - postgres_data:/var/lib/postgresql/data volumes:  postgres_data:
bash
# Iniciar o bancodocker-compose up -d # Verificar se está rodandodocker-compose ps

Conceitos SQL Essenciais

Tabelas e Relacionamentos

sql
-- Tabela de usuáriosCREATE TABLE users (  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),  email VARCHAR(255) UNIQUE NOT NULL,  name VARCHAR(100) NOT NULL,  password VARCHAR(255) NOT NULL,  role VARCHAR(20) DEFAULT 'user',  created_at TIMESTAMP DEFAULT NOW()); -- Tabela de pedidos (relacionada a users)CREATE TABLE orders (  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),  user_id UUID REFERENCES users(id) ON DELETE CASCADE,  total DECIMAL(10,2) NOT NULL,  status VARCHAR(20) DEFAULT 'pending',  created_at TIMESTAMP DEFAULT NOW());

Tipos de Relacionamentos

1:1 (Um para Um)
user ←→ profile

1:N (Um para Muitos)
user ←→ orders

N:N (Muitos para Muitos)
products ←→ categories (via tabela intermediária)

Operações CRUD

sql
-- CreateINSERT INTO users (email, name, password)VALUES ('joao@email.com', 'João', 'hash123'); -- ReadSELECT * FROM users WHERE email = 'joao@email.com';SELECT u.name, COUNT(o.id) as total_ordersFROM users uLEFT JOIN orders o ON u.id = o.user_idGROUP BY u.id; -- UpdateUPDATE users SET name = 'João Silva' WHERE id = '...'; -- DeleteDELETE FROM users WHERE id = '...';

Por que usar um ORM?

Escrever SQL manualmente é verboso e propenso a erros:

typescript
// ❌ SQL manual - difícil manutençãoconst result = await db.query(  'SELECT * FROM users WHERE email = $1',  [email]); // ✅ Com ORM (Prisma) - tipado e seguroconst user = await prisma.user.findUnique({  where: { email }});

Vantagens de um ORM

  1. Type Safety: Tipos gerados automaticamente
  2. Migrations: Versionamento do schema
  3. Relacionamentos: Carregados automaticamente
  4. SQL Injection: Proteção automática
  5. Produtividade: Menos código boilerplate

Próximos Passos

Na próxima aula, vamos configurar o Prisma ORM e criar nossos primeiros modelos de dados!

Resumo

  • ✅ Diferenças entre SQL e NoSQL
  • ✅ PostgreSQL como escolha para e-commerce
  • ✅ Docker para ambiente de desenvolvimento
  • ✅ Conceitos SQL: tabelas, relacionamentos, CRUD
  • ✅ Por que usar um ORM

Próxima aula: Prisma ORM - Setup e Modelos! 🔷

Gostou do conteúdo? Sua contribuição ajuda a manter tudo online e gratuito!

PIX:0737160d-e98f-4a65-8392-5dba70e7ff3e