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