🕸️ 第七章 Web网站的创建
📄 一句话概括

要不要数据库,只取决于一件事:你有没有【同一个人的第二次】。要记住人,就得先给人开门。

📝 本节和前面几节的关系

前六章把 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. 回想一次你因为【必须注册】而放弃购买的经历:当时你在哪一步犹豫了?
  3. 把你自己网站(或你负责的系统)的数据表列出来,它们是【认人】的还是【认货】的?

常见误区

  1. 错误:数据库就是用来存内容的。——纠正:存内容用文件、对象存储更便宜。 数据库的价值在【查、关联、算】——也就是【认得人】。
  2. 错误:会员越多越好,所以必须强制注册。——纠正:注册量与成交量常常是矛盾的。 强制注册能拿到更多账号,代价是当次的转化。先成交、后注册,两边都能要。
  3. 错误:小网站用不上数据库。——纠正:只要出现【同一个人第二次来】,就需要库。 哪怕只是记住购物车,也已经是数据库的活了。
自测三问(点开对答案) 1. 数据库给网站带来的、最本质的新能力是什么? —— **跨会话记住同一个人**——把一个个互不相干的访问,串成一个人的历史。这正是会员管理与商品销售能成立的前提。 2. 强制注册为什么会掉转化?数据上大概掉多少? —— **因为它在买家最想付钱的那一步加了一道门。** 调查里约 **24%** 的买家会因此在结账处放弃,对应转化率从 2.5% 掉到 1.9%。 3. 有账号的买家转化率为什么更高? —— **因为摩擦更少**:地址、卡号、优惠都已保存,复购几秒完成。数据上注册用户转化约 **64%**,访客约 **52%**。

相关笔记