指南

如何為你的應用程式加入資料庫(資料不會日後遺失的做法)

要為應用程式加入資料庫,請選擇一個託管的關聯式資料庫(通常預設為 Postgres),把連線字串存放在伺服器端的機密設定中,為你的應用程式儲存的每一類事物各建一張資料表,並讓後端(而不是瀏覽器)負責讀寫資料庫。如果你使用 AI 應用程式生成工具,通常只需說一句「把這些資料儲存到資料庫」,代理便會建立資料表與程式碼;你的工作是清楚描述資料,並確認資料真的被保存。

本指南涵蓋何時需要資料庫、主要選擇、如何描述你的資料,以及導致資料遺失或外洩的錯誤。

你的應用程式何時需要資料庫

當應用程式必須在頁面關閉後記住某些資料,或在人與人之間共用資料時,就需要資料庫。常見的情況包括:

  • 訪客提交資料:表格、註冊、預約、訂單
  • 用戶擁有帳戶,並保存自己的內容
  • 管理員需要查看或編輯其他人建立的內容
  • 你需要隨時間統計的報表或數字

如果是所有人看到相同內容的靜態網站,例如作品集或簡單的宣傳頁,則不需要資料庫。如果你不確定資料庫究竟是什麼,請先閱讀什麼是資料庫。

你的選擇

選擇是什麼適合須留意
AI 應用程式生成工具內建的資料庫為你的專案建立並連接好的資料庫大多數用 AI 生成工具建立的應用程式綁定該平台的託管服務;匯出和備份取決於平台
託管 Postgres 或 MySQL你另行註冊的託管關聯式資料庫自行託管的應用程式,或多個服務共用的資料庫你需要自行管理金鑰、連線數上限和方案
後端即服務資料庫加上登入、儲存空間和 API,全部在同一產品內重視前端、希望直接使用現成登入功能的應用程式需要學習較多供應商專屬的概念
文件型(NoSQL)資料庫儲存彈性的類 JSON 文件結構非常不規則的資料關係和報表較難處理
用試算表當資料庫透過 API 使用 Google Sheets 或類似工具小型內部工具、原型速度慢、沒有真正的約束,同時編輯時容易出錯

對大多數中小型網絡應用程式來說,Postgres 這類關聯式資料庫是合適的預設選擇。它擅長處理資料關係(一位客戶有多筆訂單)、維持資料一致,並讓你日後可以用 SQL 查詢問題。如需淺白的概覽,請參閱什麼是 Postgres。

建造前先描述你的資料

最有用的做法,是先寫下應用程式要儲存的事物,以及它們之間如何連結。你不需要資料庫術語。以預約應用程式為例:

  • **客戶:**姓名、電郵、電話
  • **服務:**名稱、時長、價錢
  • **預約:**屬於哪位客戶、哪項服務、開始時間、狀態(待確認、已確認、已取消)

這樣就有三張資料表。「哪位客戶」和「哪項服務」會成為彼此之間的連結(外來鍵)。及早做好這一步,遠比任何技術選擇重要,因為一旦資料表已有真實資料,要改變其結構比改變頁面版面困難得多。

幾條實用原則:

  • **每類事物各用一張資料表。**不要把訂單塞進客戶的一個文字欄位。
  • **每一筆資料都要有 ID 和建立時間。**日後你一定會用到。
  • **使用正確的資料類型。**日期就存為日期,金額就以整數的仙(分)或小數類型儲存,不要存成文字。
  • **把必填欄位標示為必填。**讓資料庫拒絕不良資料,而不只是靠表格把關。

例子提示詞

每次先處理一項功能,不要一次過丟出整份結構:

為這個應用程式加入資料庫。建立一張 bookings 資料表,包括客戶姓名、電郵、服務、開始時間和狀態(待確認、已確認、已取消;預設為待確認)。把預約表格的提交內容儲存到這張資料表,顯示成功訊息,並加入一個管理頁面,按最新排序列出所有預約。

之後再擴充:

加入 services 資料表(名稱、時長(以分鐘計)、價錢(以仙計))。把預約中自由輸入的服務欄位,改為連結到 services,並在遷移現有預約時不要刪除任何資料。

再加強要求:

確保所有資料庫的讀寫都在伺服器端進行。瀏覽器絕不可以收到資料庫連線字串。在插入資料之前,先在伺服器端驗證電郵和開始時間。

