2.3 数据库
因为测试工程师在日常工作中会参与数据库设计评审、测试环境搭建、日志跟踪,这些会涉及数据库的相关操作,所以数据库设计、SQL命令是常考的内容。对于数据库知识,测试工程师岗位的面试中考得不多,主要是实际应用,读者可以针对性准备。
2.3.1 数据库设计
考点:
数据库设计的全过程
ER模型
数据库设计是建立数据库系统的第一步,也是开发信息系统的重要部分。测试工程师虽然不用自己设计数据库,但是在项目设计前期需要参与开发和评审。在设计评审阶段,测试工程师和开发工程师一起讨论,提出建设性建议,预见未来的各项应用需要。
那么如何设计一个满足当前客户需求并且可预见未来的各项应用要求、性能良好的数据库呢?一般有以下7个阶段—规划、需求分析、概念设计、逻辑设计、物理设计、实现和运行维护。本节主要介绍前5个阶段。
规划阶段的主要任务是分析建立数据库的必要性及可行性,确定信息系统中数据库之间的联系。
需求分析阶段的主要任务有分析用户活动,产生用户活动图;确定系统范围,产生系统范围图;分析用户活动所涉及的数据,产生数据流图;分析系统数据,产生数据字典。在需求分析阶段,需要把需求整理成用户和数据库设计者都能接收的文档。
概念设计分3步—进行数据抽象,将局部概念模式综合成全局概念模式,评审。
逻辑设计的目的是把设计好的基本ER图转换成与具体计算机上DBMS锁支持的数据模型符合的逻辑结构。
物理设计是为给定的基本数据模型选取一个最适合应用环境的物理结构的过程,也称为数据库的物理设计。
ER模型是人们认识客观世界的一种方法、工具,在某种程度上反映了客观现实,反映了用户的需求。ER模型的设计过程基本上分为以下两步。
(1)设计实体类型,此时不涉及“联系”。
(2)设计联系类型,考虑实体间的联系。
数据库设计的任务就是把现实世界中的数据及数据间的联系抽象出来,用“实体”与“联系”来表示。
在这里不对ER图的设计方法做详细描述,仅给出几个实例作为参考。
【例2.1】某个商业集团数据库中有3个实体:一是“商店”实体,属性有商店编号、商店名、地址;二是“商品”实体,属性有商品号、商品名、规格、单价等;三是“职工”实体,属性有职工编号、姓名、性别、业绩等。
商店与商品存在“销售”关系,每个商店可销售多种商品,每种商品也可以在多个商店销售,对于每个商店销售的一种商品,有月销售量;商店与职工间存在“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工需规定聘期和月薪。
(1)画出ER图,并在图上注明属性、联系的类型。
(2)将ER图转换成关系模型。
解:(1)ER图如图2.12所示。
(2)该ER图可转换成如下4个关系模式。
·商店(商店编号,商店名,地址)。
·职工(职工编号,姓名,性别,业绩,商店编号,聘期,月薪)。
·商品(商品号,商品名,规格,单价)。
·销售(商店编号,商品名,月销售量)。
【例2.2】某个商业集团数据库有3个实体:一是“公司”实体,属性有公司编号、公司名、地址等;二是“仓库”实体,属性有仓库编号、仓库名、地址等;三是“职工”实体,属性有职工编号、姓名、性别等。公司与仓库间存在“隶属”联系,每个公司管辖若干个仓库,每个仓库只能属于一个公司;仓库与职工之间存在“聘用”联系,每个仓库可聘用多个职工,每个职工只能在一个仓库工作,仓库聘用职工需规定聘期和工资。
图2.12 实例1的ER图
(1)画出ER图,并在图上注明属性、联系的类型。
(2)将ER图转换成关系模型。
解:(1)ER图如图2.13所示。
图2.13 实例2的ER图
(2)该ER图可转换或如下3个关系模式。
·公司(公司编号,公司名,地址)。
·仓库(仓库编号,仓库名,地址,公司编号)。
·职工(职工编号,姓名,性别,仓库编号,聘期,工资)。
2.3.2 MySQL
考点:
常用MySQL命令
MySQL中的SQL操作
数据库中的事务、存储过程等相关概念
下面列出常用的MySQL命令,应试之前要熟记。
net start/stop mysql:启动/停止MySQL。
mysql -u root -p123456 -P 3306:登录。
status:登录后查看状态。
show databases:显示所有数据库。
use db_name:切换到某个数据库。
show tables:显示数据库中的表。
desc table_name:显示某个表的字段描述。
mysqldump -uroot -p234555 testdb>test.txt:备份数据库。
接下来,介绍MySQL中常用的SQL操作。
与数据库相关的SQL操作如下。
创建数据库:使用create database db_name。
删除数据库:使用drop database db_name。
删除时,为了判断数据库是否存在,可使用drop database ifexits db_name。
与表相关的SQL操作如下。
创建表:使用create table table_name(字段1数据类型,字段2数据类型)。
删除表:使用drop table table_name。
与数据相关的SQL操作如下。
添加数据:使用Insert into表名[(字段1 ,字段2 , …)] values (值1 ,值2 , …)。
如果向表的每个字段中都插入一个值,那么前面[ ]括号内的字段名可写也可不写。
与查询相关的SQL操作如下。
查询所有数据:使用select * from table_name。
查询指定字段的数据:使用select字段1,字段2 from table_name。
与更新相关的SQL操作如下。
更新指定数据,更新某一个字段的数据(注意,不是更新字段的名字):使用Update table_name set字段名='新值' [,字段2 ='新值' , …][where id=id_num] order by字段顺序]。
与删除相关的SQL操作如下。
删除整个表中的信息:使用delete from table_name。
删除表中指定条件的语句:使用delete from table_name where条件语句。条件语句中,如指定id=3。
与创建数据库用户相关的SQL操作如下。
创建数据库用户时,一次可以创建多个数据库用户,指令如下。
CREATE
USER
username1
identified
BY
'password'
?
username2
IDENTIFIED
BY
'password'…
与用户权限相关的SQL操作如下。
控制用户的权限:使用grant。
将某个库中的某个表的控制权赋予某个用户:使用grant all ON db_name.table_name TO user_name [ indentified by 'password' ]。
与修改表结构相关的SQL操作如下。
增加一个字段格式:使用alter table table_name add column(字段名 字段类型)。注意,要带括号。
指定字段插入的位置:使用alter table table_name add column字段名 字段类型after某字段。
删除一个字段:使用alter table table_name drop字段名。
修改字段名称/类型:使用alter table table_name change旧字段名 新字段名 新字段的类型。
修改表的名字:使用alter table table_name rename to new_table_name。
一次性清空表中的所有数据:使用truncate table table_name。此方法会使表中的取号器(ID)从1开始。
与数据库引擎相关的SQL操作如下。
查看数据库当前引擎:使用SHOW CREATE TABLE table_name。
修改数据库引擎:使用ALTER TABLE table_name ENGINE=MyISAM | InnoDB。
数据库面试中,事务、触发器和存储过程也是常考的知识点。
数据库中事务是一种机制,它以一组数据库操作命令作为一个整体向系统提交或撤销操作的请求,要么都执行,要么都不执行。事务是一个不可分割的工作逻辑单位。它具有原子性、一致性、隔离性和持久性。
通常在程序中用begin transaction命令来标识事务的开始,用commit transaction命令标识事务的结束。
数据库中的存储过程是一组为了完成特定功能,利用Transact-SQL编写的程序。一次编译之后,存储过程可以执行多次,不必重复编译。
触发器是一个特殊的存储过程,它的执行不是由程序调用的,也不是手动启动的,而是由事件触发的。
2.3.3 Oracle
关于Oracle的考点和MySQL相同,由于篇幅有限,这里不详细讲解。
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。