BLOG
飞鲸数据分享的最新信息、体育资讯、数据百科、赛事分析、数据百科、接口示例
从零开始设计和搭建你的体育赛事比分网站 (4) - 建表优化
原创
今天
网站搭建
【目录】
1. 从零开始设计和搭建你的体育赛事比分网站 (1) - 项目构思
2. 从零开始设计和搭建你的体育赛事比分网站 (2) - 需求整理
3. 从零开始设计和搭建你的体育赛事比分网站 (3) - 原型与架构设计
4. 从零开始设计和搭建你的体育赛事比分网站 (4) - 建表优化
5. 从零开始设计和搭建你的体育赛事比分网站 (5) - 前后端分离
6. 从零开始设计和搭建你的体育赛事比分网站 (6) - 部署与运维

在一些项目中,常会有人对数据库中的表建的很随意,不考虑使用场景与网站在实际操作中的各种情况。假设我们体育赛事比分网站中的用户表 db_user,现在这个表要存放:
1)用户 ID;
2)用户名称(收件人);
3)加密后的登录密码;
4)邮箱;
5)手机;
6)地址;
7)上次修改密码时间;
我们举一个常见的反例:

大部分人都经历过这个阶段,更有甚者,除了 ID 其他一律 varchar(255)。虽然利用上边的表我们也可以正确的存储数据,但是小伙子,你这样是要被开除的!因为这从性能上来说就差很多了。
怎样建表才是正确的呢?我们先来介绍一个开发中的建表原则:
1)开发中往往把频繁用到的数据,存放到一张表,优先考虑效率;
2)不是常用的数据,存放到辅助表,更多地考虑节约空间;
3)对于常用的需要关联的数据,在需要的时候也会做冗余设计,提高检索速度,牺牲空间减少时间。
那么有一个问题,什么样的数据查询效率高呢?
1)计算机底层是二进制传输的,所以越贴近底层的数据类型效率越高,比如 int 类型的性能就远远比 varchar 类型的高,检索起来快;
2)定长的数据类型的检索要比变长的数据类型的要快,但相对来说也会牺牲一定的空间进行存储。
首先来分析一下那些数据使用频率比较高。我们可以打开 飞鲸体育数据 的控制台:


可以发现在个人中心-账号设置中,用户的数据不是全部查询出来的,比如像地址这样的数据就没有显示在账号设置中,所以我们可以优先考虑手机、邮箱、登录密码、上次修改密码时间这一部分数据的效率。
1)手机:手机不能使用数字类型,所以可以设置为定长的字符串 char(11) ,邮箱、密码同理;
2)上次修改密码时间在实际业务中可能会做一些计算(比如提示多少天没有修改密码),所以我们可以使用定长的时间戳 timestamp(4) 会更方便一些;
3)假设我们还有一些枚举类型的字段,比如性别等等,可以考虑采用 tinyint(1) 会节省空间。
而最终我们的表将会变成


在本模块中,我们分别从建表误区、建表原则、举例分析三个部分介绍了如何进行网站建表优化。在下一个模块中,我们将会从技术栈的角度出发,介绍网站的前后端开发,敬请期待!
购买咨询
购买咨询