数据库程序员面试笔试通关宝典
上QQ阅读APP看书,第一时间看更新

2.5 精选面试、笔试题解析

根据前面介绍的数据库知识,本节总结了一些在面试或笔试过程中经常遇到的问题。通过本节的学习,读者将会掌握在面试或笔试过程中回答问题的方法。

2.5.1 数据的物理独立性和逻辑独立性

试题题面:什么是数据的物理独立性和逻辑独立性?

题面解析:本题主要考查应聘者对物理独立性和逻辑独立性的熟练掌握程度。看到此问题,应聘者需要把关于数据的所有知识在脑海中回忆一下,其中包括数据物理独立性、逻辑独立性等,熟悉了数据的基本知识之后,该问题将迎刃而解。

解析过程:数据独立性表示应用程序与数据库中存储的数据不存在依赖关系,其中包括数据的物理独立性和数据的逻辑独立性。数据库管理系统的模式结构和二级映像功能保证了数据库中的数据具有很高的物理独立性和逻辑独立性。

物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的。即数据在磁盘上怎样存储,都是由DBMS统一管理,用户程序不需要了解存储过程,应用程序要处理的只是数据的逻辑结构,当数据的物理存储改变时,应用程序不用发生改变。

逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,即当数据的逻辑结构改变时,用户程序也可以不变。

2.5.2 数据库和数据库管理系统

试题题面:分别解释一下什么是数据、数据库、数据库系统和数据库管理系统。

题面解析:本题是对数据库和数据库管理系统知识点的考查,应聘者在回答该问题时,要阐述自己对数据、数据库、数据库系统和数据库管理系统的理解,另外,还要解释关于数据库更深一层的含义。

解析过程:

(1)数据(Date):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音等。现代计算机能存储和处理的对象十分广泛,因此这些对象的数据也越来越复杂。数据与其语义是不可分的。例如,50这个数字可以表示一件物品的价格是50元,也可以表示一段路程是50千米,还可以表示一个人的体重为50千克。

(2)数据库(Database,DB):数据库是长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。

(3)数据库系统(Database System,DBS):数据库系统是指在计算机系统中引入数据库后的系统结构。数据库系统和数据库是两个概念。数据库系统是一个系统,数据库是数据库系统的一个组成部分。但是,在日常工作中人们常常把数据库系统简称为数据库。

(4)数据库管理系统(Database Management System,DBMS):数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据,高效地获取和维护数据。DBMS是一个大型的复杂的软件系统,是计算机中的基础软件。DBMS的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。

2.5.3 数据库中表和视图有什么关系

试题题面:数据库中表和视图有什么关系?

题面解析:本题主要考查应聘者对数据库中的表和视图的熟练掌握程度。在解答本题之前,应聘者需要知道什么是表,什么是视图,然后再把两者进行比较,本题自然就解答出来了。

解析过程:视图是从数据库的基本表中选取出来的数据组成的逻辑窗口,它不同于基本表,它是虚拟表,其内容由查询定义。在数据库中,存放的只是视图的定义,而不存放数据,这些数据仍存放在原来的基本表结构中。只有在使用视图时,才会执行视图的定义,从基本表中查询数据。

同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值的形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成其中所引用的基础表,视图的作用类似于筛选。定义视图可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查询也可用于定义使用多个异类数据的视图。如果有几台不同的服务器分别存储不同地区的数据,那么当需要将这些服务器上相似结构的数据组合起来的时候,这种方式就非常有用。

2.5.4 数据库的查询有哪几种方式

试题题面:数据库的查询有哪几种方式?

题面解析:本题主要考查应聘者对数据库查询的熟练掌握程度。看到此问题,应聘者需要在脑海中回忆一下关于数据库查询的方式,每一种方式是如何实现的。看到此问题的读者如果还没有掌握,那么快来复习一下吧!

解析过程:

1.子查询
    SELECT  FROM 表名 WHERE EXISTS(子查询);

(1)子查询有返回结果:EXISTS子查询结果为true。

(2)子查询无返回结果:EXISTS子查询结果为false,外层查询不执行。

任何允许使用表达式的地方都可以使用子查询;嵌套在父查询SELECT语句的子查询包括SELECT子句、FROM子句、WHERE子句、GROUP BY子句和HAVING子句,只出现在子查询中而没有出现在父查询中的列不包含在输出列中。

2.LIMIT子句

