前情提要

什麼是 Prisma?

Prisma 是給 Node.js / TypeScript 用的 ORM。你用一份 schema.prisma 描述資料表,Prisma 負責三件事:

它和 Django 的 Model、SQLAlchemy 的角色很像:先定義資料,再讓程式去讀寫。差別是 schema 獨立成一個檔案,不寫在 class 裡。


Schema 檔案長什麼樣子

專案位置:prisma/schema.prisma。一份 schema 只有三種區塊。

區塊 做什麼
datasource 連哪一種資料庫、連線字串從哪裡讀
generator 要產生哪一種 Client(這裡是 prisma-client-js)
model 一張資料表。一個 model 對應一張表
datasource db { // 資料來源設定
  provider = "mysql"
  url      = env("DATABASE_URL")
}

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

Start !

以 Google SSO 為例,在 Google SSO 的登入流程中,常見做法是需要用兩張表:users 存使用者,sessions 存刷新憑證。而一個使用者可以有多筆 session。

可以透過烏鴉腳(Crow's Foot)語法,精準表達一對多、零對多等關聯關係,繪製成以下圖表:

erDiagram
    USER ||--o{ SESSION : contains
    USER {
        string id PK
        string name
    }
    SESSION {
        string id PK
        string user_id FK
    }