第 1 篇:Prisma 是什麼?

如果你寫過後端,一定遇過這些問題:SQL 散落各處、欄位名稱與型別全靠記憶、資料表結構一改就心驚膽跳。Prisma 想解決的,正是這些痛點——提供一個強型別、現代化、可維護的資料存取層。
1. Prisma 是什麼?
一句話總結:
Prisma 是面向 TypeScript / JavaScript 的現代 ORM 與資料存取工具鏈。
它的核心目標是:
使用單一 Schema 描述業務資料模型
自動產生型別安全的資料庫客戶端
提供可控的資料庫遷移機制,讓結構演進更可預期
傳統 ORM 強調「物件 ↔ 資料表」的映射;
而 Prisma 更像是在說:
用宣告式 DSL 定義你的資料世界,其餘交給工具鏈處理一致性與安全性。
目前 Prisma 主要運行於:
Node.js(主流 Web 後端環境)
Bun / Deno(在支援 Node 生態前提下)
2. Prisma 的三大核心元件
理解 Prisma,本質上就是掌握三個核心:
2.1 Prisma Schema:單一真相來源(SSOT)
Schema(預設 prisma/schema.prisma)用 DSL 描述:
資料庫類型(PostgreSQL、MySQL 等)
連線設定
資料模型(User、Post、Order)
關聯關係
Client 生成設定
這個檔案就是:
Single Source of Truth(單一真相來源)
你不再需要手寫 SQL 建表,Schema 變更 → Prisma 自動推導資料庫變更。
2.2 Prisma Client:型別安全的資料存取 API
Prisma Client 是由 Schema 自動生成的 TypeScript/JS 程式碼:
它知道:
有哪些 model
每個欄位的型別與限制
關聯關係
提供完整 CRUD API
範例:
const user = await prisma.user.findUnique({
where: { id: 1 },
})優勢:
IDE 自動補全
型別錯誤編譯期即發現
不再需要人工同步型別與 SQL
2.3 Prisma Migrate:資料庫演進管理
Prisma Migrate 負責:
比對 Schema 與資料庫現況
產生 SQL migration
記錄變更歷史
在不同環境執行遷移
優勢:
可追溯的 schema 歷史
團隊共享一致變更
多環境結構一致性
3. 支援的資料庫
Prisma 支援:
PostgreSQL(強烈推薦)
MySQL / MariaDB
SQLite
SQL Server
MongoDB(支援方式略有不同)
此外還有:
Prisma Postgres(官方託管服務)
無需自行部署
開箱即用
與 Prisma 深度整合
4. 核心理念:型別安全 + 開發體驗(DX)
4.1 型別安全(Type-safe)
Prisma 的型別安全來自:
Schema 本身強型別
Client 自動生成
TS 編譯即驗證資料正確性
相比傳統方式:
不需維護雙份型別(SQL + TS)
Schema 改動 → 一鍵重新生成
IDE 體驗極佳
4.2 DX 優先
Prisma 提供完整工具鏈:
CLI
prisma init初始化prisma migrate dev開發遷移prisma db push快速同步prisma generate生成 Clientprisma studio開啟資料 UI
Prisma Studio
可視化資料操作
編輯 / 刪除 / 關聯檢查
VS Code 插件
語法高亮
自動補全
錯誤提示
5. 在系統架構中的角色
Prisma 位於:
業務邏輯層 ↔ 資料庫之間
典型分層:
Controller / API
Service / UseCase
Repository / Prisma Client
Database
Prisma Client 可視為「超級 DAO」,
但大型專案仍建議包一層 Repository 以隔離依賴。
6. 與傳統 ORM 相比,Prisma 有哪些不同?
如果你使用過 Sequelize、TypeORM 或 Java 生態中的 Hibernate,大概會關心:Prisma 和它們在本質上有什麼差異?
可以從以下幾個維度簡單對比:
維度 | 傳統 ORM(如 Sequelize / TypeORM) | Prisma |
|---|---|---|
模型定義方式 | 程式碼註解 / JS 物件 / class | 獨立的 Schema DSL 檔案 |
型別安全 | 依賴手動維護 TS 型別 | 由 Schema 自動生成 Client 型別 |
遷移管理 | 內建或外掛式遷移,偏腳本導向 | Schema 驅動遷移,SQL 檔案清晰可追蹤 |
查詢 API 風格 | 類似 ActiveRecord 或 Query Builder | 函數式、鏈式、強型別的 where / include |
多語言支援 | 通常只針對單一語言 | 專注於 JS / TS 生態 |
心智模型 | 「物件 ↔ 資料表」映射 | 「Schema 驅動的資料存取層」 |
你可以把 Prisma 理解為:
專為 JS / TS 打造的「更現代、更具型別安全的 ORM 2.0」。
7. 生產環境最佳實踐(CI/CD)
核心原則:
開發 vs 生產
開發:
migrate dev生產:
migrate deploy
👉 生產禁止使用:
migrate devmigrate reset
CI/CD 整合
- name: Run Prisma migrations
run: npx prisma migrate deploy流程:
拉程式碼
安裝依賴
執行 migration
部署應用
環境變數管理
dev / staging / prod 分離
使用
.env或 Secrets
Migration 管理
migration SQL 必須進 Git
必須 Code Review
特別關注:
大表變更
NOT NULL 欄位
資料遷移
Prisma Postgres(進階)
每個 PR 建立獨立 DB
自動化測試環境
GitHub Actions 整合
8. 小結
關鍵觀念:
Prisma 是工具鏈,而不只是 ORM
三大核心:Schema / Client / Migrate
強調型別安全與 DX
一切圍繞 Schema 驅動
在 Google 上持續關注
把 HeyBinyang 加入 Google 首選來源
如果你希望之後在 Google 上更容易看到我的更新,可以把這個站點加入 preferred source,讓它在相關閱讀情境裡更容易被找到。