指南

如何为你的应用添加数据库(避免日后丢数据)

要为你的应用添加数据库,请选择一个托管的关系型数据库(通常默认选Postgres),把它的连接字符串保存在服务器端的密钥中,为应用存储的每一类事物创建一张表,并让后端(而不是浏览器)读写这个数据库。如果你使用AI应用构建器,通常只需说一句“把这个保存到数据库”,代理就会设置好表和代码;你的工作是清楚地描述数据,并确认数据真的被保存下来。

本指南涵盖何时需要数据库、主要的选择、如何描述你的数据,以及导致数据丢失或泄露的常见错误。

你的应用何时需要数据库

当应用必须在页面关闭后记住某些内容,或者在人与人之间共享数据时,你就需要数据库。典型迹象包括:

  • 访客提交内容:表单、注册、预订、订单
  • 用户拥有带有自己已保存内容的账户
  • 管理员需要查看或编辑其他人创建的内容
  • 你希望统计一段时间内的报表或计数

如果是一个所有人看到的内容都相同的静态网站,例如作品集或简单的落地页,则不需要数据库。如果你不确定数据库到底是什么,请先阅读什么是数据库。

你的选择

选项是什么适合权衡
AI应用构建器自带的数据库为你的项目创建并连接好的数据库大多数用AI构建器做的应用与该平台的托管绑定;导出和备份取决于平台
托管的Postgres或MySQL你单独注册的托管关系型数据库自己托管的应用,或多个服务共享的数据库你需要自己管理密钥、连接数上限和套餐
后端即服务(BaaS)数据库加上身份认证、存储和API,集成在一个产品中前端为主、希望直接用现成登录功能的应用需要学习更多厂商特有的概念
文档型(NoSQL)数据库存储灵活的类JSON文档结构非常不规则的数据关系和报表更难处理
把电子表格当数据库通过API使用Google Sheets等很小的内部工具、原型速度慢,没有真正的约束,并发编辑时容易出错

对于大多数中小型Web应用,像Postgres这样的关系型数据库是合适的默认选择。它擅长处理关联关系(一个客户有多个订单),能保持数据一致,并且之后可以用SQL回答各种问题。通俗的介绍见什么是Postgres。

先描述你的数据

最有用的一步,是写下你的应用要存储的事物以及它们如何关联。你不需要数据库术语。以一个预订应用为例:

  • 客户: 姓名、邮箱、电话
  • 服务: 名称、时长、价格
  • 预订: 哪位客户、哪项服务、开始时间、状态(待确认、已确认、已取消)

这就是三张表。“哪位客户”和“哪项服务”会成为它们之间的关联(外键)。早期把这一点想清楚,比任何技术选型都重要得多,因为修改已经存有真实数据的结构,比修改页面布局困难得多。

几条经验法则:

  • 每类事物一张表。 不要把订单以文本形式塞进客户的某一列里。
  • 每一行都要有ID和创建时间。 以后你一定会用到。
  • 使用正确的数据类型。 日期用日期类型,金额用整数分或定点小数,不要存成文本。
  • 把必填字段标记为必填。 让数据库拒绝错误数据,而不只是依赖表单。

示例提示词

一次只做一个功能,不要一口气丢给它整个数据结构:

为这个应用添加数据库。创建一张 bookings 表,包含客户姓名、邮箱、服务、开始时间和状态(待确认、已确认、已取消;默认待确认)。把预订表单的提交保存到该表,显示成功提示,并添加一个管理页面,按最新优先列出所有预订。

然后再扩展:

添加一张 services 表(名称、时长(分钟)、价格(分))。把预订中自由填写的服务字段替换为指向 services 的关联,并迁移现有预订,且不要删除任何记录。

然后收紧约束:

确保所有数据库读写都在服务器上进行。浏览器绝不能接收到数据库连接字符串。在插入前,先在服务器上校验邮箱和开始时间。

