看到这个数据库设计,我终于明白了我和其他软测人的差距

news2024/11/26 22:37:28

测试人员为什么要懂数据库设计?
更精准的掌握业务,针对接口测试、Web 测试,都是依照项目/产品需求进行用例设计,如果掌握数据库设计知识,能直接面对开发的数据表,更好、更精准的理解业务逻辑;有的项目中,测试人员还会参与到数据库设计的评审中
更正确的数据库断言,面对接口测试、接口自动化测试,能针对业务特点,快速的构建数据库断言语句
数据库测试与验证,包括数据有效性的验证,设计是否合理(比如是否有插入异常、更新异常、删除异常),数据库压力测试,数据库同步验证等
走向测试开发的基础,如果想逐步成长,进入测试开发的工作中,数据库设计是必须要掌握的基础技能
由此可见,测试从业人员熟悉并掌握数据库设计知识是现实的需要,也是想往上发展的基础。

如何进行数据库设计?
要进行数据库设计,需要掌握一些基础技能,包括:

数据库基础知识,包括基本常识、常用概念
数据库设计步骤,掌握如何分析需求,完成概念模型、逻辑模型、物理模型
范式,熟悉常用的规范及要求
实战,掌握根据需求绘制 E-R 图、物理模型设计,并落地到数据库产品
基本常识一
数据(Data):承载各类软件业务中重要的载体都称之为数据,数据的类型包括数值、文本、图片、音频、视频等

数据库(DB,Database ):存放上述各类数据的场所或仓库,提供持久化,不易丢失;并且有合理的组织形式,可管理,还能共享

数据库管理系统(DBMS,Database Management System):对数据加进行管理,提供对数据库的存储管理、安全控制、备份、审计等处理
看到这个数据库设计,我终于明白了我和其他软测人的差距

基本常识二
关系型数据库:传统的数据落地存储模式,建立在严格的数据概念基础上,数据间有规范化的关系,支持 ACID 特性;常见的产品有 MySQL、Oracle、DB2、SQL Server 等

非关系型数据库:随着互联网的快速发展,异构数据、大数据的到来,高可扩展和高伸缩性的需求增加,产生了各种的非关系型数据库;其特点是非关系型、分布式、扩展方便,但不能完全满足 ACID 特性;

常见的非关系型数据库有:

键值型:Memcached、Redis,多用于缓存
列分组型:Hbase 等,多用于日志和一些博客平台
文档型:MongoDB 等,表结构可动态变化,多用于不同结构的日志处理
图数据库:Neo4j 等,一般做推荐引擎或关系图谱
基础概念
数据表:也称二维表,基础的数据保存单位,由列(字段)和行(记录)组成,如下图

字段:规范数据表结构的最小单元,尽量做到不可再分,如下图的浅蓝底部分

数据类型:描述字段的类型,可以有整型、字符串等

主键:唯一的标识一条记录的字段,如下图的学号、课程 ID、成绩 ID 等

外键:引用其他表数据的字段,如下图成绩表中灰色底的学号和课程 ID,引用来自于学生表和课程表

视图:组合一个或多个表输出数据子集,具有隐藏数据复杂性,查询简单等特性,如现在想要设计一个学生成绩的报表,就可以针对下图三个表组织一个视图呈现

函数:类似于程序语言的方法,一般做简单的按规则数据替换或转换

存储过程:预编译,可有输入/输出参数,可包含程序流、逻辑处理、事务等操作,用于处理比较复杂的操作,如数据加工

数据完整性:关联表通过外键要能找到主表数据,否则为数据不完整

数据冗余:重复存储了某些内容,占用存储空间,也会带来不一致的风险

看到这个数据库设计,我终于明白了我和其他软测人的差距

数据库设计步骤
需求分析:识别软件需求中的数据的种类、范围、数量、相互间的交流情况和约束条件等
概念模型设计:当软件系统的用户需求确定后,要根据用户需求抽象出其中常见的对象,以及对象间的关系,称做 E-R(Entity-Relationship)图;常用实体-关系图表示概念模型;如一个教学信息系统中,会抽象出老师、班级、课程、学生等实体,并涉及到老师教授课程、老师带领班级、学生所在班级等关系
逻辑模型设计:将概念模型细化,细化出概念模型中实体的属性,实体间关系通过哪些属性体现;如教学信息系统中,老师实体包括 ID、姓名、性别等特征,通过在课程表上关联老师 ID 建立起关系
物理模型设计:将上述模型的实体、属性、关系,根据实际的数据库产品,落地成对应的物理表,并构建起表的字段、主键、外键、约束、默认值、是否可空、视图等
验证设计:运行基于上述构建数据库的业务系统,来验证设计的数据 CRUD 时的正确性、合理性
运行与维护:随着业务需求的不断迭代,数据库也需要一直的优化和重新设计,以保存数据正确性、合理性,还要考虑新旧业务的兼容与扩展
范式
概述
范式(NF,Normal Form),是关系数据库的理论基础

