要不要数据库,只取决于一件事:你有没有【同一个人的第二次】。要记住人,就得先给人开门。
前六章把 Web 系统的骨架讲完了——页面、服务器、网络、用户、进不了云的那部分、云本身。第七章换一个视角:真要开一个网站,得先决定哪些事。 教材 7-1 的并列关键词是【会员管理、商品销售】,这一节先把第一个决定讲清楚:上不上数据库。
一、数据库买的不是【存储】,是【认得人】
没有数据库的网站,每一次访问都是陌生人:同样一份 HTML 发给所有人,看完就走。
有了数据库,网站才第一次有【记忆】:这个人上次买过什么、地址在哪、卡还差几天到期。
所以数据库真正的价值,是把【这一次访问】变成【这个人的第 N 次访问】。 它与存储空间无关——一张 1 GB 的硬盘也能存东西,但库的作用是能查、能关联、能算。
两边的数据完全不一样:
| 方向 | 典型数据表 | 存什么 |
|---|---|---|
| 会员管理 | 会员表、订单表 | 账号、邮箱、收货地址、订单历史 |
| 商品销售 | 商品表、库存表 | 名称、规格、价格、库存、销量 |
这两套数据的交汇点是订单:一边认人,一边认货,订单把两边连起来。实际项目里,它们通常就在同一个数据库里。
二、会员管理的两面:记得住,也挡得住
会员库有个反直觉的代价——它会挡在门口。
研究购物车放弃原因的调查里,【被要求先注册】长期排在前三位,约 24% 的买家会因为这一步直接离开。换算成一家月访客 10000、客单价 300 元的店:转化率从 2.5% 掉到 1.9%,一个月少 60 单、一年少收 21.6 万元。
但账号本身确实值钱:有账号的人结账转化 64%,访客只有 52%——地址、卡号、优惠都在,复购时几秒钟就能下单。
所以正确的问题不是【要不要账号】,而是【什么时候要】:
- 把访客结账设为默认路径,先把单下完;
- 在订单完成页邀请【存一个密码,下次更快】——信息已经齐了,只差一个密码。
这叫把注册从【门槛】改成【回馈】。 想强推会员体系的(批发、B2B 报价制、订阅制),强制注册才说得通。
三、商品销售这一侧,难点在【并发】
会员库的难点是隐私与体验,商品库的难点是【同一秒】。
100 个人同时下单最后一件库存,如果程序按【查库存 → 判断 → 写回去】三步走,就会出现超卖。解决办法有两条:把库存判断放进一条带锁的事务里,或者把下单做成排队。
另外一件容易漏的事:订单不是一条记录,是一个状态。 待付款 → 已付款 → 已发货 → 已完成,还可能中途退款。订单表里必须有一列记状态,而每次改动都要能被追溯。
四、什么情况下可以先不上数据库
不是所有网站都需要库。判断标准只有一条:有没有【同一个人的第二次】。
| 网站类型 | 要不要数据库 | 为什么 |
|---|---|---|
| 企业展示站、博客 | 一般不用 | 内容由编辑发布,访客之间互不相干 |
| 纯表单收集 | 可以缓一缓 | 先用表单服务或邮件接住,量大了再入库 |
| 电商、会员站 | 必须上 | 库存、订单、会员都要跨会话记住 |
先从没有数据库开始,是省钱也省事的选择。 真需要的时候再迁,比一开始就上一套用不上的系统轻得多。
五、动手 Demo:把【强制注册】这笔账算一遍
把上面那个例子用代码复算一次——只要改几个数字,就能套到你自己的站点上。
visits, price = 10000, 300 # 每月访客、客单价
r1, r2 = 0.025, 0.019 # 允许访客结账 / 强制注册 的转化率
d = visits * (r1 - r2) * price
print(" 每月少 %.0f 单、少收 %.1f 万元" % (visits * (r1 - r2), d / 10000))
print(" 一年少收 %.1f 万元" % (d * 12 / 10000))
实跑输出:
--------------------------------------------------------------------
要不要数据库——先把【强制注册】这笔账算清楚
--------------------------------------------------------------------
场景:一家卖灯具的网店,每月 10000 名访客,客单价 300 元。
现在允许【不注册也能买】,结账转化率 2.5%。老板想改成【必须注册】,
理由是:这样才好做会员管理。两边各算一遍。
做法 结账转化 月订单 月营业额
-------------------------------------------------------
允许访客结账 2.5% 250 单 7.50 万元
必须注册才能结账 1.9% 190 单 5.70 万元
-------------------------------------------------------
一个月少 60 单、少收 1.8 万元;一年少收 21.6 万元。
这 60 单不是消失了,是被【请先注册】这一道门挡住了——
24% 的买家在被要求注册时会直接关掉页面。
但账号本身是有价值的,别急着把注册功能删掉:
买家类型 结账转化 为什么
-----------------------------------------------------------------
有账号(已登录) 64% 地址、卡号、优惠都在,几秒下单
访客(未登录) 52% 每次都要重填一遍,随时可能放弃
-----------------------------------------------------------------
结论不是【要不要账号】,而是【什么时候要】——
先让访客把单下完,再在订单完成页请他存一个密码。
【商品销售】这一侧则是另一套数据库,两者常放在同一个库里:
方向 典型数据表 存什么
---------------------------------------------------------------
会员管理 会员表、订单表 账号、邮箱、收货地址、订单历史
商品销售 商品表、库存表 名称、规格、价格、库存、销量
---------------------------------------------------------------
两者的交汇点是订单:一边认人,一边认货,订单把两边连起来。
看第一行:每月 60 单、1.8 万元——这就是那道门的价格。 看第二行:一年 21.6 万元。这个数字一摆出来,【要不要强制注册】就不再是偏好问题,而是一笔可比的账。 看中间那张注册用户表:64% 对 52%。同一个网站,登录与否差 12 个百分点——所以正确做法不是砍掉会员功能,而是把它从门口挪到门口之后。 最后提醒一句:库不是越多越好。 先回答【有没有同一个人的第二次】,答案是没有,就先别上。
30 秒实验
- 找一个你常买东西的网站,看它结账时允不允许【游客购买】——然后看它把注册邀请放在哪一步。
- 回想一次你因为【必须注册】而放弃购买的经历:当时你在哪一步犹豫了?
- 把你自己网站(或你负责的系统)的数据表列出来,它们是【认人】的还是【认货】的?
常见误区
- 错误:数据库就是用来存内容的。——纠正:存内容用文件、对象存储更便宜。 数据库的价值在【查、关联、算】——也就是【认得人】。
- 错误:会员越多越好,所以必须强制注册。——纠正:注册量与成交量常常是矛盾的。 强制注册能拿到更多账号,代价是当次的转化。先成交、后注册,两边都能要。
- 错误:小网站用不上数据库。——纠正:只要出现【同一个人第二次来】,就需要库。 哪怕只是记住购物车,也已经是数据库的活了。
自测三问(点开对答案)
1. 数据库给网站带来的、最本质的新能力是什么? —— **跨会话记住同一个人**——把一个个互不相干的访问,串成一个人的历史。这正是会员管理与商品销售能成立的前提。 2. 强制注册为什么会掉转化?数据上大概掉多少? —— **因为它在买家最想付钱的那一步加了一道门。** 调查里约 **24%** 的买家会因此在结账处放弃,对应转化率从 2.5% 掉到 1.9%。 3. 有账号的买家转化率为什么更高? —— **因为摩擦更少**:地址、卡号、优惠都已保存,复购几秒完成。数据上注册用户转化约 **64%**,访客约 **52%**。- ☐ 下一节(7-2 目标用户角色与客户旅程:目标用户角色、客户旅程)
相关笔记
- 目标用户角色与客户旅程 —— 定完要不要库,接着定【给谁做】
- 数据中心与云服务 —— 数据库最终跑在谁的机器上
- 客户端软件 —— 程序怎么连上数据库
- WordPress —— 一个真实网站用库的样子
- 数据库的非法访问 —— 库一旦被摸到会发生什么
- 静态页面与动态页面 —— 有没有数据库,决定了页面是静的还是会变的
- 🕸️ Web技术原理 · 索引