从零开始设计和搭建你的体育赛事比分网站 (4) - 建表优化


【目录】


上一个模块中,我们分别从快速原型设计、对初级架构设计进行优化这两方面进行了体育赛事比分网站的原型与架构设计。在本模块中,我们将从网站建表优化这一方面进行如下三个模块的介绍。

模块.png

4 建表优化

4.1 建表误区

在一些项目中,常会有人对数据库中的表建的很随意,不考虑使用场景与网站在实际操作中的各种情况。假设我们体育赛事比分网站中的用户表 db_user,现在这个表要存放:

  • 用户 ID;
  • 用户名称(收件人);
  • 加密后的登录密码;
  • 邮箱;
  • 手机;
  • 地址;
  • 上次修改密码时间;

我们举一个常见的反例:

用户表.png

大部分人都经历过这个阶段,更有甚者,除了 ID 其他一律 varchar(255)。虽然利用上边的表我们也可以正确的存储数据,但是小伙子,你这样是要被开除的!因为这从性能上来说就差很多了。

4.2 建表原则

怎样建表才是正确的呢?我们先来介绍一个开发中的建表原则:

  • 开发中往往把频繁用到的数据,存放到一张表,优先考虑效率;
  • 不是常用的数据,存放到辅助表,更多地考虑节约空间;
  • 对于常用的需要关联的数据,在需要的时候也会做冗余设计,提高检索速度,牺牲空间减少时间。

那么有一个问题,什么样的数据查询效率高呢?

  • 计算机底层是二进制传输的,所以越贴近底层的数据类型效率越高,比如 int 类型的性能就远远比 varchar 类型的高,检索起来快;
  • 定长的数据类型的检索要比变长的数据类型的要快,但相对来说也会牺牲一定的空间进行存储。

4.3 举例分析

首先来分析一下那些数据使用频率比较高。我们可以打开 飞鲸体育数据 的控制台:

控制台.png

111.png

可以发现在个人中心-账号设置中,用户的数据不是全部查询出来的,比如像地址这样的数据就没有显示在账号设置中,所以我们可以优先考虑手机、邮箱、登录密码、上次修改密码时间这一部分数据的效率。

  • 手机:手机不能使用数字类型,所以可以设置为定长的字符串 char(11) ,邮箱、密码同理;
  • 上次修改密码时间在实际业务中可能会做一些计算(比如提示多少天没有修改密码),所以我们可以使用定长的时间戳 timestamp(4) 会更方便一些;
  • 假设我们还有一些枚举类型的字段,比如性别等等,可以考虑采用 tinyint(1) 会节省空间。

而最终我们的表将会变成

用户表2.png

收件地址.png

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

相关推荐
足球数据API接口 - 【足球赛事分析数据】API调用示例代码
从零开始设计和搭建你的体育赛事竞猜网站 (1) - 项目构思
篮球数据API接口 - 【联赛资料】API调用示例代码