vibe coding
Vibe Coding Vibe Coding技术认知:数据库
Vibe Coding

Vibe Coding技术认知:数据库

前面我们聊了前端和后端。

前端负责用户能看到、能操作的部分;后端负责处理数据、业务逻辑和安全。但只要你的项目不是一个纯展示页面,最终一定会遇到一个问题:数据放在哪里?

用户注册的信息放在哪里?订单数据放在哪里?文章内容放在哪里?聊天记录放在哪里?商品、任务、评论、文件、配置,这些东西都不可能只写死在代码里。

这时候就需要数据库。

这一小节,我们就来聊数据库。

这里同样不是教你马上写 SQL,也不是让你立刻成为数据库工程师,而是帮你先建立基本认知。因为在 Vibe Coding 里,如果你完全不懂数据库,AI 很容易帮你做出一个前期能跑、后期很难维护的数据结构。

一、什么是数据库?

简单来说,数据库就是专门用来存数据的地方。

前端负责展示数据,后端负责处理数据,而数据库负责长期保存数据。

一个用户注册之后,他的账号、手机号、密码哈希、创建时间,要保存到数据库里;一个订单创建之后,订单号、用户、商品、金额、状态、支付时间,也要保存到数据库里;一篇文章发布之后,标题、内容、作者、发布时间、审核状态,同样要保存到数据库里。

如果没有数据库,这些数据就只能临时存在内存里,程序一重启就没了;或者被写死在代码里,根本无法真正运营。

所以,数据库是项目的数据底座。一个项目能不能长期运行,能不能查数据、改数据、追踪历史、支撑后期功能扩展,很大程度上都和数据库设计有关。

二、为什么 Vibe Coding 必须理解数据库?

很多小白用 AI 做项目时,最容易忽略数据库。

前端页面能看,后端接口能调,就以为项目完成了。但实际上,很多时候数据只是假的,或者只是临时存在本地,根本没有真正进入数据库。

这类项目看起来能跑,但不能真正用。你刷新页面,数据没了;你换个账号,数据乱了;你部署上线,发现本地数据带不上去;你想加一个新功能,发现原来的数据结构根本支撑不了;你想统计用户行为,发现之前根本没有记录。

这就是数据库认知不足带来的问题。

在 Vibe Coding 里,这个问题尤其常见。因为 AI 很容易为了让功能先跑起来,临时造一个简单的数据结构。前期看起来没问题,后期功能一复杂,就会发现字段混乱、关系不清、重复数据一堆、权限也不好控制。

所以你不一定要会亲手写复杂 SQL,但你必须知道:数据不是随便存的。数据怎么存,决定了项目后面怎么查、怎么改、怎么扩展、怎么维护。

三、建议顺序:先 UI,再数据库,再后端

如果是完全靠 Vibe Coding 做项目,我更建议的顺序是:先写 UI,再设计数据库,最后写后端。

注意,这不是传统开发里唯一正确的顺序,而是更适合小白和 AI 协作的一种方式。原因很简单:UI 最容易把一个模糊想法变具体。

你一开始可能只知道自己要做一个管理系统、一个工具、一个小程序、一个交易后台,但具体需要哪些页面、哪些表单、哪些字段、哪些状态、哪些按钮,其实并不清楚。

这时候如果你直接让 AI 设计数据库,它很容易根据自己的理解随便猜。猜对还好,猜错了,后面前端和后端都会跟着错。

但如果你先把 UI 做出来,情况就不一样了。页面里有什么列表,列表就暗示了你需要哪些数据字段;页面里有什么详情页,详情页就暗示了数据对象的完整结构;页面里有什么表单,表单就暗示了用户会提交什么数据;页面里有什么按钮,按钮就暗示了需要哪些操作;页面里有什么状态,状态就暗示了数据流转过程。

也就是说,UI 会倒逼你和 AI 把数据形式想清楚。

等 UI 和流程基本确定之后,再让 AI 根据页面反推数据库结构,就会靠谱很多。因为这时候它不是凭空设计数据库,而是根据已经看得见的页面、字段、状态和操作来设计。

你可以让 AI 根据前端页面回答这些问题:这个列表需要什么表?这个详情页需要哪些字段?这个表单提交后要保存到哪里?这个状态从哪里来?这个按钮操作会改哪条数据?

数据库确定之后,再写后端也更顺。后端要做的事情,本质上就是围绕数据库和业务流程提供接口。数据库里有哪些表,前端需要哪些数据,用户会做哪些操作,这些都清楚了,后端接口才不容易乱。

所以这个顺序可以理解成:先用 UI 明确产品形态,再用数据库固定数据结构,最后用后端把页面和数据连接起来。

这样做的好处是,AI 更容易理解项目,小白也更容易验收结果。因为你先看到页面,再看到数据结构,最后再看接口逻辑,整个项目是从看得见的东西一步步落到看不见的系统里。

