本篇为本专栏的倒数第四篇,我想和大家聊一聊在《数据库》这门学科上应对测试开发岗位我们应该掌握的基础知识。我相信大家应该对数据库的作用有比较清楚的认识:它可以帮助我们持久化地存储软件系统中的数据。我认为学习这门学科主要包含了三方面的内容:首先是相关的基础理论知识,包括了库表建模等;其次是要掌握SQL语法,能够熟练的进行表数据的CURD操作;最后,深入一点的是对需要对某一个具体的数据库实现(例如MYSQL的实现细节)要有所了解。在我看来,应对校园招聘,我们要至少掌握前两部分,并且只有掌握了前两部分,入职之后你才能得心应手的开展工作。

如果要正式的学习数据库相关的理论知识,我推荐大家从学校的图书馆中任意借一本出版年份比较新的书籍看起,之所这样推荐,我认为我们的目的不是为了成为专门的数据库开发工程师,所以一般的书籍就足以。出版年份越新,相应的会包含一些新兴的数据库技术,可以进一步开阔视野。对于SQL语法的掌握,比较推荐大家多练习,目前无论是leetcode网站还是牛客网上已经有专门针对SQL语法的练习,需要大家多做一些题目进行练习。至于第三部分,在测试开发的面试中基本不会过多询问,问到的时候大家如果没有准备可以直接回答没有学过相关细节即可。

基本理论知识

数据库的发展历史

(1)人工管理阶段。这个阶段数据不会被保存、数据不独立、和程序之间相互依赖,同时数据无法实现共享。
(2)文件管理阶段。可长期保存,数据和程序可以稍微分离。但是数据共享性差,冗余度大,文件中的数据只能面向特定的应用。
(3)数据库管理阶段。它的特点是:数据能够结构化存储,数据共享性好,冗余度低,易扩展,数据和应用可以相互独立。能够进行统一的数据管理和功能控制,如并发控制,安全控制,数据完整性控制等。
常见的数据库类型

目前最常见的的数据库可以分为两种大类型:SQL关系型数据库和NoSQL非关系型数据库。我们应该能明白SQL和NoSQL的区别,具体可参考博文:https://blog.51cto.com/13178102/2064041 。我们在教课书上看到的数据库基本理论讲解的大部分内容都是关于SQL数据库的。常见的SQL数据如下:这里我们只需要了解即可。

数据模型

关于数据模型的概念,大家了解就好,这是数据库建模的理论指导思想。数据模型是用来描述数据、组织数据和对数据进行操作的模型。从高层到低层,可以把数据模型分为“概念模型”、“逻辑模型”、“物理模型”三种。其中描述概念模型的强有力的工具是ER模型,辑数据模型是严格定义的一组概念的集合,精确描述系统的静态、动态特性和完整性约束条件。逻辑数据模型通常由数据结构,数据操作和数据完整性约束条件组成。常见的逻辑模型有:层次模型,网状模型、关系模型。具体可参考: https://zhuanlan.zhihu.com/p/101890657?from=timeline

实体联系(E-R)图

在进行关系型数据库表建模的时候,我们通常会把系统中的实体抽象出来,并通过关系表存储他们之间的联系。例如如果我们想要做一个学生管理系统,记录学生从1年级到6年级的相关学籍以及学习成绩等情况,我们会把学生作为实体抽象出来,年级、老师作为实体抽闲出来,并记录他们之间的关系,形成ER图。ER图中主要包含了实体、属性和联系三个部分,我们需要知道以下几种联系的概念:

(1)1:1,一对一关系,例如,1个人只能有一个身份证,一个身份证号码只能被1个人使用。
(2)1:N,1对多关系,例如1个班级可以有多个学生,而一个学生只能数据一个班级。
(3)M:N,多对多关系,一个课程可以被多个学生选修,一个学生也可以选修多门课程。

关系模型

关系型数据库是支持关系模型的数据库系统,关系模型由关系数据结构、关系操作集合、关系完整性约束组成。
关系模型的数据结构被称为“关系”,有时也被称为二维表,关系数据结构的特点是:实体和实体间的联系都用关系(数据表)实现。二维表的描述方法为:关系名(属性1,属性2,、、、、属性n)。

对关系可以进行的操作有:
(1)并:将表R(m列,n行)、表S(m列,q行)合并为一个新表;
(2)交:找出既在R中又在S中的行
(3)差:R-S,找出在R中,但不在S中的行
(4)广义笛卡尔积:R(m列,p行) X S (n列,q行)得到的新表为O(m+n列,p*q行)
(5)选择:选择R中满足条件的行
(6)投影:选择R中若干列属性组成新的关系
(7)连接(join):包含了等值连接和自然连接,从广义笛卡尔积中找出满足的行组成新的关系。自然连接是一种特殊的等值连接。
对关系的操作其实在后面学习SQL语法的时候,我们需要掌握如何使用SQL语法来实现以上几种类型的关系操作。

关系的完整性约束包含了三种类型:(1)实体的完整性,比如主属性取值不能为空(2)参照完整性,外健要么为空,要么是已存在的健值(3)用户自定义的完整性,主要是自定义的属性校验,比如性别只能是男或女。关系完整性的约束规则是对关系的约束条件,主要是为了防止可预见的错误进入系统。

理解三级模式和二级映像

三级模式指