测试人员关注数据库表设计是“测试左移”的一种手段,可以把有关数据库的潜在bug消灭在系统测试之前,从而提高交付效率。

以MySQL为例,QA可从以下方面对数据库表设计做测试的左移:

1、数据表功能

表结构

  • 确保每张表都有主键,且主键值唯一且非空,以保证表中每行数据的唯一性和可识别性
  • 检查外键约束是否有效,即外键值必须是对应主键表中存在的值,避免出现孤立数据或无效关联
  • 表之间存在关联的,验证表与表之间的关联关系是否正确建立(如主键和外键的设置是否准确,关联字段的数据类型和长度是否一致)
  • 评估数据表结构对业务变化的适应性(是否能够灵活地进行调整和扩展,以满足不断变化的业务需求)

表字段

  • 字段的数据类型是否符合业务要求(比如数据量大的字段类型设计成int,使用unsignedint或bigint)
  • 字段的长度设计是否合理(是否有合理的buffer,兼容后续新业务)
  • 不同表,相同含义的字段命名是否统一(多分参与开发时,歧义少,也就降低了bug出现的可能性)
  • 不同表,相同含义字段的类型、长度是否一致(不一致时,可能会出现表A正常落库,表B因不能正常落库而发生bug)
  • 敏感字断是否经过加密处理(如银行卡号,身份正号,手机号等)
  • 约束条件是否符合业务要求(接口设计字段可以空,但表设计字段NOT NULL,提交的时候显然会报错)
  • 冗余字段是否贴合实际业务要求(很多时候,RD为了提高扩展性,设计很多无效的字断,会拉低CURD性能)
  • 字段有默认值的,检查默认值是否符合业务要求
  • 日期字断需要特别关注,是否业务上对日期格式的要求

2、数据表性能

  • 对于查询操作会操作的表,是否有设计索引(经常用于查询条件、连接条件或排序的字段,需创建索引)
  • 索引的创建是否合理,是否能有效提高查询性能(设计索引的字段应为查询条件的过滤字段)
  • 索引是否过度创建(合理的索引可以提高查询性能,但过多的索引会拉低增删改的性能)
  • 视图是否合理创建(如果新增表参与联表查询,考虑是否可以使用视图来提高查询速度)

关于MySQL表设计,测试人员可以关注哪些点的更多相关文章

  1. 面试mysql表设计要注意啥

    面试官:讲讲mysql表设计要注意啥? 引言 大家应该知道烟哥最近要(tiao 咳咳咳),嗯,不可描述! 随手讲其中一部分知识,都是一些烟哥自己平时工作的总结以及经验.大家看完,其实能避开很多坑.而且 ...

  2. mysql表设计注意点

    [原创]面试官:讲讲mysql表设计要注意啥 需要设计一个主键 因为你不设主键的情况下,innodb也会帮你生成一个隐藏列,作为自增主键.所以啦,反正都要生成一个主键,那你还不如自己指定一个主键,在有 ...

  3. 【原创】面试官:讲讲mysql表设计要注意啥

    引言 近期由于复习了一下mysql的内容,有些心得.随手讲其中一部分知识,都是一些烟哥自己平时工作的总结以及经验.大家看完,其实能避开很多坑.而且很多问题,都是面试中实打实会问到的! 比如 OK,具体 ...

  4. <转载>面试官: 讲讲MySql表设计需要注意什么?

    作者:孤独烟 出处: http://rjzheng.cnblogs.com/ 综述 近期由于复习了一下MySQL的内容看到一篇比较好的文章,转载分享一下.大家看完,其实能避开很多坑.而且很多问题,都是 ...

  5. mysql表设计原则

    0.三大范式及反范式 ◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列.  ◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键:二是没有包含在主键中的 ...

  6. mysql表设计

    model表 记录网站模块:如视频,音频,调查,01发布内容时.可以指定发布到哪个模块下02可以统计每个模块的访问量设计表注意点01主键不要用id (全部使用 当前表名+id 如modelid)02n ...

  7. 【MySQL】MySQL表设计的常用数据类型

    整数类型,tinyint.smallint.mediumint.int.bigint 如果需要保存整数(不含小数),可以选择tinyint.smallint.mediumint.int.bigint, ...

  8. 实现类似微信聊天功能的mysql表设计

    前言: 最近设计了一套聊天功能,此功能支持人对人聊天.发送图片.查看聊天记录.按时间展示聊天列表.最后一条聊天数据及未读消息数 下面分享一下表结构及实现逻辑: 表结构: 1.聊天主表 id(主键id) ...

  9. mysql表设计---时间类型

    mysql 时间格式的区别 datetime 日期 +时间timestamp 时间戳 格式都是一样YYYY-MM-DD HH:MM:SS int(12)型存储php的time()时间戳,格式10位14 ...

  10. MySQL表设计:每一种商品有不确定个数的属性

    I personally would use a model similar to the following: The product table would be pretty basic, yo ...

