数据库常见面试问题
本意用于考研复试,以下是博主自己整理,博主是大四本科生,不能保证内容完全正确,请辩证地看,如果有问题可以在评论区指出我再修改。 整理不易,我就不挂个二维码请游客付费了,如果可以的话,麻烦高抬贵手,点一下右下角的推荐吧!
1. 三个范式
即: 属性唯一, 记录唯一, 表唯一
函数依赖:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上属性值相等,而在Y上属性值不等,则称X函数确定Y或Y函数依赖于X,记作 X->Y
l 第一范式(1NF):每一个分量都必须是不可分的数据项
l 第二范式(2NF):如果关系模式属于第一范式,并且每一个非主属性完全函数依赖于任何一个候选码,则该关系模式属于第二范式。所谓完全函数依赖,指的是如果” Y函数依赖于X( X->Y )” ,并且对于X的任何一个真子集X‘,都有Y函数不依赖于X’。
l 第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段x → 非关键字段y
2、完整性约束
数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反映当前实际状况的。数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。
l 实体完整性:若属性A是基本关系B的主属性,则A不能取空值(所谓空值是指不知道,不存在,无意义的值)
l 参照完整性:若属性F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须:
² 或者取空值(F的每个属性值均为空值)
² 或者等于S中某个元组的主码值
(某个同学班长属性可以是尚为选出班长,也可以是本关系中某个元组的学号值)
l 用户定义完整性:针对某一具体关系数据库的约束条件,反映某一具体应用涉及的数据必须满足的语义要求(如某个属性必须取唯一值,某个非主属性不能取空值)
3. 什么是主码?什么是外码?
若关系中某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码,若一个关系有多个候选码,则选定其中一个为主码。
如果F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码。
4. 使用索引查询一定能提高查询的性能吗?为什么?
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能
5. 什么是数据模型?什么是规范化?
数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。
从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据
6. 视图技术在数据库设计中很有用
视图是从一个或几个基本表导出的表,视图是一种虚表,它依赖数据源的实表而存在。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。视图是供程序员使用数据库的一个窗口,能够简化用户的操作,是用户数据保密的一种手段。为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。
如下两种场景一般会使用到视图:
(1)不希望访问者获取整个表的信息,只暴露部分字段给访问者,所以就建一个虚表,就是视图。
(2)查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异。
7、数据库的三级模式结构
1)外模式(子模式)是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。外模式通常是模式的子集,一个数据库可以有多个外模式(视图)
2)模式(逻辑模式)是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,一个数据库只有一个模式。(基本表)
3)内模式(存储模式)是数据库物理结构和存储方式的描述,是数据在数据库内部的组织方式。(存储文件)
8、数据字典:是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息。关系数据库管理系统在执行SQL的数据定义语句时,实际上是在更新数据字典中的相应信息。
9、数据独立性
l 逻辑独立性:当模式改变时,由数据库管理员对各个外模式/模式的映像作相应的改变,可以使外模式保持不变(应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性)
l 物理独立性:当数据库存储结构改变时,由数据库管理员对各模式/内模式的映像作相应的改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性。
10、关系与关系模式、关系数据库的区别:关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。关系数据库是以关系模型为基础的数据库,它利用关系来描述现实世界,一个关系既可以用来描述一个实体及其属性,也可以用来描述实体间的联系。
11、触发器:建立(附着)在某个关系(基表)上的一系列能由系统自动执行对数据库修改得SQL语句的集合即程序,并且经过预编译之后存储在数据库中
12、简述查询优化策略
² 如果一个表达式中多次出现某个子表达式,应该将该子表达式预先计算出结果保存起来,以免重复计算
² 选择运算尽可能先做
² 尽量避免使用select *
² 避免在索引列上使用计算。WHERE子句中,如果索引列是函数的一部分。优化器将不使用索引而使用全表扫描。
² 避免在索引列上使用IS NULL和IS NOT NULL
13、事务:是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。(原子性、一致性、隔离性、永久性)
14、封锁协议
1)一级封锁协议:事务T在修改数据R之前必须先对其加写锁,直到事务结束才释放(避免丢失修改)
2)二级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加读锁,读完后即可释放读锁(避免丢失修改和读脏数据)
3)三级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加读锁,直到事务结束才释放(避免丢失修改、读脏数据、不可重复读)
4)两段锁协议:在对任何数据进行读写操作之前,首先要先申请并获得对该数据的封锁
在释放一个锁之后,事务不再申请和获得任何其他封锁
15、无损联接分解是将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式