
最近接了个新活儿,之前的项目被我搞得有点一团糟,很多功能代码和数据模型都混在一起,自己找起来都费劲。这回我下定决心,一定要把模型设计这块捋清楚,不能再摸着石头过河了。...
最近接了个新活儿,之前的项目被我搞得有点一团糟,很多功能代码和数据模型都混在一起,自己找起来都费劲。这回我下定决心,一定要把模型设计这块捋清楚,不能再摸着石头过河了。
模型设计第一步,就是搞明白到底要做什么。我立马就去找了产品经理和几个经常抱怨我们系统慢的用户。
我坐下来,把他们说的所有关于新功能的想法和痛点,一条一条记下来,不是光听听就完了,我要求他们必须把核心流程给我画出来。就像要盖房子一样,得先搞清楚这房子是住人还是放东西。
这个阶段,我花了将近两天,就是为了保证后面不会返工。
需求大致定下来之后,我拿了一张大白纸,都没打开电脑。我开始把上一步记下来的那些核心“东西”画成一个个大方块。
我用笔在这些方块之间连线,标出它们之间的关系,比如“一个用户可以有多个订单”,我就画一个1对多的箭头。别去管用什么字段,别去想数据类型,就看它们怎么连起来工作。
这个草图一画出来,我就发现有个地方逻辑不通顺,赶紧回去找产品经理再确认了一下,避免了后面的大麻烦。
草图有了,接着我要开始设计表结构了。我打开了我的设计工具,把刚才的方块变成一个个逻辑表。我给每个表都加上了字段,字段名要起得通俗易懂,不能随便用缩写。
我仔细地想:
这个阶段我反复地推敲,确保模型的约束和完整性。就像在搭乐高,每一块都要扣上,不能有缝隙。

逻辑模型定稿后,我就要决定用哪个数据库实现了。我们团队决定用PostgreSQL,所以我开始把逻辑设计转换成具体的数据库语言。
我开始选数据类型:字符串用`VARCHAR`,时间用`TIMESTAMP`。最关键的是,我要考虑性能问题,我赶紧把那些查询频繁的字段加上了索引。这个索引可不能乱加,加多了写入就慢,加少了查询就慢,我平衡了很久才最终确定。
我敲下了`CREATE TABLE`的语句,把表建这一步算是正式落地了。
表建好了,是不是就大功告成了?才不是!我马上写了一些测试脚本,往里面塞了一大批假数据,模拟用户真实使用的情况。
我重点地跑了跑那些业务最复杂的查询语句,一看执行时间,果然有几个查询慢得不行,耗了好几秒!
我赶紧回头,查看了慢查询的执行计划,发现是索引没加对地方,或者查询语句写得不够高效。我调整了两个表的索引策略,重新测试了一下,执行时间一下子就降下来了,达到毫秒级。
这整个一套流程走下来,我觉得这回的模型做得扎实多了,以后再也不怕需求变动来折腾了。自己动手跑一遍流程,比看一百本书都管用!

下一篇:在韩国买什么样的化妆品好