{"id":23381,"date":"2025-11-12T14:29:25","date_gmt":"2025-11-12T14:29:25","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=23381"},"modified":"2025-11-12T14:29:25","modified_gmt":"2025-11-12T14:29:25","slug":"should-you-stop-using-prisma-why-database-orms-might-be-the-worst-thing-that-happened-to-backend-development-by-sohail-saifi","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/23381\/","title":{"rendered":"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi"},"content":{"rendered":"\n<\/p>\n<div>\n<div>\n<div>\n<div class=\"speechify-ignore ac cw\">\n<div class=\"speechify-ignore bi m\">\n<div class=\"ac im in io ip iq ir is it iu iv iw\">\n<div class=\"ac r iw\">\n<div class=\"ac ix\">\n<div>\n<div class=\"bn\" role=\"tooltip\">\n<div tabindex=\"-1\" class=\"bf\"><a target=\"_blank\" rel=\"noopener follow\" href=\"https:\/\/medium.com\/@sohail_saifi?source=post_page---byline--421aba045846---------------------------------------\" data-discover=\"true\"><\/p>\n<div class=\"m iy iz by ja jb\">\n<div class=\"m fr\"><img decoding=\"async\" alt=\"Sohail Saifi\" class=\"m fk by bz ca de\" src=\"https:\/\/miro.medium.com\/v2\/resize:fill:64:64\/1*3SigoC_uqb4zv03teeR7OQ.jpeg\" width=\"32\" height=\"32\" loading=\"lazy\" data-testid=\"authorPhoto\"\/><\/div>\n<\/div>\n<p><\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><span class=\"bg b bh ab bl\"\/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<figure class=\"mx my mz na nb nc mu mv paragraph-image\">\n<div role=\"button\" tabindex=\"0\" class=\"nd ne fr nf bi ng\"><span class=\"fw fx fy ao fz ga gb gc gd speechify-ignore\">Press enter or click to view image in full size<\/span><\/p>\n<div class=\"mu mv mw\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*KLm_jYDWCgDLm7Cv.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*KLm_jYDWCgDLm7Cv.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*KLm_jYDWCgDLm7Cv.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*KLm_jYDWCgDLm7Cv.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*KLm_jYDWCgDLm7Cv.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*KLm_jYDWCgDLm7Cv.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/0*KLm_jYDWCgDLm7Cv.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*KLm_jYDWCgDLm7Cv.png 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*KLm_jYDWCgDLm7Cv.png 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*KLm_jYDWCgDLm7Cv.png 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*KLm_jYDWCgDLm7Cv.png 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*KLm_jYDWCgDLm7Cv.png 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*KLm_jYDWCgDLm7Cv.png 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/0*KLm_jYDWCgDLm7Cv.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\"\/><img alt=\"\" class=\"bi mb nh c\" width=\"700\" height=\"350\" loading=\"eager\" role=\"presentation\"\/><\/picture><\/div>\n<\/div>\n<\/figure>\n<p id=\"ae8b\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">I need to tell you something that might be controversial: <strong class=\"nk hm\">Prisma, the darling of the TypeScript world, might be holding your application back.<\/strong><\/p>\n<p id=\"3f6a\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">After three years of using Prisma in production, debugging performance issues that shouldn\u2019t exist, and watching our serverless costs spiral out of control, I\u2019ve come to a painful realization. The same tool that promised to make database development easier has become our biggest bottleneck.<\/p>\n<p id=\"0c38\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">But this isn\u2019t just about Prisma. This is about a fundamental problem with how we\u2019ve been thinking about database access in modern applications. ORMs promised us productivity and type safety, but they delivered complexity and performance issues we never asked for.<\/p>\n<p id=\"0855\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Here\u2019s my journey from ORM evangelist to someone who thinks we took a seriously wrong turn.<\/p>\n<h2 id=\"2f8b\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Prisma Promise (And Why We All Fell for It)<\/h2>\n<p id=\"6943\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Let\u2019s be honest \u2014 Prisma\u2019s marketing is brilliant. Type-safe database access! Automatic migrations! No more SQL! A single schema file that generates everything you need!<\/p>\n<p id=\"1013\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">When I first saw this code, I was sold:<\/p>\n<pre class=\"pj pk pl pm pn po pp pq bq pr bc bl\"><span id=\"aabc\" class=\"ps oh hl pp b bh pt pu m pv pw\">const users = await prisma.user.findMany({<br\/>where: {<br\/>email: {<br\/>contains: 'john'<br\/>}<br\/>},<br\/>include: {<br\/>posts: {<br\/>select: {<br\/>title: true,<br\/>createdAt: true<br\/>}<br\/>}<br\/>}<br\/>})<\/span><\/pre>\n<p id=\"0f5f\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Clean, readable, type-safe. What could go wrong?<\/p>\n<p id=\"1268\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\"><strong class=\"nk hm\">Everything.<\/strong><\/p>\n<h2 id=\"e3fa\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Performance Reality Check<\/h2>\n<p id=\"b663\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Here\u2019s what they don\u2019t tell you about Prisma: it\u2019s designed to be convenient, not fast.<\/p>\n<p id=\"d0ae\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Let\u2019s talk numbers. According to benchmarks, Drizzle\u2019s bundle size is about 1.5 MB, while Prisma\u2019s bundle size is about 6.5 MB. In serverless environments, this matters. A lot.<\/p>\n<p id=\"8e40\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">But bundle size is just the beginning. The real performance killer is what happens at runtime.<\/p>\n<h2 id=\"b3a1\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The N+1 Problem on Steroids<\/h2>\n<p id=\"0444\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Remember that innocent-looking query above? Here\u2019s what it actually does:<\/p>\n<pre class=\"pj pk pl pm pn po pp pq bq pr bc bl\"><span id=\"3a90\" class=\"ps oh hl pp b bh pt pu m pv pw\">-- First query<br\/>SELECT * FROM users WHERE email LIKE '%john%';<p>-- Then for EACH user found:<br\/>SELECT * FROM posts WHERE userId = 1;<br\/>SELECT * FROM posts WHERE userId = 2;<br\/>SELECT * FROM posts WHERE userId = 3;<br\/>-- ... and so on<\/p><\/span><\/pre>\n<p id=\"421a\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">One logical query becomes dozens of database round trips. In one of our applications, what should have been a single JOIN query was generating 47 separate SQL statements.<\/p>\n<p id=\"3618\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">We moved to TanStack Query for our frontend state management to avoid this exact problem, only to recreate it in our backend with Prisma.<\/p>\n<h2 id=\"1b4d\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Serverless Nightmare<\/h2>\n<p id=\"98f2\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Our AWS Lambda cold starts went from 200ms to 2.5 seconds after introducing Prisma. Why? Because Prisma needs to:<\/p>\n<ol class=\"\">\n<li id=\"d1c3\" class=\"ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of px py pz bl\">Load the Rust-based query engine binary<\/li>\n<li id=\"b7b8\" class=\"ni nj hl nk b nl qa nn no np qb nr ns nt qc nv nw nx qd nz oa ob qe od oe of px py pz bl\">Start an internal GraphQL server<\/li>\n<li id=\"f68a\" class=\"ni nj hl nk b nl qa nn no np qb nr ns nt qc nv nw nx qd nz oa ob qe od oe of px py pz bl\">Initialize connection pooling<\/li>\n<li id=\"0067\" class=\"ni nj hl nk b nl qa nn no np qb nr ns nt qc nv nw nx qd nz oa ob qe od oe of px py pz bl\">Generate the client interface<\/li>\n<\/ol>\n<p id=\"68e4\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">All of this happens before your function can even start processing the request.<\/p>\n<p id=\"b6a9\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">As one developer put it: \u201cPrisma happens to have a lot of content that you can find on this topic specifically, but the problem stems from cold starts in certain serverless environments like AWS Lambda. With Drizzle being such a lightweight solution, the time required to load and execute a serverless function or Lambda will be much quicker than Prisma.\u201d<\/p>\n<h2 id=\"903b\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Developer Experience Mirage<\/h2>\n<p id=\"b394\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Prisma\u2019s biggest selling point is Developer Experience (DX). But here\u2019s the dirty secret: <strong class=\"nk hm\">great DX for simple things often means terrible DX for complex things.<\/strong><\/p>\n<h2 id=\"cd98\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Schema Lock-In<\/h2>\n<p id=\"fb3b\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Everything in Prisma revolves around the <code class=\"de qf qg qh pp b\">schema.prisma<\/code> file. It&#8217;s your single source of truth, they say. But what happens when you need to do something that doesn&#8217;t fit neatly into Prisma&#8217;s DSL?<\/p>\n<p id=\"c542\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Want to use database-specific features like PostgreSQL\u2019s JSONB operators? Good luck. Need to write a complex query with CTEs? You\u2019re back to raw SQL, but now you\u2019re mixing paradigms and losing all the type safety you supposedly gained.<\/p>\n<p id=\"8a0a\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">As one frustrated developer noted: \u201cAll the boilerplate and the files for redux remain the reason why I haven\u2019t used it extensively, so many moving parts.\u201d The same applies to Prisma \u2014 it promises simplicity but delivers complexity.<\/p>\n<h2 id=\"c4ff\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Generation Dance<\/h2>\n<p id=\"7614\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Every time you change your schema, you have to run <code class=\"de qf qg qh pp b\">prisma generate<\/code>. This regenerates thousands of lines of TypeScript code. Your IDE freezes. Your build process slows down. And heaven forbid you forget to run it &#8211; now your types are out of sync with your database.<\/p>\n<p id=\"82ab\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Contrast this with Drizzle, where changes to your schema are immediately reflected because everything is just TypeScript. No code generation, no waiting, no extra steps.<\/p>\n<h2 id=\"766a\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Migration Nightmare<\/h2>\n<p id=\"a568\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Prisma\u2019s migration system looks great in demos. In production, it\u2019s a different story.<\/p>\n<h2 id=\"6bab\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">Data Loss by Design<\/h2>\n<p id=\"ed22\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Here\u2019s something that actually happened to us: we renamed a column in our schema. Prisma\u2019s migration system didn\u2019t detect it as a rename \u2014 it treated it as dropping the old column and creating a new one.<\/p>\n<p id=\"f658\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\"><strong class=\"nk hm\">All the data in that column was gone.<\/strong><\/p>\n<p id=\"bc47\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Drizzle handles this better. When it detects a possible renaming, it enters interactive mode and lets you choose your intention. Prisma? It just drops your data and generates a \u201chelpful\u201d warning about potential data loss.<\/p>\n<h2 id=\"75a9\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Black Box Problem<\/h2>\n<p id=\"d41e\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Prisma generates SQL migrations for you, but they\u2019re often not what you\u2019d write by hand. They\u2019re verbose, sometimes inefficient, and hard to review. When you need to customize a migration, you\u2019re fighting against the tool instead of working with it.<\/p>\n<h2 id=\"2a19\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Real Cost of Abstraction<\/h2>\n<p id=\"169e\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Ted Neward called ORMs \u201cthe Vietnam War of computer science\u201d back in 2008. His words were prophetic: \u201ca quagmire which starts well, gets more complicated as time passes, and before long entraps its users in a commitment that has no clear demarcation point, no clear win conditions, and no clear exit strategy.\u201d<\/p>\n<p id=\"d050\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">ORMs promise to eliminate the \u201cimpedance mismatch\u201d between object-oriented code and relational databases. But here\u2019s the thing: <strong class=\"nk hm\">they don\u2019t eliminate it. They hide it.<\/strong><\/p>\n<p id=\"00c3\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">And when that abstraction leaks (which it always does), you\u2019re worse off than when you started because now you need to understand both your ORM\u2019s quirks AND the SQL it generates.<\/p>\n<h2 id=\"b126\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">What Smart Developers Are Using Instead<\/h2>\n<p id=\"75c8\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">After our Prisma experience, we evaluated alternatives. Here\u2019s what we found:<\/p>\n<h2 id=\"2ce5\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">Drizzle: The TypeScript-Native Approach<\/h2>\n<p id=\"6843\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Drizzle calls itself \u201cIf you know SQL, you know Drizzle.\u201d And it\u2019s true:<\/p>\n<pre class=\"pj pk pl pm pn po pp pq bq pr bc bl\"><span id=\"2f76\" class=\"ps oh hl pp b bh pt pu m pv pw\">const users = await db<br\/>.select()<br\/>.from(usersTable)<br\/>.where(like(usersTable.email, '%john%'))<br\/>.leftJoin(postsTable, eq(usersTable.id, postsTable.userId));<\/span><\/pre>\n<p id=\"c03f\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">This is SQL, but with full TypeScript safety. No code generation. No binaries. No magic.<\/p>\n<p id=\"14d8\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Performance? Drizzle is orders of magnitude faster than Prisma in benchmarks. Bundle size? 1.5MB vs Prisma\u2019s 6.5MB.<\/p>\n<h2 id=\"dcc0\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">Raw SQL with Type Safety<\/h2>\n<p id=\"f329\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Tools like SQLx in Rust show us what\u2019s possible: compile-time checked SQL queries with zero runtime overhead.<\/p>\n<p id=\"d1b9\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">In TypeScript, libraries like Kysely provide similar benefits:<\/p>\n<pre class=\"pj pk pl pm pn po pp pq bq pr bc bl\"><span id=\"e66b\" class=\"ps oh hl pp b bh pt pu m pv pw\">const users = await db<br\/>.selectFrom('users')<br\/>.leftJoin('posts', 'users.id', 'posts.userId')<br\/>.select(['users.name', 'posts.title'])<br\/>.where('users.email', 'like', '%john%')<br\/>.execute();<\/span><\/pre>\n<p id=\"e7ce\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">It\u2019s still SQL, but with TypeScript safety and IDE support.<\/p>\n<h2 id=\"279f\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The \u201cRaw SQL is Actually Better\u201d Movement<\/h2>\n<p id=\"996b\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">More developers are returning to raw SQL. Why? Because:<\/p>\n<ol class=\"\">\n<li id=\"6b61\" class=\"ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of px py pz bl\"><strong class=\"nk hm\">It\u2019s more transparent<\/strong> \u2014 you know exactly what queries are running<\/li>\n<li id=\"a43c\" class=\"ni nj hl nk b nl qa nn no np qb nr ns nt qc nv nw nx qd nz oa ob qe od oe of px py pz bl\"><strong class=\"nk hm\">It\u2019s more performant<\/strong> \u2014 no abstraction overhead<\/li>\n<li id=\"ec67\" class=\"ni nj hl nk b nl qa nn no np qb nr ns nt qc nv nw nx qd nz oa ob qe od oe of px py pz bl\"><strong class=\"nk hm\">It\u2019s more portable<\/strong> \u2014 SQL knowledge transfers between projects<\/li>\n<li id=\"3cae\" class=\"ni nj hl nk b nl qa nn no np qb nr ns nt qc nv nw nx qd nz oa ob qe od oe of px py pz bl\"><strong class=\"nk hm\">It\u2019s more secure<\/strong> \u2014 you\u2019re aware of injection risks, making you more careful<\/li>\n<\/ol>\n<p id=\"1265\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">As one developer put it: \u201cI\u2019d argue that a 20-line SQL query is way easier to understand than trying to figure out what some ORM method chain is gonna generate. Plus, SQL is standardized \u2014 any developer can read it.\u201d<\/p>\n<h2 id=\"784a\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Security Implications Nobody Talks About<\/h2>\n<p id=\"eaa0\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">ORMs are supposed to be more secure because they prevent SQL injection. But they introduce new security problems:<\/p>\n<h2 id=\"2026\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">Mass Assignment Vulnerabilities<\/h2>\n<p id=\"9f38\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">This Prisma code looks safe:<\/p>\n<pre class=\"pj pk pl pm pn po pp pq bq pr bc bl\"><span id=\"55ab\" class=\"ps oh hl pp b bh pt pu m pv pw\">app.post('\/users', async (req, res) =&gt; {<br\/>const user = await prisma.user.create({<br\/>data: req.body<br\/>});<br\/>});<\/span><\/pre>\n<p id=\"2e78\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">But what if the request body includes a <code class=\"de qf qg qh pp b\">role: 'admin'<\/code> field you didn&#8217;t expect? Congratulations, you just created an admin user.<\/p>\n<p id=\"b193\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">With raw SQL, this pattern is much less likely because you explicitly specify which fields to update.<\/p>\n<h2 id=\"9f8d\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">Excessive Database Permissions<\/h2>\n<p id=\"8181\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">ORMs often require broader database permissions to function. They need to query table schema information, access metadata, and perform reflection. This violates the principle of least privilege.<\/p>\n<h2 id=\"502d\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Bundle Size Problem<\/h2>\n<p id=\"5552\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">In 2024, we care about bundle sizes. Frameworks like Astro and SvelteKit emphasize minimal JavaScript. But then we add 6.5MB ORMs to our backend.<\/p>\n<p id=\"143a\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">For edge computing and serverless functions, every kilobyte matters. Cloudflare\u2019s free plan has a 3MB limit. Prisma eats up more than half of that before you write a single line of business logic.<\/p>\n<h2 id=\"2dac\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">When ORMs Still Make Sense<\/h2>\n<p id=\"716f\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">I\u2019m not saying ORMs are always wrong. There are cases where they shine:<\/p>\n<p id=\"196e\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\"><strong class=\"nk hm\">Rapid Prototyping<\/strong>: When you need to get something working quickly and performance isn\u2019t critical.<\/p>\n<p id=\"7959\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\"><strong class=\"nk hm\">Junior Teams<\/strong>: If your team doesn\u2019t have strong SQL skills, an ORM can provide guardrails.<\/p>\n<p id=\"e90f\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\"><strong class=\"nk hm\">Simple CRUD Applications<\/strong>: For basic create\/read\/update\/delete operations without complex relationships.<\/p>\n<p id=\"d70d\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\"><strong class=\"nk hm\">Enterprise Requirements<\/strong>: Some organizations mandate ORMs for compliance or standardization reasons.<\/p>\n<p id=\"f4b3\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">But for most production applications, the costs outweigh the benefits.<\/p>\n<h2 id=\"1476\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Path Forward<\/h2>\n<p id=\"9e1a\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">If you\u2019re thinking about moving away from ORMs, here\u2019s a migration strategy:<\/p>\n<h2 id=\"8cf8\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">1. Start with New Features<\/h2>\n<p id=\"660a\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Don\u2019t rewrite everything at once. Build new features with your chosen alternative (Drizzle, Kysely, or raw SQL) and see how it feels.<\/p>\n<h2 id=\"5688\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">2. Identify Performance Bottlenecks<\/h2>\n<p id=\"6ec0\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Use profiling to find your slowest database operations. These are good candidates for migration because you\u2019ll see immediate improvements.<\/p>\n<h2 id=\"36be\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">3. Migrate One Domain at a Time<\/h2>\n<p id=\"b2ce\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Pick a bounded context in your application and migrate all its database access together. This maintains consistency within domains.<\/p>\n<h2 id=\"607b\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">4. Invest in Tooling<\/h2>\n<p id=\"9579\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Set up proper database migration tools, query builders, and type generation. The initial setup takes time, but you\u2019ll be more productive in the long run.<\/p>\n<h2 id=\"5083\" class=\"og oh hl bg oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd bl\">The Bottom Line<\/h2>\n<p id=\"206a\" class=\"pw-post-body-paragraph ni nj hl nk b nl pe nn no np pf nr ns nt pg nv nw nx ph nz oa ob pi od oe of he bl\">Prisma isn\u2019t inherently evil. It\u2019s a well-engineered tool that solves real problems. But it also creates new problems that many teams don\u2019t anticipate.<\/p>\n<p id=\"6212\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">The question isn\u2019t whether Prisma is good or bad. The question is whether the problems it solves are worth the problems it creates for YOUR application.<\/p>\n<p id=\"5652\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">In our case, the answer was no. Moving away from Prisma reduced our serverless costs by 40%, improved our performance by 3x, and made our codebase more maintainable.<\/p>\n<p id=\"3929\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">But more importantly, it forced us to understand our database better. We stopped treating it as a dumb storage layer and started leveraging its power. Our queries became more efficient. Our data models became cleaner. Our debugging sessions became shorter.<\/p>\n<p id=\"cbdd\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">ORMs promised to make us more productive by hiding complexity. But as it turns out, <strong class=\"nk hm\">the complexity was never hidden \u2014 it was just moved to a place where we couldn\u2019t see it until it was too late.<\/strong><\/p>\n<p id=\"b373\" class=\"pw-post-body-paragraph ni nj hl nk b nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of he bl\">Maybe it\u2019s time to stop hiding from our databases and start embracing them.<\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"Press enter or click to view image in full size I need to tell you something that might be controversial: Pris [&hellip;]","protected":false},"author":1,"featured_media":23382,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-23381","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"Press enter or click to view image in full size I need to tell you something that might be controversial: Pris [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-12T14:29:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/0KLm_jYDWCgDLm7Cv.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/23381\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi\",\"datePublished\":\"2025-11-12T14:29:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/23381\\\/\"},\"wordCount\":1696,\"image\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/0KLm_jYDWCgDLm7Cv.png\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/23381\\\/\",\"url\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846\",\"name\":\"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/0KLm_jYDWCgDLm7Cv.png\",\"datePublished\":\"2025-11-12T14:29:25+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/0KLm_jYDWCgDLm7Cv.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/0KLm_jYDWCgDLm7Cv.png\",\"width\":1000,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/medium.com\\\/@sohail_saifi\\\/should-you-stop-using-prisma-421aba045846#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846","og_locale":"ja_JP","og_type":"article","og_title":"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi - \u30dd\u30b1\u30b3\u30f3","og_description":"Press enter or click to view image in full size I need to tell you something that might be controversial: Pris [&hellip;]","og_url":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-11-12T14:29:25+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/0KLm_jYDWCgDLm7Cv.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"9\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/23381\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi","datePublished":"2025-11-12T14:29:25+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/23381\/"},"wordCount":1696,"image":{"@id":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/0KLm_jYDWCgDLm7Cv.png","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/23381\/","url":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846","name":"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846#primaryimage"},"image":{"@id":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/0KLm_jYDWCgDLm7Cv.png","datePublished":"2025-11-12T14:29:25+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/0KLm_jYDWCgDLm7Cv.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/0KLm_jYDWCgDLm7Cv.png","width":1000,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/medium.com\/@sohail_saifi\/should-you-stop-using-prisma-421aba045846#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Should You Stop Using Prisma? Why Database ORMs Might Be the Worst Thing That Happened to Backend Development | by Sohail Saifi"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/23381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=23381"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/23381\/revisions"}],"predecessor-version":[{"id":23383,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/23381\/revisions\/23383"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/23382"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=23381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=23381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=23381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}