主要用于数据库结构的设计提供规则和指导,使得设计出的数据具有最好的存储性能、更容易被理解、数据完整性更佳

一共有 6 种,一般设计中满足 1NF、2NF、3NF 即可

常见的不满足 3NF 后带的问题有:数据冗余、插入异常、更新异常、删除异常

第一范式(1NF)

规则:要求数据表中所有字段都是原子性不可分割的;一般的设计都能满足 1NF;右图满足 1NF

不遵守带来的问题:后续业务处理不方便,如下图左要按省份分类数据看到这个数据库设计,我终于明白了我和其他软测人的差距

第二范式(2NF)
规则:在 1NF 基础上,所有非主键列都完全依赖于主键,而不是部分,能有效减少冗余、保证数据完成性;如下图针对组合主键学号 + 课程 ID,右图右计满足 2NF
 
不遵守带来的问题:数据冗余、插入异常、更新异常、删除异常;如一个学生有多门课程,就冗余多个学生姓名、新设立一门课程因没有学生考试而必须将学生信息置空、删除某个学员可能导致课程都没有了看到这个数据库设计,我终于明白了我和其他软测人的差距

第三范式(3NF)

  1. 在 2NF 基础上,所有非主键列都直接依赖于主键,不能传递依赖,也能有效减少冗余、保证数据完整性;如下图针对主键课程 ID,右图设计满足 3NF
  2. 不遵守带来的问题:主要是数据冗余、插入异常、删除异常等看到这个数据库设计,我终于明白了我和其他软测人的差距

实战:基于角色的访问控制(RBAC)

需求

一般项目/产品的基础需要,就是需要对不同的用户进行功能授权****

而且,由于用户足够多,天然的会根据人员所在的部门、岗位等情况,某一类人具有相同的授权,也就是需要有“角色”的存在

E-R 图看到这个数据库设计,我终于明白了我和其他软测人的差距

物理模型

一般的设计过程中,针对 1 对多,会拆成主-外键关系;针对多对多,会添加一个中间表
小型项目数据库设计,可以直接使用 Excel 进行
中大型项目数据库设计,可以使用 PowerDesigner、PDMan 等工具
具体见附件:《基础角色的访问控制》数据库设计、RBAC.pdm看到这个数据库设计,我终于明白了我和其他软测人的差距

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【滑动窗口】滑窗模板,在小小的算法题里滑呀滑呀滑

首先大家先喊出我们的口号:跟着模板搞,滑窗没烦恼! 一.什么是滑动窗口? 滑动窗口算法是双指针算法的一种特定化的算法模型,常用于在特定的条件下求最大或者最小的字符串,特定的数组,以及字符序列…

JAVA 可用的高性能docker镜像及如何使用?

目前docker hub上下载量很大的java、openjdk镜像都已经被弃用,不再维护,目前可用的java docker镜像有哪一些呢?哪一些镜像是主流的? 本文带有领略java可用的镜像资源、如何使用它们,如何构建springboot镜像? 1. 可用的java镜像 1.1. amazoncorretto 1.1.1. 什么是Corr…

环路详解:交换机环路产生的过程和原因图解

前言: 在了解环路之前得先了解交换机的工作原理,当然交换机的基本工作原理其实非常简单,只有“单播转发与泛洪转发”、“交换机MAC地址表”这两个!其他的如vlan,生成树等也是在此基础上增加的,弥补交换机基…

node笔记_koa框架的路由

文章目录 ⭐前言⭐koa 原生路由写法⭐引入 koa-router💖 安装koa-router💖 动态读取路径文件作为路由 ⭐结束 ⭐前言 大家好,我是yma16,本文介绍koa框架的路由。 往期文章 node_windows环境变量配置 node_npm发布包 linux_配置no…

