ORM vs SQL Puro: Qual Escolher para Seu Projeto?

Neste artigo vamos comparar as duas técnicas de bancos de dados para desenvolvimrnto web, mostrando como implementá-las em um projeto simples com Node.js, usando o Prisma como ORM e o SQLite com SQL puro.

Cada uma tem suas vantagens, desvantagens e casos de uso específicos. O objetivo é ajudar você a entender qual abordagem é mais adequada para diferentes cenários, com exemplos práticos e uma linguagem clara.

Para fazer o download dos arquivos utilizados na aula, preencha com o seu e-mail:

Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.

O que é ORM e SQL puro?

O que é ORM? ORM, ou Mapeamento Objeto-Relacional, é uma técnica que faz a ponte entre bancos de dados relacionais (como SQLite, MySQL ou PostgreSQL) e linguagens orientadas a objetos, como JavaScript. Ele permite manipular o banco de dados usando objetos e métodos, sem escrever consultas SQL diretamente. Exemplos populares incluem Prisma, Sequelize (para bancos relacionais) e Mongoose (para bancos não relacionais como MongoDB).

O que é SQL puro? SQL puro envolve escrever consultas diretamente na linguagem SQL para interagir com o banco de dados. Isso significa criar, atualizar ou consultar tabelas manualmente, sem camadas de abstração.

Por que comparar os dois? Cada abordagem tem pontos fortes e fracos, e a escolha depende de fatores como tempo de desenvolvimento, legibilidade do código e nível de controle necessário.

Dica: Se você quer aprender SQL do zero, temos um curso rápido de SQL, em formato de vídeo e de artigo como este!

Criando um projeto com ORM (Prisma)

Vamos construir um projeto simples que cria uma tabela de usuários com ID, nome e e-mail, usando o Prisma com SQLite.

Configurando o ambiente com Prisma

Como configurar o Prisma? Primeiro, inicialize um projeto Node.js e instale o Prisma:

Codigo
npm init -y
npm install prisma @prisma/client
npx prisma init --datasource-provider sqlite

Isso cria uma pasta prisma com o arquivo schema.prisma e configura o SQLite como banco de dados.

Modelando o banco com Prisma

Como modelar a tabela de usuários? No arquivo schema.prisma, definimos a estrutura da tabela de usuários:

JavaScript
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}

Este código define:

  • Um ID como chave primária, com incremento automático.
  • Um nome como texto.
  • Um e-mail como texto único (não permite duplicatas).

Por que usar o Prisma? O Prisma valida automaticamente restrições como e-mails únicos, reduzindo a necessidade de escrever regras manuais.

Gerando o banco e o Prisma Client

Como criar o banco de dados? Execute os seguintes comandos:

Codigo
npx prisma migrate dev
npx prisma generate

O primeiro comando cria o banco de dados (dev.db) e a tabela de usuários. O segundo gera o Prisma Client, que será usado para interagir com o banco.

Criando um usuário com Prisma

Como inserir dados no banco? Crie um arquivo index.js para adicionar um usuário ao banco:

index.js

JavaScript
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

const createUser = async () => {
  const newUser = await prisma.user.create({
    data: {
      name: 'Fulano de Tal',
      email: 'fulano@tal.com'
    }
  });
  console.log(newUser);
};

createUser();

Por que usar programação assíncrona? Como as operações com o banco são assíncronas, usamos async/await para garantir que o código espere a conclusão das operações antes de prosseguir.

Vantagens do Prisma

  • Legibilidade: O código é intuitivo, escrito em JavaScript, sem necessidade de SQL.
  • Validações automáticas: Regras como chaves únicas são gerenciadas pelo Prisma.
  • Segurança: Reduz riscos como SQL Injection, pois o Prisma abstrai as consultas.
Ícone Full StackFull Stack Impressionador

Essa é uma trilha de especialização que vai te tornar um verdadeiro Desenvolvedor Web Full Stack, dominando todas as principais tecnologias usadas tanto para o Front End quanto para o Backend e ainda para Mobile, construindo projetos práticos e exercícios aplicados à realidade das empresas. Tudo o que você precisa para se tornar um Desenvolvedor Full Stack em um único lugar.

Começar agoraSeta para a direita
Fundo Full StackTelas Full Stack
Luz Full Stack

Criando um projeto com SQL puro

Agora, vamos criar o mesmo projeto usando SQL puro com SQLite e Node.js.

Configurando o ambiente com SQLite

Como configurar o SQLite? Instale a biblioteca sqlite3:

Codigo
npm init -y
npm install sqlite3

Criando o banco e a tabela com SQL

Como modelar a tabela manualmente? Crie um arquivo sql.js para configurar o banco e inserir um usuário:

JavaScript
import sqlite3 from 'sqlite3';

const db = new sqlite3.Database('./banco.db');

db.serialize(() => {
  // Criando a tabela de usuários
  db.run(`
    CREATE TABLE IF NOT EXISTS users (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name TEXT,
      email TEXT UNIQUE
    )
  `);

  // Preparando e inserindo um usuário
  const stmt = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
  stmt.run('Fulano de Tal', 'fulano@tal.com');
  stmt.finalize();

  // Consultando os dados
  db.each('SELECT * FROM users', (err, row) => {
    if (err) throw err;
    console.log(row);
  });
});

db.close();

Por que fechar a conexão? Fechar a conexão com db.close() é essencial para evitar falhas de segurança, como conexões abertas que podem ser exploradas.

Riscos do SQL puro

Quais são os desafios?

  • SQL Injection: Consultas malformadas podem permitir ataques se os dados de entrada não forem validados.
  • Validações manuais: Regras como e-mails únicos ou tipos de dados devem ser implementadas manualmente.

Comparando ORM e SQL puro

Quais são as principais diferenças? A tabela abaixo resume as vantagens e desvantagens de cada abordagem:

CritérioORM (Prisma)SQL Puro
Tempo de DesenvolvimentoConfiguração inicial demorada, mas desenvolvimento rápido após configuraçãoSem configuração, mas desenvolvimento mais lento
LegibilidadeCódigo em JavaScript, intuitivo para quem conhece linguagens orientadas a objetosRequer conhecimento de SQL, menos intuitivo
ControleAbstrai complexidades, limitando ajustes específicosControle total, mas exige mais código
SegurançaProteção contra SQL Injection embutidaRisco de SQL Injection se não houver validações

Quando usar cada abordagem?

  • Use ORM (Prisma):
    • Projetos de longo prazo que exigem manutenção e escalabilidade.
    • Equipes com maior familiaridade em linguagens como JavaScript.
    • Quando segurança e validações automáticas são prioridades.
  • Use SQL puro:
    • Projetos pequenos e rápidos, sem necessidade de configuração complexa.
    • Quando você precisa de consultas altamente específicas ou otimizadas.
    • Equipes com forte conhecimento em SQL.

Conclusão

ORM e SQL puro não são concorrentes, mas ferramentas complementares. O Prisma oferece rapidez e segurança após a configuração inicial, enquanto o SQL puro dá controle total, mas exige mais cuidado com validações e segurança. A escolha depende do tamanho do projeto, do conhecimento da equipe e das prioridades de desenvolvimento. Experimente as duas abordagens e veja qual se adapta melhor ao seu fluxo de trabalho!

Veja outras publicações como esta com linguagem clara e acessível ensinando Full Stack e SQL!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Hashtag Treinamentos

Para acessar publicações de Full Stack, clique aqui!


Quer aprender mais sobre JavaScript com um minicurso básico gratuito?








Posts mais recentes de Full Stack

Posts mais recentes da Hashtag Treinamentos