PostgreSQL
中级通用
PostgreSQL 是一种开源的关系型数据库管理系统,用表保存数据,并支持 SQL 查询和事务。它能让网站或 App 在多人同时使用时,可靠地保存和关联用户、订单等数据。
你可能会说:「我想做个多人使用的订单后台,数据要长期保存,还能按用户查询和统计。」
读之前建议先了解
动手看看新用户打开我的订单
1
刚注册的用户打开「我的订单」。应用发送 SQL 查询,希望同时拿到用户资料和关联订单。
要点PostgreSQL 怎样帮产品保存数据?
- 1
把相关数据放进不同的表
做订单后台时,我们可以分别保存用户、商品和订单,再用主键等字段关联它们。这样查询某个用户的订单时,不必把用户资料在每笔订单里重复存一遍。
- 2
通过 SQL 读写和筛选数据
你的后端可以向 PostgreSQL 发送 SQL,新增订单、修改状态,或筛选出本月未付款的订单。数据量变大后,常用查询还可以借助索引加速,但索引也会占用空间并增加写入开销。
- 3
用事务处理成组的改动
比如确认订单时,要同时记录付款和更新订单状态。我们可以把相关操作放进一个事务:如果其中一步失败,整组改动就能回滚,避免只完成一半。业务规则仍要由应用正确实现。
容易混淆的地方
PostgreSQL 是运行和管理数据的数据库系统;SQL 是你用来查询、修改数据的语言,不是另一款数据库。SQLite 也是关系型数据库,但通常直接读写本地数据库文件,适合嵌入应用;PostgreSQL 以服务方式运行,更适合多个应用实例或用户共同访问数据。
什么时候用
适合用
- 做多人使用的 SaaS 后台,要长期保存客户、成员和订单,并按关联关系查询。
- 开发预约 App,需要同时处理名额扣减和预约记录,避免只写入其中一项。
- 做 AI 工具的账户与任务管理,按用户查询历史任务、状态和用量记录。
不适合用
- 只做一个静态展示网站,没有账号和动态数据时,用静态文件托管就够了。
- 只在单机脚本里保存少量本地记录,不打算部署数据库服务时,可以先用 SQLite。
- 主要存放用户上传的视频和图片原文件时,用对象存储更合适,数据库只记录文件地址和元数据。
练一练选一个答案,看看解释
你在做一个多人预约系统:用户会同时抢同一时段,后台还要按用户和日期查询记录。哪种方案最贴合需求?
让 AI 帮你做复制给 AI Agent 直接用
请为这个多人预约应用使用 PostgreSQL 设计用户、时段和预约表,说明主键、关联关系及防止重复预约的约束。预约创建和名额更新请放在事务中,并给出数据库迁移文件;先说明你对名额规则的假设。