逐步進行

  1. 列出你的資料,如上所述:事物、欄位、事物之間的連結。
  2. **建立資料庫。**在 AI 生成工具中,直接在對話裡提出要求;其他平台則建立託管的 Postgres 執行個體,並複製其連線字串。
  3. 把連線字串儲存為機密(伺服器上的環境變數),切勿寫在程式碼中。請參閱環境變數與機密。
  4. **建立資料表。**使用遷移(migration),即用來改動結構的版本化腳本,令每次改動都可重複執行、可還原。
  5. 建立伺服器路由,負責新增、讀取、更新和刪除資料列(CRUD)。瀏覽器呼叫這些路由,而不是直接連接資料庫。
  6. **把介面連接到這些路由。**儲存資料的表格、載入資料的清單,以及尚無資料時的空白狀態。
  7. **測試資料是否真的保存。**提交一筆資料,重新載入頁面,再用另一個瀏覽器開啟。如果資料不見了,代表它並未存入資料庫。
  8. **檢查存取權限。**以第二位用戶登入,確認你無法看見或修改第一位用戶的資料。
  9. 發布後再次測試正式網址,因為已發布的應用程式可能使用與預覽環境不同的連線。

常見錯誤

  • **存到瀏覽器就以為已經儲存。**localStorage 看似運作正常,直到有人在另一部裝置上開啟應用程式才會發現問題。一定要用第二個瀏覽器測試。
  • **把連線字串放在前端程式碼中。**任何人都可以讀取前端程式碼,這等於把整個資料庫交給他們。
  • 沒有存取檢查。「顯示我的訂單」必須在伺服器端按登入用戶篩選,而不是在介面上篩選。這是 AI 生成應用程式中最常見的安全漏洞;我們的安全檢查清單有相關說明。
  • **破壞性的結構改動。**要求「重新命名資料表」或「更改結構」,可能會刪除並重建資料表。當已有真實資料時,請明確說明「遷移現有資料列,不要刪除任何東西」。
  • **把檔案存在資料庫中。**圖片和 PDF 應存放在檔案儲存空間,資料表中只保存它們的 URL 或鍵。詳見如何為應用程式加入檔案上傳。
  • **沒有備份。**在有客戶之前,先了解平台如何備份資料,以及如何還原。

檢查清單

  • 每一類事物都有自己的資料表,並包含 ID 和建立時間
  • 必填欄位和資料類型由資料庫強制執行
  • 連線字串只存放在伺服器端的機密中
  • 所有讀寫都經過伺服器路由
  • 每位用戶只能讀取和修改自己的資料列
  • 資料在重新載入後仍然存在,並能在另一個瀏覽器中看到
  • 結構改動使用遷移,並保留現有資料列
  • 你清楚知道備份和還原的運作方式
  • 發布後已測試正式運行的應用程式

在 Mythex 加入資料庫

在 Mythex,每個專案都可以取得自己的專用 Postgres 資料庫,免費及 Pro 方案均適用。你通常不需要另外按「附加」按鈕:在對話中提出要求(例如「把候補名單的電郵儲存到資料庫」),或輸入 /database,連線資料便會注入工作區及已發布的應用程式。專案設定會顯示資料庫是否已啟用。

資料庫閒置 5 分鐘後會進入休眠,並在下一個請求時喚醒。已發布的用量,按資料庫實際醒着的時間計費,並從你建立應用程式時使用的同一個點數餘額扣除。如果你在發布後才加入資料庫,請重新發布,讓正式應用程式使用它。

詳情請參閱文件中的資料庫,以及建立 CRUD 應用程式的範例。關於按用戶保存資料的登入部分,請參閱如何為應用程式加入登入功能。

常見問題

我的應用程式需要資料庫嗎?

只要應用程式需要在訪客離開後仍記住某些資料,或在用戶之間共用資料,就需要。例如註冊、訂單、預約、帖文或設定。如果只是向所有人顯示相同內容的靜態網站,例如作品集或簡單的單頁網站,則不需要。

小型網絡應用程式應該用哪個資料庫?

對大多數小型網絡應用程式來說,Postgres 這類關聯式資料庫是穩妥的預設選擇。它能妥善處理用戶、訂單、資料關係及報表,支援廣泛,而且在小規模使用時很少會不敷應用。

我可以把資料存在瀏覽器裡,而不用資料庫嗎?

localStorage 之類的瀏覽器儲存空間只存在於同一部裝置、同一個瀏覽器中,用戶隨時可以清除。它適合保存主題選擇之類的偏好設定,但不適合存放你或其他用戶日後需要查看的資料。

Mythex 有包括資料庫嗎?

有。Mythex 專案在免費及 Pro 方案下都可以獲得自己的專用 Postgres 資料庫。你可以在對話中提出要求,或使用 /database 指令,連線資料會自動注入。用量與建立應用程式時使用的同一個點數餘額一併扣除。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)