分步操作

  1. 列出你的数据,如上所述:事物、字段、它们之间的关联。
  2. 创建数据库。 在AI构建器中,直接在聊天里要求创建。其他情况下,创建一个托管的Postgres实例并复制其连接字符串。
  3. 把连接字符串保存为密钥(服务器上的环境变量),绝不要写进代码。参见环境变量与密钥。
  4. 创建表。 使用迁移(migrations),即记录版本、用于修改结构的脚本,这样变更可以重复执行且可以回退。
  5. 构建服务器路由,负责创建、读取、更新和删除记录(CRUD)。浏览器调用这些路由,而不是直接访问数据库。
  6. 把界面连接到这些路由:保存的表单、加载的列表,以及没有数据时的空状态。
  7. 测试持久化。 提交一条数据,刷新页面,然后在另一个浏览器中打开。如果数据不在,说明它没有被保存到数据库。
  8. 检查访问权限。 以第二个用户登录,确认你看不到或修改不了第一个用户的数据。
  9. 发布后再次测试线上地址,因为已发布的应用可能使用与预览不同的连接。

常见错误

  • 保存到浏览器就以为已经存好了。 localStorage 在你的电脑上看起来正常,直到有人在另一台设备上打开应用才会发现问题。务必在第二个浏览器中测试。
  • 把连接字符串放进前端代码。 任何人都能读到前端代码,这等于把整个数据库交了出去。
  • 没有访问检查。 “显示我的订单”必须在服务器上按当前登录用户过滤,而不是只在界面里过滤。这是AI构建应用中最常见的安全漏洞;我们的安全检查清单涵盖了这一点。
  • 破坏性的结构变更。 要求“重命名表”或“修改结构”时,可能会删除并重建该表。如果已有真实数据,请明确说“迁移现有行,不要删除任何内容”。
  • 把文件存进数据库。 图片和PDF应该放在文件存储中,表里只保存它们的URL或键。参见如何为应用添加文件上传。
  • 没有备份。 在拥有客户之前,就要弄清楚平台如何备份数据、如何恢复。

检查清单

  • 每类事物都有自己的表,并带有ID和创建时间
  • 必填字段和数据类型由数据库强制执行
  • 连接字符串只保存在服务器端密钥中
  • 所有读写都通过服务器路由进行
  • 每个用户只能读取和修改自己的数据
  • 数据在刷新后依然存在,并能在另一个浏览器中看到
  • 结构变更使用迁移,并保留现有行
  • 你知道备份和恢复如何操作
  • 发布后已在线上地址测试过应用

在Mythex中添加数据库

在Mythex中,每个项目都可以获得一个专属的Postgres数据库,Free和Pro套餐均可使用。你通常不需要单独点击“附加”按钮:在聊天中提出需求(例如“把候补名单邮箱保存到数据库”),或输入 /database,连接信息就会注入到工作区和已发布的应用中。项目设置中会显示数据库是否已启用。

数据库在空闲5分钟后休眠,下一次请求时再唤醒。已发布应用的用量按数据库实际处于唤醒状态的时间计费,并从你构建时使用的同一积分余额中扣除。如果你是在发布之后才添加的数据库,请重新发布,让线上应用获取到它。

更多信息见文档中的数据库,以及构建CRUD应用示例。关于按用户保存数据所需的登录功能,请阅读如何为应用添加登录。

常见问题

我的应用需要数据库吗?

只要应用需要在访问之间记住某些内容,或在用户之间共享数据,就需要数据库,例如注册、订单、预订、帖子或设置。只向所有人展示相同内容的静态网站不需要数据库。

小型Web应用应该用哪种数据库?

对大多数小型Web应用来说,Postgres这类关系型数据库是稳妥的默认选择。它擅长处理用户、订单、关联关系和报表,支持广泛,在小规模下几乎不会超出其能力。

我可以把数据存在浏览器里,而不用数据库吗?

localStorage等浏览器存储只保存在一台设备的一个浏览器里,而且用户随时可以清除。它适合保存主题选择之类的偏好设置,但不适合任何你或其他用户之后需要看到的数据。

Mythex包含数据库吗?

包含。Free和Pro套餐中,每个Mythex项目都可以获得专属的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 繁體中文(香港) 繁體中文(台灣)