Inicio > Cursos > SQL y Bases de Datos > ORMs: Prisma y Sequelize
SQL y Bases de DatosSQL en ProducciónLección 18 de 20

ORMs: Prisma y Sequelize

Un ORM (Object-Relational Mapper) convierte tablas de base de datos en objetos del lenguaje de programación. Prisma (TypeScript) y Sequelize (JavaScript) son los más populares en Node.js. Simplifican el desarrollo pero añaden una capa de abstracción sobre SQL.

-- PRISMA: schema.prisma define el modelo de datos
-- (Este es código Prisma, no SQL puro)

-- schema.prisma:
-- generator client {
--   provider = "prisma-client-js"
-- }
-- datasource db {
--   provider = "postgresql"
--   url      = env("DATABASE_URL")
-- }
-- model User {
--   id        Int      @id @default(autoincrement())
--   email     String   @unique
--   nombre    String
--   pedidos   Order[]
--   creadoEn  DateTime @default(now()) @map("creado_en")
--   @@map("users")
-- }
-- model Order {
--   id       Int    @id @default(autoincrement())
--   total    Float
--   userId   Int    @map("user_id")
--   usuario  User   @relation(fields: [userId], references: [id])
-- }

-- Prisma genera migraciones SQL automáticamente:
-- npx prisma migrate dev --name add_users_table

-- Queries con Prisma Client (JavaScript/TypeScript):
-- const users = await prisma.user.findMany({
--   where: { pedidos: { some: { total: { gt: 100 } } } },
--   include: { pedidos: true },
--   orderBy: { creadoEn: 'desc' },
--   take: 10
-- });
-- await prisma.user.create({
--   data: { email: 'ana@test.com', nombre: 'Ana' }
-- });

-- Cuándo usar ORM vs SQL raw:
-- ORM: CRUD simple, prototipado rápido, type-safety en TypeScript
-- SQL raw: queries complejas con múltiples JOINs, window functions,
--          optimización fina, reportes de analytics

-- Prisma permite SQL raw cuando el ORM no es suficiente:
-- const result = await prisma.$queryRaw`
--   SELECT p.categoria, SUM(oi.precio * oi.cantidad) as ingresos
--   FROM order_items oi
--   JOIN products p ON p.id = oi.product_id
--   GROUP BY p.categoria
--   ORDER BY ingresos DESC
-- `;

-- Sequelize equivalente:
-- const users = await User.findAll({
--   where: { activo: true },
--   include: [{ model: Order }],
--   limit: 10
-- });
-- const raw = await sequelize.query(
--   "SELECT * FROM users WHERE salario > :minimo",
--   { replacements: { minimo: 50000 }, type: QueryTypes.SELECT }
-- );
ConsejoNo es ORM vs SQL — úsalos juntos. Usa el ORM para el 80% del CRUD rutinario y SQL raw para el 20% de consultas complejas. Prisma.$queryRaw y sequelize.query te permiten mezclar sin problema.
← Seguridad y SQL InjectionOptimización de Consultas →

Practica esta lección

Resuelve los ejercicios del curso de SQL y Bases de Datos en la app, gratis y con corrección automática.

Empezar a practicar