[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集

[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集 XSS(Reflected)-low level源代码姿势 XSS(Reflected)-medium level源代码姿势1.双写绕过2.大小写绕过 XSS(Reflected)-high level源代码str_replace函数 姿势 XSS(Reflected)-Impossible level源代…

ssh正反隧道(代理msf对icmp穿透监听)

ssh正向隧道: 就是将本地端口映射到远程上,相当访问本地端口就是访问远程的端口 正向 访问本地对应的是远程的端口 ssh -fNCL 本地ip:本地port:远程ip:远程port 用户远程ip/域名 实例: ssh -fNCL 192.168.222.128:90:192…

HTML的表单

前后端交互过程: 表单在 Web 网页中用来给访问者填写信息采集客户端信息,使网页具有交互的功能,用户填写完提交后,表单的内容就从客户端的浏览器传送到服务器上,经过服务器上程序处理后,再将用户所需信息传…

人机大战?——带你玩转三子棋(C语言)

TOC 1、前言 在学习完数组之后,我们就可以自己来实现一个简单游戏—三子棋了! 为了确保程序的独立性:我们创建了一个源函数game.c 和test.c,一个头文件game.h test.c——测试游戏 game.c——游戏函数的实现 game.h——游戏函数…

Redis缓存数据库(三)

目录 一、概述 1、Redis架构 2、AKF 3、CAP原则 一、概述 1、Redis架构 Redis 有哪些架构模式?讲讲各自的特点 单机版 特点:简单 问题: 1、内存容量有限 2、处理能力有限 3、无法高可用。 主从复制 Redis 的复制(replic…

python绘制散点图|散点大小和颜色深浅由数值决定

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

【嵌入式系统应用开发】FPGA——HLS入门实践之led灯闪烁

目录 1 HLS1.1 HLS简介1.2 HLS与VHDL/Verilog1.3 HLS优点与局限 2 环境配置3 HLS实例——Led点亮3.1 工程创建3.2 添加文件3.3 C仿真与C综合3.4 创建Vivado工程3.5 导入HLS生成的IP核3.6 添加实验代码3.7 编译生成获取结果 总结 1 HLS 1.1 HLS简介 HLS(High Level Synthesis)…

十大排序算法(上)直接插入排序、希尔排序、直接选择排序、堆排序

🌈目录 1. 排序的概念2. 常见的排序算法3. 排序算法的实现3.1 插入排序3.1.1 直接插入排序3.1.2 希尔排序(缩小增量排序) 3.2 选择排序3.2.1 基本思想3.2.2 直接选择排序3.2.3 堆排序 1. 排序的概念 排序,就是使一串记录&#xf…

阿里通义千问_VS_讯飞星火

今天终于获得阿里通义千问大模型体验授权,第一时间来测试一下效果,使用申请手机号登录(地址:https://tongyi.aliyun.com)后,需要同意通义千问大模型体验规则,如下图所示: 同意之后就…

【C++初阶】类与对象(中)之运算符重载 + 赋值运算符重载

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

CPU性能优化:Cache

CPU性能提升:Cache机制 随着半导体工艺和芯片设计技术的发展,CPU的工作频率也越来越高,和CPU进行频繁的数据交换的内存的运行速度却没有相应的提升,于是两者之间产生了带宽问题。进而影响计算机系统的整体性能。CPU执行一条指令需…

C++/PTA 至多删三个字符

至多删三个字符 题目要求解题思路代码总结 题目要求 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的、长度在区间 […

关于摆摊气球的调研-网红气球

本章主要介绍一下最近网红气球: 最近看到很多摆摊的抖音视频,都在说卖气球很好,成本低,收益高,所以调研了一下,网红气球分好几种: a,飘空气球; b.手持网红气球 c.青蛙 首先介绍飘空…

文件上传,内容逻辑数组绕过(22)

uploadd 第十三关 这一关告诉我们的,有一些上传漏洞需要配合这个文件包含和加解密。 这个先在一个图片源码里面写入php后门的脚本代码 这里也可以手工注入到图片的源码里面来,手工注入,如果采用16进制打开这个图片,这个图片在…

okhttp篇4:RetryAndFollowUpInterceptor

在上一篇 okhttp篇3:RealCall_yolan6824的博客-CSDN博客 中讲到RealCall无论是在execute还是enqueue方法中,都是通过getResponseWithInterceptorChain方法获取Request对应的Response的。而getResponseWithInterceptorChain这个方法,又是通过…

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程] 0. 前言1. 资源信息获取函数——monitor.py2. UI界面——listen.py3. main.py4. 运行效果5. 编译 exe 程序6. 其他PyQt文章 0. 前言 利用 PyQt5 开发一个 windows 的资源监视助手,在使用虚…