对查询结果进行限定,可指定查询起始位置和条数。

    SELECT  <字段名列表>
    FROM  <表名或视图>
    [WHERE  <查询条件>]
    [GROUP BY <分组的字段名>]
    [ORDER BY  <排序的列名> [ASC或DESC]]
    [LIMIT [位置偏移量,]行数];

注意☆ 使用LIMIT子句时,注意第1条记录的位置是0!

3.嵌套查询

子查询语句可以嵌套在SQL语句中任何表达式出现的位置,只出现在子查询中而没有出现在父查询中的表不能包含在输出列中。

4.IN子查询

常用IN替换等号(=)的子查询,IN后面的子查询可以返回多条记录。

2.5.5 存储过程

试题题面:什么是存储过程,需要什么来调用?存储过程的优缺点有哪些?

题面解析:本题是对存储过程知识点的考查,应聘者不仅需要知道什么是存储过程,还要知道存储过程有哪些优缺点,以及存储过程可以使用什么方法来调用。

在解题的过程中需要先解释什么是存储过程,然后介绍存储过程的优缺点。

解析过程:

1.什么是存储过程,需要什么来调用?

存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值,并且不涉及特定用户表。

存储过程用于执行特定的操作,可以接收输入参数、输出参数、返回单个或多个结果集。在创建存储过程时,既可以指定输入参数(IN),也可以指定输出参数(OUT)。在存储过程中使用输入参数,可以将数据传递到执行部分;使用输出参数,可以将执行结果传递到应用环境。存储过程可以使对数据库的管理、显示数据库及其用户信息的管理更加容易。

2.存储过程的优缺点有哪些?

在数据库中,存储过程可由应用程序调用执行。存储过程允许用户声明变量并且包含程序流、逻辑以及对数据库的查询。具体而言,存储过程的优缺点如下:

优点:

(1)存储过程增强了SQL语言的功能和灵活性。存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和运算。

(2)存储过程可以保证数据的安全性。

(3)通过存储过程可以使相关的动作在一起发生,从而维护数据库的完整性。

(4)在运行存储过程之前,数据库已经对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地提高SQL语句的性能。

(5)可以降低网络的通信量,因为不需要通过网络来传送SQL语句到数据库服务器。

(6)把体现企业规则的运算程序放入数据库服务器中,以便集中控制。

缺点:

(1)调试不是很方便。

(2)没有创建存储过程的权利。

(3)重新编译问题。

(4)移植性问题。

2.5.6 数据库的触发器是什么

试题题面:数据库的触发器是什么?

题面解析:本题是对触发器知识点的考查,应聘者在回答该问题时,要阐述自己对触发器概念的理解,另外,还要解释关于数据库的触发器更深一层的含义。

解析过程:触发器(Trigger)是数据库提供给程序员和DBA用来保证数据完整性的一种方法,它是与表相关的特殊的存储过程,是用户定义在表上的一类由事件驱动的特殊过程。触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发的,其中,事件是指用户对表的插入(INSERT)、删除(DELETE)和修改(即更新UPDATE)等操作。触发器经常被用于加强数据的完整性约束和业务规则等。

2.5.7 数据库的完整性规则指什么

试题题面:数据库的完整性规则指什么?

题面解析:本题主要考查应聘者对数据库完整性的理解,完整性是数据库的特性之一,因此应聘者不仅需要知道什么是数据库的完整性,而且还要知道数据库的完整性规则。

解析过程:数据库的完整性(Database Integrity)是指数据库中的数据在逻辑上的一致性、正确性、有效性和相容性。数据库的完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。数据库的完整性约束可以通过DBMS或应用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。通过DBMS实现的数据库完整性不是按照数据库设计步骤进行设计,而是由应用软件实现的数据库完整性纳入应用软件设计。

不管是SQL Server还是MySQL,它们都是关系数据库,既然是关系数据库,就要遵守“关系数据库的完整性规则”。关系数据库提供了三类完整性规则,分别是实体完整性规则、参照完整性规则和用户自定义完整性规则。在这三类完整性规则中,实体完整性规则和参照完整性规则是关系模型必须满足的完整性的约束条件,它们适用于任何关系数据库系统,主要是针对关系的主关键字和外部关键字取值必须有效而做出的约束。用户自定义完整性规则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出的约束性条件。这一约束机制一般不应由应用程序提供而应由关系模型提供定义并检验,用户自定义完整性主要包括字段的有效性约束和记录有效性。

