iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
4

本系列文以製作專案為主軸,紀錄小弟學習React以及GrahQL的過程。主要是記下重點步驟以及我覺得需要記憶的部分,有覺得不明確的地方還請留言多多指教。

前幾篇建立好了Apollo Server,不過都是用寫死的假資料在處理,現在要準備來串接到資料庫上。

Apollo官方的範例是使用sequelize做資料庫存取,不過在HOW TO GRAPHQL的教學中使用了Prisma套件,很有趣,就學著用然後來筆記些重點。

Prisma

Prisma是一套資料庫工具,提供好上手的資料庫串接功能,目前可銜接PostgreSQL,MySQL,SQLite。

整個套件包含幾組工具:

  • Prisma Client: 自動生成的資料庫CRUD介面。
  • Prisma Migrate (experimental): 根據資料模型更新資料庫架構的操作,目前還屬於測試功能。
  • Prisma Studio: 觀看與編輯資料庫的GUI

而以上工具都基於 Prisma Schema運作,Prisma Schema是用於定義資料架構與關聯的檔案,會像這樣:

model User {
  id        Int      @default(autoincrement()) @id
  birthDate DateTime
  email     String   @unique
  firstName String?
  lastName  String?
  posts     Post[]
}
model Post {
  content   String?
  post_id   Int     @default(autoincrement()) @id
  title     String
  author_id User
}

很像GraphQL Schema對不對?

簡化的Prisma介面建立步驟大致如下:

  1. 撰寫Schema,或從頭建立或根據既有資料庫Model自動生成
  2. 根據Schem自動生成Prisma Client,提供CRUD方法

編輯好Schema後大部分的操作都是根據指令自動的,這也是Prisma方便的地方。

Is Prisma an ORM?

官方原文

結論而言,Prisma不是ORM。

Prisma的作用與ORM相同,都是在javascript程式中建立資料庫參照,並根據該參照產生javascript的CRUD方法,讓人不用直接撰寫SQL就能存取資料庫。

而ORM,以sequelize為例,會將資料庫的表單、欄位轉換成javascript Object,並在Object間建立關聯以匹配資料庫的關聯關係。

而Prisma建立關聯的方式是撰寫Prsima Schema,並解析Schema後產生Prisma Client,並未建立Object所以不是ORM,

而Prisma認為這個方式可以解決ORM的幾個問題:

  • 以Object模擬資料庫間的關聯會產生阻抗不匹配( Impedance Mismatch)的問題,詳細可以看看這篇文章
  • Model撰寫費神,要確保Model與資料庫的匹配需求額外精力。
  • ORM學習曲線高。
  • 複雜查詢支援度不高,有時還是得直接撰寫SQL語法。

References:


上一篇
仿Trello - GraphQL Resolver簡介
下一篇
仿Trello - Prisma 安裝與 Schema 建立
系列文
React + GraphQL 全端練習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言