四、数据库服务、数据库、表和字段是什么关系?

对小白来说,理解数据库最重要的第一步,就是搞清楚数据库服务、数据库、数据表和字段之间的关系。

很多人会把它们都叫数据库,但严格一点说,它们不是一回事。

数据库服务,可以理解成正在运行的数据库软件。比如你在服务器上安装并启动了 MySQL 或 PostgreSQL,这个运行起来的东西就是数据库服务。

一个数据库服务里,通常可以创建多个数据库。比如一个数据库服务里,可以有项目 A 的数据库、项目 B 的数据库,也可以有测试数据库和正式数据库。

数据库,则可以理解成某个项目的数据空间。一般来说,一个项目会对应一个或多个数据库。对于小白做项目,通常先理解成一个项目对应一个数据库就够了。

数据库里面会有很多数据表。数据表负责存放某一类数据,比如用户表专门存用户,订单表专门存订单,商品表专门存商品,文章表专门存文章。

字段,就是这张表里每条数据需要记录哪些信息。用户表里可能有用户名、手机号、密码、头像、注册时间这些字段;订单表里可能有订单号、用户 ID、商品 ID、订单金额、订单状态、创建时间这些字段。

一张表里的一条完整数据,通常叫一条记录。比如用户表里的一条记录,就是一个用户;订单表里的一条记录,就是一笔订单;商品表里的一条记录,就是一个商品。

所以它们的关系可以简单理解成:数据库服务里可以有多个数据库,数据库里有很多数据表,数据表里有很多字段,字段定义了一条记录里要保存哪些信息,记录则是真正保存进去的一条条数据。

你也可以把它想象成一个办公楼。数据库服务像整栋办公楼,数据库像办公楼里的一个公司,数据表像公司里的不同部门,字段像每个部门固定要登记的信息项,记录就是一条条真实登记进去的信息。

你在 Vibe Coding 的时候,一定要让 AI 把这个关系说清楚。不要只让它说“我创建了数据库”,你要让它告诉你:当前用的是什么数据库服务?创建了哪个数据库?这个数据库里有哪些表?每张表存什么?每张表有哪些字段?字段分别代表什么?表和表之间怎么关联?

因为数据库设计不是随便建几个表就完事。如果数据库服务、数据库、表、字段这些层级没分清,小白很容易搞不懂自己到底是在连接数据库服务,还是在操作某个具体数据库,也搞不懂 AI 到底把表建到了哪里。

五、常见数据库类型和怎么让 AI 选型

数据库有很多种。

如果按是否开源来分,可以简单分成开源数据库和不开源数据库。

开源数据库里,最常见的有 MySQL、PostgreSQL、SQLite、MongoDB、Redis、ClickHouse 等。MySQL 和 PostgreSQL 都是非常常见的关系型数据库,适合大多数业务系统。SQLite 更轻量,适合本地应用、小工具、原型项目或者嵌入式场景。MongoDB 是比较常见的文档型数据库,结构更灵活。Redis 通常用于缓存、临时状态、排行榜、验证码、会话等场景。ClickHouse 常见于数据分析和日志分析类场景。

不开源数据库里,比较常见的有 Oracle Database、Microsoft SQL Server、IBM Db2 等。这些数据库通常出现在企业级系统、传统行业、金融、电信、政企项目里。它们往往有成熟的商业支持、权限体系、审计能力和企业服务,但使用成本、部署成本和学习成本也会更高。

除了按是否开源来分,也可以按数据模型来分。

关系型数据库,比如 MySQL、PostgreSQL、SQLite、Oracle、SQL Server,通常用表来组织数据,很适合用户、订单、商品、文章、权限这类结构清晰的数据。

非关系型数据库,比如 MongoDB,更像是用文档来存数据,结构相对灵活,适合一些变化比较快、结构不那么固定的场景。

缓存数据库,比如 Redis,通常不是用来长期保存核心业务数据,而是用来加速访问、保存临时状态。

向量数据库,在 AI 项目里会更常见,通常用来存文本、图片、音频等内容的向量表示,方便做相似度搜索、知识库检索、RAG 等功能。

对普通 Vibe Coding 项目来说,大多数业务项目常见建议是优先考虑 MySQL 或 PostgreSQL。它们成熟、稳定、资料多、生态完善,足够覆盖大多数后台系统、SaaS、内容系统、电商系统和工具类项目。

当然,这不代表你要自己拍脑袋选,也不是让 AI 随便选一个就开干。更合理的方式是让 AI 根据业务类型给出推荐,但必须要求它说明理由。

你可以问 AI:这个项目更适合 MySQL 还是 PostgreSQL?为什么?如果选 MySQL,后期可能有什么限制?如果选 PostgreSQL,会不会增加部署和维护成本?这个项目有没有必要用 MongoDB、Redis 或向量数据库?如果没有,为什么不需要?