关系型规则如下:

(1)实体完整性规则。

实体完整性规则是指关系的主属性(就是俗称主键的一些字段,主键的组成部分)不能为空值。现实生活中的每一个实体都具有唯一性,即使是两台一模一样的计算机都会有相应的MAC(Media Access Control,物理地址)地址来表示它们的唯一性。现实之中的实体是可以区分的,它们具有某种唯一性标识。在相应的关系模型中,以主键作为唯一性标识,主键中的属性即主属性不能是空值,如果主属性为空值,那么就说明存在不可标识的实体,即存在不可区分的实体,这与现实的环境相矛盾,因此,这个实体一定不是完整的实体。

(2)参照完整性规则。

参照完整性规则指的是如果关系R1的外键和关系R2的主键相符,那么外键的每个值必须在关系R2的主键的值中可以找到;如果在两个有关联的数据表中,一个数据表的外键一定在另一个数据表的主键中可以找到。因此,定义外部关键字属于参照完整性。

(3)用户自定义完整性规则。

用户自定义完整性规则是指某一具体的实际数据库的约束条件,由应用环境决定。自定义完整性规则反映某一具体应用所涉及的数据必须满足的要求,用户根据现实生活中的一种实际情况定义的一个用户自定义完整性,必须由用户自定义完成。用户自定义完整性不属于其他任何完整性类别的特定业务规则,所有完整性类别都支持用户自定义完整性,包括CREATE TABLE中所有的列级约束和表级约束、存储过程和触发器。

在用户自定义完整性中,有一类特殊的完整性称为域完整性。域完整性是针对某一具体关系数据库的约束条件,它保证表中某些列不能输入无效的值,可以认为域完整性指的是列的值域的完整性。例如,数据类型、格式、值域范围、是否允许空值等。域完整性限制了某些属性中出现的值,把属性限制在一个有限的集合中。例如,如果属性类型是整数,那么它就不能是101.5或任何非整数。

可以使用CHECK约束、UNIQUE约束、DEFAULT默认值、IDENTITY自增、NOT NULL/NULL保证列的值域的完整性。例如,在设计表的时候有个年龄字段,如果设置了CHECK约束,那么这个字段里的值一定不会小于0,当然也不能大于200,因为现实生活中还没人能活到200岁。

2.5.8 什么是关系数据库,有哪些特点

试题题面:什么是关系数据库,有哪些特点?

题面解析:本题主要考查应聘者对关系数据库概念的理解。看到此问题应聘者需要快速地在大脑中回忆关于关系数据库的知识,在解答本题前需要先解释一下什么是关系数据库,然后总结它的特点。

解析过程:RDBMS(Relational Database Management System,关系数据库管理系统)是E.F.Cod博士在其发表的论文《大规模共享数据银行的关系型模型》基础上设计出来的。关系数据库是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是RDBMS。它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。自关系数据库管理系统被提出以来,RDBMS获得了长足的发展,许多企业的在线交易处理系统、内部财务系统、客户管理系统等大多采用了RDBMS。

关系数据库,顾名思义就是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。结构化査询语言(Structured Query Language,SQL)就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

RDBMS的特点包括以下几点:

(1)数据以表格的形式出现。

(2)每一行存储着一条单独的记录。

(3)每个列作为一条记录的一个属性而存在。

(4)许多的行和列组成一张表。

(5)若干的表组成数据库。

2.5.9 解释一下网状和层次数据库

试题题面:解释一下什么是网状和层次数据库?

题面解析:本题主要考查应聘者对网状和层次数据库的掌握程度。熟悉数据库的人都知道数据库有三大分类,其中包括网状数据库和层次数据库,同时也是面试过程中经常被问到的问题之一。接下来,让我们一起来解答这道题吧。

解析过程:数据库若按照使用的数据存储模型来划分,可以把数据库分为网状数据库(Network Database)、关系数据库(Relational Database)和层次数据库(Hierarchical Database)。其中,商业中使用最广泛的数据库主要是关系数据库,例如,Oracle、MySQL、DB2、SQL Server等。

