什麼是 CRUD?建立、讀取、更新、刪除一次看懂
CRUD 代表建立(create)、讀取(read)、更新(update)與刪除(delete)——應用程式對儲存資料所做的四項基本工作。新增一位客戶是建立,查看客戶清單是讀取,修改他的電話號碼是更新,而把他移除則是刪除。大多數商務應用程式——CRM、預約系統、庫存追蹤工具、管理後台——主要都是 CRUD,再加上一些規則與良好的版面設計。
用 AI 開發時,為什麼它很重要
CRUD 是一套詞彙,能把模糊的應用程式想法變成精確的要求。「一個管理供應商的應用程式」會讓 AI 只能猜測;「建立、列出、編輯與刪除供應商,欄位如下」則明確告訴它要建構哪些畫面、資料庫操作與伺服器路由。
它也提供了測試的檢查清單。對於應用程式中的每一種紀錄,你都可以問四個問題:我能新增一筆嗎?我能查看它們嗎?我能修改一筆嗎?我能移除一筆嗎?而且,只有對的人才能做這些操作嗎?許多 AI 開發的應用程式只能建立紀錄,卻無法編輯;或是任何人都能刪除任何東西。
日常生活的比喻:食譜卡盒
想像廚房架子上的一盒食譜卡。
- **建立:**寫下一張新卡片並歸檔。
- **讀取:**翻閱整盒卡片,或抽出千層麵那一張。
- **更新:**把「200 克起司」劃掉,改寫成「250 克」。
- **刪除:**把一張卡片抽出來丟掉。
現在再加上規則:只有主廚可以丟掉卡片、每張卡片都必須有標題,而且不能歸檔兩張同名的卡片。這就是一個帶有驗證與權限的 CRUD 應用程式——而這正是大多數真實應用程式的樣子。
CRUD 在每一層如何呈現
每一種操作都會出現在畫面、伺服器與資料庫中。把三者並排看,就能理解應用程式是如何建構的。
| 操作 | 畫面上 | API 請求(REST) | 資料庫中的 SQL |
|---|---|---|---|
| 建立 | 一個「新增」按鈕與一張表單 | POST /api/suppliers | INSERT |
| 讀取 | 一份附有搜尋與篩選功能的清單;一個詳細資料頁面 | GET /api/suppliers 與 GET /api/suppliers/42 | SELECT |
| 更新 | 一張「編輯」表單或行內編輯 | PUT 或 PATCH /api/suppliers/42 | UPDATE |
| 刪除 | 一個附有確認步驟的「刪除」按鈕 | DELETE /api/suppliers/42 | DELETE(或將資料列標記為已刪除) |
畫面是前端,API 請求是前端與後端溝通的方式,而 SQL 則是後端與資料庫溝通的方式。如果這些名詞對你來說還很陌生,請參閱什麼是 API與什麼是資料庫。
實例:設備借用追蹤工具
某所學校的媒體部門會把攝影機與麥克風借給學生,但他們一直搞丟追蹤紀錄。他們想要一個簡單的應用程式。
紀錄類型。兩種東西:設備(名稱、類型、序號、狀況)與借用紀錄(借的是哪一台設備、哪位學生、借出日期、應還日期、歸還日期)。
設備的 CRUD:
- **建立:**工作人員新增一台攝影機並輸入序號。規則:序號必須唯一。
- **讀取:**所有設備的清單,可依類型與「目前可借」篩選;一個詳細資料頁面,顯示單一項目的借用歷史。
- **更新:**將狀況改為「需要維修」。
- 刪除:通常不是真正的刪除。如果一台有 30 筆過往借用紀錄的攝影機被刪除,那些借用紀錄就會失去連結。因此改為標記為「已退役」,讓它從可借清單中消失,但歷史紀錄保留下來。這稱為軟刪除(soft delete)。
借用紀錄的 CRUD:
- **建立:**把一項設備借給學生。規則:已被借出的設備不能再借出。
- 讀取:「逾期借用」——應還日期已過、而且沒有歸還日期的清單。
- **更新:**設備歸還時,記錄歸還日期。
- **刪除:**僅限工作人員,用於刪除誤登的借用紀錄。
**權限。**學生只能查看可借的設備;只有工作人員可以建立、更新或刪除。這些檢查是在伺服器上執行,而不只是把按鈕隱藏起來。
這就是整個應用程式。真正有趣的部分——不會重複借出、逾期清單、每件設備的歷史紀錄——都是建立在單純的 CRUD 之上的規則與查詢。
關鍵名詞
- **紀錄(資料列):**一個項目,例如一位供應商或一筆借用。
- **實體/資源:**一類紀錄,例如「供應商」。每一類通常都有自己的資料表與一組 CRUD 畫面。
- **驗證(Validation):**對輸入內容的檢查,例如必填欄位、有效的電子郵件、正數的數量。為了方便,應在表單中檢查;為了安全,也應在伺服器上檢查。
- **軟刪除(Soft delete):**將紀錄標記為已刪除或已封存,而不是真正移除,讓歷史與連結得以保留。
- **分頁(Pagination):**一次只顯示長清單的一頁,讓應用程式保持快速。
- **稽核紀錄(Audit log):**記錄誰在什麼時候建立、修改或刪除了什麼。
- **管理後台(Admin panel):**供工作人員管理應用程式資料的一組 CRUD 畫面。
常見錯誤與誤解
- 漏掉其中一項。 應用程式經常只有建立與讀取,卻沒有編輯功能,於是每次打錯字就只能刪除後重新輸入。請為每一個實體檢查這四項操作。
- 刪除造成的破壞。 刪除一位有帳單的客戶,可能會留下孤立的帳單,或抹除歷史紀錄。請針對每個實體決定:阻擋刪除、軟刪除,或連同相關紀錄一起刪除。
- 只在介面上設定權限。 隱藏刪除按鈕並不能阻止別人送出
DELETE請求。伺服器必須檢查是誰在提出請求。 - 依 ID 更新而不檢查擁有者。 如果使用者 A 只要改變網址中的數字,就能編輯
/api/notes/42,他可能就編輯了使用者 B 的筆記。每一次更新與刪除都必須確認該紀錄屬於發出請求的人。 - 刪除時沒有確認。 一次誤觸不應該摧毀資料。請要求確認步驟,或提供復原功能。
- 「CRUD 很基本,不值得做。」 許多有價值的產品都是 CRUD 應用程式,它們比通用工具更貼合某個工作流程。
該向你的 AI 建構工具要求什麼
每個實體都採用這種模式,一次做一個:
建立一個供應商功能,包含列表、新增、編輯與刪除。欄位:名稱(必填)、聯絡電子郵件(須為有效的電子郵件)、電話、類別(食品、包裝、清潔其中之一)、備註。列表檢視可依名稱搜尋、依類別篩選,每頁 20 筆。刪除前請先確認;若供應商有訂單,則改為封存而不是刪除。只有登入的工作人員可以新增、編輯或封存——請在伺服器上強制執行。
接著測試全部四種操作,分別以有權限的使用者與不應有權限的人身分測試。一個實體運作正常後,再加入下一個。如何建構內部工具說明了 CRUD 畫面如何變成完整的管理後台,而什麼是 Postgres則說明了這些應用程式大多依託的資料庫。
Mythex 上的 CRUD 應用程式
CRUD 應用程式是 AI 應用程式建構工具最擅長的項目之一,Mythex 也不例外。在聊天中說明實體與其欄位,Mythex 就會為專案附加一個 Postgres 資料庫、建立資料表,並在即時預覽中建構列表、表單與詳細資料畫面;接著你可以執行 /test 來檢查流程。文件中有一份 CRUD 應用程式食譜,附有起始提示詞,而內部工具建構器與儀表板範本則是很好的起點。
常見問題
CRUD 代表什麼?
CRUD 代表建立(create)、讀取(read)、更新(update)與刪除(delete):新增一筆紀錄、查看紀錄、修改一筆紀錄,以及移除一筆紀錄。幾乎所有儲存資料的應用程式,都是由這四種操作所組成。
什麼是 CRUD 應用程式?
CRUD 應用程式的主要工作是透過表單、清單與詳細資料頁面來管理紀錄,例如 CRM、庫存追蹤工具、預約後台或職缺管理後台。大多數內部工具與管理後台都是 CRUD 應用程式。
CRUD 和 REST API 有什麼關係?
在典型的 REST API 中,建立使用 POST 請求,讀取使用 GET,更新使用 PUT 或 PATCH,刪除使用 DELETE。後端接著會執行對應的資料庫操作:INSERT、SELECT、UPDATE 或 DELETE。
CRUD 應用程式太簡單,沒有價值吧?
不會。許多實用的商務軟體都是 CRUD,再加上良好的規則、權限與報表。價值在於把資料模型建得好,並且貼合工作流程,而不在於使用了特別的技術。