随机推荐

  1. 使用jquery的tmpl构建复杂表格

    Tmpl提供了几种tag:${}:等同于{{=}},是输出变量,通过了html编码的.{{html}}:输出变量html,但是没有html编码,适合输出html代码.{{if }} {{else}}: ...

  2. 【YashanDB数据库】VMware虚拟机使用默认安装,在掉电之后数据库无法启动

    问题现象 客户使用VMware虚拟机使用默认安装,部署YashanDB个人版,在掉电之后无法启动 操作系统: Virtualization: VMware Operating System: Cent ...

  3. Canvas简历编辑器-Monorepo+Rspack工程实践

    Canvas简历编辑器-Monorepo+Rspack工程实践 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下工程实践.在之前的文中我也提到过,因为是本着学习的态度以及对技术的 ...

  4. Android Studio自带Profiler工具内存泄露分析步骤

    1.运行需要检测内存泄露的程序 这里以"com.example.opengltest"程序为例. 2.点击Profiler按钮 3.点击SESIONS "+"号 ...

  5. meltdown 安全漏洞原理是怎么样的?

    Meltdown是2018年初公开的一种严重的计算机安全漏洞,影响了多种处理器,包括英特尔.ARM和某些AMD处理器.其原理基于利用现代CPU的"推测执行"(speculative ...

  6. 使用KFold交叉验证方法划分训练集和验证集

    在进行深度学习时,为了提高精度,或者为了评估我们模型的优劣,以及如何选择一个更好的模型.这样我们就需要用到交叉验证方法. 我们主要实现如何使用KFold划分训练集和验证集 #coding:utf-8f ...

  7. 前端工程化解决方案webpack使用小结

    前端工程化解决方案webpack,模块化.组件化.规范化.自动化,使得前端开发更加高效. 功能:代码压缩混淆.处理浏览器端js的兼容性.以模块化的方式处理项目中的资源 webpack插件:clean- ...

  8. nextjs 类装饰器

    // 类装饰器 == 本质就是一个函数 // 在某个类的上面使用 @ // 可以等价于函数调用 doc(Zlx) // 不会破坏原有的类 可以扩展类 // "experimentalDeco ...

  9. 什么是数据库连接池druid

    每次数据库连接都要断开重连浪费时间,性能 [ 底层需要 tcp 连接 ] 资源复用 : 提升系统响应速度 : 避免数据库连接遗漏 :[ 长时间不操作会强制断开 ] 使用: 初始连接数:连接的个数 pa ...

  10. 03 Transformer 中的多头注意力(Multi-Head Attention)Pytorch代码实现

    3:20 来个赞 24:43 弹幕,是否懂了 QKV 相乘(QKV 同源),QK 相乘得到相似度A,AV 相乘得到注意力值 Z 第一步实现一个自注意力机制 自注意力计算 def self_attent ...