你还可以让 AI 最后给出一个明确结论:当前项目推荐使用哪个数据库,原因是什么,不选其他数据库的理由是什么,后期如果项目变复杂,是否需要引入新的数据库组件。

这样不是让 AI 替你随便决定,而是让 AI 把选择过程讲清楚。你不一定完全懂数据库,但你至少能看到它有没有认真分析业务场景,而不是拍脑袋选型。

六、数据库设计常见概念

理解了数据库服务、数据库、数据表和字段的关系之后,再看其他概念就容易多了。

主键,是一条数据的唯一标识,通常用来区分每一条记录。比如每个用户都有一个用户 ID,每笔订单都有一个订单 ID。

唯一键,是用来保证某个字段不能重复的约束。比如手机号、邮箱、用户名、订单号这些字段,很多时候都不应该重复,就可以设置唯一键。

自增,是让数据库自动生成连续编号的一种方式。比如用户 ID 可以从 1 开始自动往后加,不需要你每次手动指定。

外键,可以理解成两类数据之间的关联。比如一笔订单属于某个用户,订单表里就需要记录它对应的是哪个用户。

索引,是为了让数据库查询更快的一种结构。数据少的时候你可能感觉不到,数据多了以后,没有索引的查询会变慢。但索引也不是越多越好,索引太多会影响写入速度,也会让数据库结构更复杂。

查询,就是从数据库里找数据。

写入,就是把新数据保存到数据库。

更新,就是修改已有数据。

删除,就是移除数据。删除通常要非常谨慎,尤其是真实业务数据。

迁移,是数据库结构发生变化时的变更记录。比如新增字段、新增表、修改字段类型,都应该通过迁移来管理,而不是随便手动改。

这些词后面你会经常遇到。你不需要马上精通,但至少要知道它们分别在说什么。

七、数据库最容易翻车的地方

数据库最容易翻车的地方,通常不是一开始跑不起来,而是后面越做越乱。

第一种,是表结构设计太随意。该分开的数据没有分开,所有东西都塞进一张表,前期看起来省事,后面查询、统计、权限和扩展都会变麻烦。

第二种,是所有数据都塞进一个大字段。看起来省事,实际上后面很难筛选、统计、排序和维护。

第三种,是表之间关系没设计清楚。用户、订单、商品、权限这些数据之间怎么关联,如果一开始没想清楚,后面接口和业务逻辑都会变乱。

第四种,是没有数据校验。用户提交的数据不一定可信。金额、手机号、邮箱、状态、数量,都需要校验,否则脏数据会进入数据库。

第五种,是没有迁移记录。项目迭代时,数据库结构一定会变化。如果没有迁移记录,后面开发环境、测试环境、线上环境很容易不一致。

第六种,是删除太随意。很多真实业务里,数据不能说删就删。删除之前要考虑是否有历史记录、是否影响统计、是否需要恢复。

第七种,是敏感信息处理不当。密码不能明文存储,密钥不能放进前端,用户隐私数据不能随便暴露,数据库连接信息也不能泄露。

第八种,是唯一性和索引没设计好。该唯一的字段没有唯一键,后面就可能出现重复手机号、重复邮箱、重复订单号。该加索引的字段没有索引,数据一多查询就会变慢。但索引加得太随意,也会拖慢写入、增加维护成本。

这些问题如果前期不管,后期会非常麻烦。

八、最后

这一小节,你先记住一句话:数据库是项目的数据底座。

前端让用户看到数据,后端处理数据,数据库保存数据。对 Vibe Coding 来说,你不一定要会亲手写 SQL,但你必须知道数据库在项目里负责什么。否则你很容易以为项目完成了,实际上只是前端假数据;你以为数据保存了,实际上没有真正入库;你以为功能能用了,实际上数据结构根本支撑不了后期扩展。

如果你完全靠 Vibe Coding 做项目,我更建议的顺序是:先写 UI,再建数据库,最后写后端。因为 UI 能帮你和 AI 看清楚页面、流程和数据形式;数据库能把这些数据形式固定下来;后端再根据数据库和页面流程去实现接口、权限和业务逻辑。这样项目会更稳,AI 也更不容易乱猜。

尤其是当项目要上线、要接用户、要长期运营时,数据库一定不能随便糊弄。

你要学会问 AI:当前用的是什么数据库服务?创建了哪个数据库?数据库里有哪些表?每张表有哪些字段?字段分别代表什么?表和表之间怎么关联?这个业务类型为什么适合这个数据库?为什么不选其他数据库?哪些字段需要唯一键?哪些 ID 适合自增?哪些字段需要索引?哪些操作需要事务?哪些数据不能直接删除?敏感信息怎么保存?

这些问题,决定了你的项目是一个能跑的 demo,还是一个真的可以继续迭代的产品。

该内容为@openbeetles原创内容,未经授权,禁止转载,违者必究!