网状数据库是指处理以记录类型为节点的网状数据模型的数据库,处理方法是将网状结构分解成若干二级树结构,称为系,其代表是DBTG(Database Task Group,数据库任务组)系统。系类型是两个或两个以上的记录类型之间联系的一种描述。在一个系类型中,有一个记录类型处于主导地位,称为系主记录类型,其他称为成员记录类型。系主和成员之间的联系是一对多的关系。1969年美国的CODASYL组织提出了一份“DBTG报告”,之后,根据DBTG报告实现的系统一般称为DBTG系统。现有的网状数据库系统大都是采用DBTG方案。DBTG系统是典型的三级结构体系:子模式、模式和存储模式。相应的数据定义语言分别称为子模式定义语言SSDDL(Subschema Data Definition Language)、模式定义语言SDDL(Schema Data Definition Language)、设备介质控制语言DMCL(Device Media Control Language),另外,还有数据操纵语言DML(Data Manipulation Language)。

层次数据库也叫树状数据库,它是将数据组织成方向有序的树结构,并用“一对多”的关系联结不同层次的数据库。最著名、最典型的层次数据库是IBM公司的IMS(Information Management System)数据库。IMS是IBM公司研制的最早的大型数据库管理系统,其数据库模式是多个物理数据库记录型(Physical Database Record,PDBR)的集合。每个PDBR对应层次数据模型的一个层次模式。各个用户所需数据的逻辑结构称为外模式,每个外模式是一组逻辑数据库记录型(Logical Database Record,LDBR)的集合。LDBR是应用程序所需的局部逻辑结构。

2.5.10 存储过程与函数的区别

试题题面:存储过程与函数的区别有哪些?

题面解析:本题主要考查存储过程和函数的区别,在解题之前应聘者需要知道什么是存储过程,什么是函数,把两者进行比较,从而得出本题答案。

解析过程:存储过程与函数的区别如表2-3所示。

表2-3 存储过程与函数的区别

2.5.11 什么叫视图,游标是什么

试题题面:什么叫视图,游标是什么?

题面解析:本题考查视图和游标的定义和作用,了解了这两个知识点以便在开发过程中能够正确使用。

解析过程:

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行添加、修改和查找操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。相比多表查询,它使得获取数据更容易。

游标是对查询出来的结果集作为一个单元来进行有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行,也可以对结果集的当前行做修改。一般不使用游标,但是在逐条处理数据时,游标显得十分重要。

2.5.12 范式有哪几种,有什么作用

试题题面:范式有哪几种,有什么作用?

题面解析:本题考查三个范式的主要作用,这道题是理解记忆的题目,面试过程中能够准确地回答即可。

解析过程:

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数型、字符型、逻辑型、日期型等。

第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),即所有非关键字段都完全依赖于任意一组候选关键字。

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖,则符合第三范式。传递函数依赖,指的是如果存在“A→B→C”的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表不存在如下依赖关系:关键字段→非关键字段x→非关键字段y。

2.5.13 使用索引查询一定能提高查询的性能吗,为什么

试题题面:使用索引查询一定能提高查询的性能吗,为什么?

题面解析:本题考查索引的使用,应聘者需要先理解索引的用法,然后在此基础上进一步延伸关于索引的知识。

解析过程:

通常通过索引查询数据比全表扫描要快,但是也必须注意到它的代价。索引需要空间来存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改。这意味着每条记录的INSERT、DELETE、UPDATE将为此多付出4~5次的磁盘I/O。因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢,使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGESCAN)适用于两种情况:

(1)基于一个范围的检索,一般查询返回结果集小于表中记录数的30%。

(2)基于非唯一性索引的检索。

2.5.14 视图的优缺点

试题题面:视图的优缺点有哪些?

题面解析:本题考查视图优缺点,属于记忆类题目,能够准确地记住并且回答即可。

解析过程:

1.优点

(1)对数据库的访问,视图可以有选择性地选取数据库里的一部分。

(2)用户通过简单的查询可以从复杂查询中得到结果。

(3)维护数据的独立性,视图可以从多个表中检索数据。

(4)对于相同的数据可产生不同的视图。

2.缺点

查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么就无法更改数据。

2.5.15 什么是事务,事务的特性是什么

试题题面:什么是事务,事务的特性是什么?

题面解析:本题考查事务的定义以及事务有哪两大特性,应聘者需要分别阐述。

解析过程:

事务是一系列的数据库操作,是数据库应用的基本逻辑单位。

事务性质:

(1)原子性:原子性即不可分割性,事务要么全部被执行,要么就全部不被执行。

· 一致性:事务的执行使得数据库从一种正确状态转换成另一种正确状态;

· 隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。

(2)持久性:事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有其他故障,事务的处理结果也会得到保存。