开发 | 电商小程序数据库该如何设计?这 2 个方法拯救你

作者:刘志鹏

最近有些小伙伴问小云:

我想要做一款小程序,但是不知道数据库该怎么设计,怎么办?

相信有许多开发者都会有这样的疑问。虽然目前大家使用知晓云开发小程序,已经不再需要考虑后端代码的实现,只需要关心前端业务逻辑的展示即可。但对于想要实现复杂业务的小程序开发者来说,后台数据库到底是建一张表还是多张表、每张表分别存储什么信息、表与表之间如何关联等等问题仍然是一个令人头疼的问题。

如果在小程序实现之初只是草草定了一个基本架构,随意的建了几张表。万一哪天你的小程序火了,涌进大批用户,却因为数据库设计的原因导致数据访问缓慢,增删改查各种异常。虽然引得来用户,却留不住,该是何等可惜的一件事。

那既然数据库如此重要,到底该如何设计呢?其实只要了解并遵循数据库设计的三范式,就已经足够应付绝大部分场景了。

数据库设计的三范式

今天我们就以电商小程序「玩物志」的数据库设计为例,为大家介绍一下什么是三范式。

1. 将数据按照逻辑思维分成不同的块

这个规则其实就是「三范式」中的第一范式(1 NF),即属性具有原子性,不可再分解。(字段是最小的的单元不可再分 )

例如下面的图表,如果你想统计用户的城市分布情况,在没有对原始表进行拆分时,会非常痛苦。而随着脏数据的增加,拆分的工作会变得更加困难。

2. 将重复、不统一的数据视作你最大的敌人

仅仅只是完成初步的数据拆分,仍然会面临许多问题。

比如下面这张订单表,当同一个用户购买了多次同样的产品时,在收货地址这部分会出现大量的冗余数据。而当我们清空订单数据时,用户的地址信息也跟着被清空了。

根据第二范式(2NF)的要求:唯一性约束,每条记录有唯一标示。即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

我们把邮寄信息从原表中拆出,通过主键 address_book_id 相关联。这样当订单被删除时,也不会影响到用户的地址信息。

3. 当心数据依赖

第三范式(3NF)是对冗余性的约束,即非主键字段间不能相互依赖。 这要求每属性都跟主键有直接关系而不是间接关系。像:a➝b➝c 属性之间含有这样的关系,是不符合第三范式的。比如下面这张图表:

当然,实际设计过程中不会向上述实例一样简单,且三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。 如果有特殊情况,当然要特殊对待,毕竟数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

读完之后还是不知从何下手?没关系\( ̄) ̄)/ 请往下看 ?

知晓云开放电商数据库模板

要知道,好的设计就是要拿来学习借鉴的。知晓云精心挑选了一些经典的数据库设计案例,全部免费开放,各位小伙伴们可以按需选择使用。

在首批上线的模版中,除了一些通用的数据表,还特别提供了电商模板。

因为不同于图书馆、抽奖之类的小程序,几张简单的数据表即可轻松应对。对于电商这种业务复杂程度高,且对性能有一定要求的小程序,数据库的设计难度会高很多。

我们提供的这套模板是经过「玩物志」实践,能提供电商小程序常用的 SKU、商品、订单、子订单、购物车管理等功能,且兼具高性能的数据库。

如上图,首先在创建数据表时选择「电商」分类;然后挑选你需要用到的模板,快速创建一张数据表;最后可根据实际业务需求修改或删除内置字段。

你不用再烦恼复杂的数据表逻辑该如何设计,直接使用知晓云的数据库模板,就能大大节省时间和精力。

另外,如果你希望我们提供其他类型的设计模板,请在评论区留下你的需求,或者联系晓小云(微信号:minsupport)反馈。

这是我们的一次尝试,接下来知晓云还会做更多类似的尝试,比如提供更多类型的的 Demo 、引入内容库模板、完善操作指引等等。

在帮助大家提升开发效率、解决开发难题的路上,我们会不断前行。

最后

想借此机会感谢某位不愿意透露 ID 的用户,您针对数据模块功能提出的建议我们已经收到,并已列入近期的改造计划,感谢您对知晓云的支持。

最后的最后,悄悄透露一个好消息:为了支持更加复杂的业务逻辑,云函数功能已经正式进入筹备阶段,相信不久的将来就可以与大家正式见面啦。

原文发布于微信公众号 - 知晓程序(zxcx0101)

原文发表时间:2017-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

假期前的数据库检查之主动优化(r11笔记第50天)

快要过年了,很多工作都会放下来,很多计划都会搁置下来,节前的检查还是必要的,尤其是那些看似不起眼的问题尤其需要注意。今天就处理了一起,也算是假期前的性能优化临门...

3245
来自专栏架构师之路

就是这么迅猛的实现搜索需求

一、缘起 《深入浅出搜索架构(上篇)》详细介绍了: (1)全网搜索引擎架构与流程 (2)站内搜索引擎架构与流程 (3)搜索原理与核心数据结构 本文重点介绍: (...

3164
来自专栏大宽宽的碎碎念

谈谈自己的大数据迁移经历背景问题规模数据迁移要考虑的问题最后

56613
来自专栏腾讯Bugly的专栏

【Dev Club分享】微信读书iOS性能优化

“8小时内拼工作,8小时外拼成长”这是大家共同的理想。除了每天忙于工作外,我们都希望能更多地区吸收领域内的新知识与新技能,从而走向人生巅峰。 Dev Club ...

3625
来自专栏Crossin的编程教室

爬虫+网站开发实例:电影票比价网

时常有同学会问我类似的问题:我已经学完了 Python 基础,也照着例子写过一点爬虫代码 / 了解过 django 的入门项目 / 看过数据分析的教程……然后就...

4685
来自专栏全华班

一套标准的办公自动化解决方案(简要版)

? 解决什么问题 通过解决方案来实现: 1、通过畅通、高速的网络平台,先进的应用系统,打破企业部门之间的信息壁垒,实现整个公司信息和知识的共享; 2、 提高办...

3689
来自专栏知晓程序

昨晚的微信小程序新能力,可能 99% 的人都弄错了

这次的新能力有哪些「并非如此」的「文字小把戏」呢?下面,知晓程序就带大家来仔细看看。

481
来自专栏编程微刊

自媒体运营技巧:如何成功申请今日头条号?

2.2K3
来自专栏程序员互动联盟

【编程指导】新程序员必须具备的十个基本技能

没有几个学生能100%为自己的第一份真正的工作做好准备。如果你不想成为其中之一,请学学以下这10项无需手把手指导就能学会的基本技能吧! 1、版本控制系统(VCS...

35713
来自专栏Keegan小钢

App项目实战之路(一):概述篇

我计划做一款App产品,包括Android和iOS,做完打算将Android和iOS客户端的代码开源,并将上架到应用宝和AppStore,之后还会不断迭代。而在...

1313

扫码关注云+社区

领取腾讯云代金券