天天看点

数据库名词解释&概念题

以下是准备南大软院复试时整理的。

1. 解释事务和程序还有他们的区别。

–事务:事务是数据库提供的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合在一起作为一个整体以便数据库系统提供一组保证,即事务的ACID性质。

–程序:由序列组成,告诉计算机如何完成一个具体的任务。

2. 完整性约束的含义和内容。

关系完整性是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。包括域完整性,实体完整性、参照完整性和用户定义完整性,其中域完整性,实体完整性和参照完整性,是关系模型必须满足的完整性约束条件。

–域完整性

域完整性是保证数据库字段取值的合理性

SQL约束:检查(CHECK)、默认值(DEFAULT)、不为空(NOT NULL)、外键(FOREIGN KEY)等约束

–实体完整性

若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值

SQL约束:Primary Key & Unique

–参照完整性

若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应(或者说F引用了K),则对于R中每个元组在F上的值必须为:或者取空值;或者等于S中某个元组的主码值

–用户定义的完整性

针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求

SQL约束:NOT NULL,DEFAULT、CHECK约束

3. 排它锁,共享锁,死锁,活锁。

–排它锁:又称写锁(X锁),若事务T对数据对象A加上X锁,则事务T既可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

–共享锁:又称读锁(S锁),若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A作任何修改。

–死锁:如果事务T1封锁了数据R1,事务T2封锁了数据R2,然后T1又请求封锁R2,由于T2已经封锁了R2,于是T1等待T2释放R2上的锁。接着T2又请求封锁R1,由于T1已经封锁了R1,于是T2也只能等待T1释放R1上的锁。于是T1和T2相互等待,T1和T2两个事务永远也不能结束,形成死锁。

–活锁:如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3又请求封锁R,当T1释放了R上的封锁后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,T3释放了R上的封锁后系统首先批准了T4的请求…T2有可能永远等待,这就是活锁的情形。

4、几个范式的含义内容?什么时候可以不遵守范式

–1NF:每一个分量必须是不可分的数据项。

–2NF:若R属于1NF,且每一个非主属性完全函数依赖于码,则R属于2NF

–3NF:若R属于2NF,且每一个非主属性不传递依赖于码。

–BCNF:所有的主属性对每一个不包含它的码,也是完全函数依赖;

–4NF:若R属于1NF,且对于R的每个非平凡多值依赖X->->Y(Y不属于X),X都含有码。属性之间不允许有非平凡且非函数依赖的多值依赖。

–反范式:

遵循范式总体上来说是为了保证数据的integrity和减少冗余,但是,一个完全按照范式设计的冗余极低的数据库,比如在一些数据表中不仅存作为外键的user_id,同样存user_name,这样虽然违反数据库范式增加了user_name字段,

但是却提高了效率,减少了获取user_id后再去user表中获取user name的操作,很可能在性能上会输给冗余相对多一些的数据库

–区别:

第一范式和第二范式在于是不是可以分出两张表

第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表

第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的id(主键),而不能有其他的任何信息(其他的信息一律用主键在另一表查询)

5、数据库设计的步骤

–需求分析(常用自顶向下)

进行数据库设计首先必须准确了解和分析用户需求(包括数据与处理)

–概念结构分析(常用自底向上)

通过对用户需求进行综合,归纳与抽象,形成了一个独立于具体DBMS的概念模型

–逻辑结构分析(E-R图)

逻辑结构设计是将概念结构转换为某个DBMS所支持的数据模型,并将进行优化

–物理结构分析

物理设计是为逻辑数据结构模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)

–数据库实施

设计人员运营DBMS提供的数据库语言(如sql)及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制和调试应用程序,组织数据入库,并进行试运行

–数据库运行和维护

数据库应用系统经过试运行后,即可投入正式运行,在数据库系统运行过程中必须不断地对其进行评价,调整,修改6、数据库管理系统:

–是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库。

7、游标:

–SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。

8、 视图:

–由一个子查询产生的表,但它可以有自己的名字,在很多方面都类似于基本表。

–作用:简化用户对数据的理解和用户的操作;通过视图用户只能查询和修改他们所能见到的数据,比较安全。

9、 索引:

–索引是一种特殊类型的数据库对象,建立索引要单独占用空间。SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间,更好、更快的检索和定位关键字

–索引数据结构

索引的实现通常使用B树及其变种B+树。

10、ACID特性:

–Atomic原子性:整个数据库是不可分割的工作单位

–Consistency一致性:指数据库事务不能破坏关系数据的完整性和业务逻辑的一致性

–Isolation隔离:在并发环境下,当不同的事务同时操纵相同数据时,每个事务都有各自的完整数据空间。

–Durability持久性:只要事务成功结束,它对数据库所做的更新就必须永久保存下来。

11、两阶段封锁协议:

–指所有事务都必须分两个阶段对数据项加锁和解锁。在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁。在释放一个封锁之后,事务不再申请和获得其他任何锁。

12、串行调度、可串行化调度、冲突、冲突可串行化调度

–串行调度:各个事务的操作没有交叉,也没有相互干扰。

–可串行化调度:

多个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。

–冲突:指不同的事务对同一数据的读写操作和写写操作。

–冲突可串行调度:

一个调度Sc在保证冲突操作次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度。

13、SQL与NOSQL的区别,各自的特征、应用场景。又各自应用于哪些具体应用中。

–区别:

1)SQL指关系型数据库,NOSQL泛指非关系型数据库;

2)SQL中数据存储在特定的表中,NOSQL中数据存储方式可以是JSON文档、哈希表或其他方式。

3)SQL中必须定义好表和字段结构后才能存储数据,在NOSQL中数据可以在任何时候任何地方添加,不需要先定义表。

4)SQL中如果需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表。而NOSQL除了这种规范化外部数据表的做法外,还能采用非规范化方式把外部数据直接放到原数据集中。

–应用场景:

关系型数据库适合存储结构化数据,这些数据的规模、增长速度通常是可预期的;

NOSQL适合存储非结构化数据,这些数据通常是海量的,而且增长速度是难以预期的。

–具体应用:

SQL具体应用:MySQL、Oracle

NOSQL具体应用:MongoDB、Redis

14、SQL有什么优化策略。从硬件、系统、应用各级分析。

–物理优化:

基于启发式规则的存取路径选择优化:大多数情况下适用,但不是每种都是最好规则

基于代价估算的优化:估计不同执行策略策略额的代价,选择最小代价执行

–查询优化:

1.选择操作

全表扫描算法:算法简单,适用于规模较小的,较大的表效率低

索引扫描算法:属性上用索引(B+树索引或hash索引),实现快速查找

2.连接操作

嵌套循环算法:最简答可行的算法,可以处理非等值连接在内的各种操作

排序-合并算法:适用于排好序的表,等值连接常用方法

索引连接算法:建立索引进行连接

Hash join算法:处理等值连接的算法,基于hash函数

–代数优化:

关系代数表达式等价变换规则:用相同关系代替对应的不同表达式结果相同的关系

查询树的启发式优化:用启发式的一些规则对查询树进行优化

15、大数据和BI数据分析有什么不同,应用大数据的场景、来源、技术架构。

–BI(Business Intelligence)即商务智能:

它是一套完整的解决方案,用来将企业中现有的数据进行有效的整合,快速准确地提供报表并提出决策依据,帮助企业做出明智的经营决策。

–大数据:

一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。

–大数据的应用场景:那些有很大价值的数据将更有利我们深入了解业务运转和与客户的互动

–大数据来源:主要是社会日常运作和各种服务中实时产生的数字数据

–大数据技术架构:大规模并行处理数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台

16、 关系数据库中的关系含义。

–在关系模型中,现实世界的实体和实体间的各种联系均采用单一的数据结构,即关系来表示。

17、 外键索引的作用。

–当对父表进行更新的时候,如果在子表中的外键没有使用索引,则在更新的过程中整个子表将被锁定,而往往实际上并不需要锁定整个子表,而仅仅需要锁定子表中的几条记录。这样就会大大影响数据库访问的并发性,甚至有可能造成死锁的情况。

18、 什么是分区;分区键类型。

–分区表是将大表的数据分成许多小的子集,而这些小的子集便称为分区。

–分区类型

一. 范围分区:

范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。

二.列表分区:

该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。

三.散列分区:

这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

–分区键:表分区键是一个或多个表列的有序集合。表分区键列中的值用来确定每个表行所属的数据分区。

7.集中式数据库和分布式数据库含义;应用场景;有哪些不同的应用。

–集中式数据库

  1. 含义

    集群是指多台服务器集中在一起,实现同一业务,作为一个整体存在,向用户提供一组网络资源,这些单个的服务器就是集群的节点。

    2.场景

    一、科学计算集群,它可以把一个问题的数据分布到多台的计算机上,利用这些计算机的共同资源来完成计算任务,从而可以解决单机不能胜任的工作

    二、高可用集群,这类集群致力于提供高度可靠的服务。就是利用集群系统的容错性对外提供7*24小时不间断的服务,如高可用的文件服务器、数据库服务等关键应用。

    3.应用

    天气预报、石油勘探与油藏模拟、分子模拟、生物计算等。

    –分布式数据库

  2. 含义

    是指将一个业务拆分不同的子业务,分布在不同的机器上执行,每台计算机可单独放在一个地方,有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的、逻辑上集中、物理上分布的大型数据库。

  3. 场景

    一、 提供多个对外的接口,按照一定规则,分派不同请求由不同接口来处理。

    二、把一个功能拆分成多个功能,不同功能分布部署到不同服务器上

    3.应用

    大型应用QQ、物联网数据、文件索引(大量的图片、文档、视频数据)

◆ DDL:数据定义语言(Data Definition

Language),用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映象,定义数据的完整性、安全控制等约束。

◆ DML:数据操纵语言(Data ManipulationLanguage),用于让用户或程序员使用,实现对数据库中数据的操作。基本的数据操作分成两类四种:检索(查询)和更新(插入、删除、修改)。DML分成交互型DML和嵌入型DML两类。依据语言的级别,DML又可分成过程性DML和非过程性DML两种。

◆超键:在关系中能唯一标识元组的属性集称为关系模式的超键。(注意,超键是一个属性集)

◆候选键:不含有多余属性的超键称为候选键。

◆主键:用户选作元组标识的一个候选键为主键。

◆外键:某个关系的主键相应的属性在另一关系中出现,此时该主键在就是另一关系的外键,如有两个关系S和SC,其中S#是关系S的主键,相应的属性S#在关系SC中也出现,此时S#就是关系SC的外键。

◆ 宿主语言:编写应用程序的语言(即高级程序设计语言)在数据库技术中称为宿主语言(host

language),简称主语言。

◆ DDL:数据定义语言(Data DefinitionLanguage),用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映象,定义数据的完整性、安全控制等约束。

◆ DML:数据操纵语言(Data ManipulationLanguage),用于让用户或程序员使用,实现对数据库中数据的操作。基本的数据操作分成两类四种:检索(查询)和更新(插入、删除、修改)。DML分成交互型DML和嵌入型DML两类。依据语言的级别,DML又可分成过程性DML和非过程性DML两种。

◆ 交互型DML:这类DML自成系统,可在终端上直接对数据库进行操作。

◆ 嵌入型DML:这类DML是嵌入在主语言中使用。此时主语言是经过扩充能处理DML语句的语言。

◆ 过程性DML:用户编程时,不仅需要指出“做什么”(需要什么样的数据),还需要指出“怎么做”(怎么获得数据)。层状、网状的DML属于过程性语言。

◆ 非过程性DML:用户编程时,只需要指出“做什么”,不需要指出“怎么做”。关系型DML属于非过程性语言。

补充部分:

1.故障的种类

事物内部故障(预期故障)

系统故障:造成系统停止并需要重启的任何事件

介质故障(硬盘等实体机部件损坏)

计算机病毒

2.可串行化调度

多个并发执行的事物的结果与非并发执行时这些事物按某种顺序执行时的结果一样,则该并发执行的结果正确,该调度是可串行化调度。

3. 冲突

不同事物对同一个数据的读写操作和写写操作。

4. 冲突可串行化

通过调度两个不同事物的不冲突操作,来使化解冲突,得到可串行的操作。冲突可串行化是可串行化调度的充分条件。

5. 锁的协议

一级锁协议:事物修改某数据前需对该数据加X锁(排他锁)

二级锁协议:一级的基础上增加读取数据前需加S锁(共享锁), 读完数据后释放

三级锁协议:二级把读取后释放S锁改为事物结束后释放

一级锁防丢失修改,二级锁防读脏数据,三级锁防止了不可重复读取

6. 日志

用来记录事物对数据库的更新操作的文件(单位可以是记录也可以是数据

块)

7. 检查点

检查点的是数据库恢复过程中尽快找到需要查看的日志开始读取更新操作而在日志文件中新增的记录,具体内容为:

  1. 建立检查点时刻所有正在执行的事物清单;
  2. 这些事物最近的一个日志地址。

8. 数据库的恢复过程

事物恢复:rollback过程,反向扫描日志,对更新操作进行逆操作直至该事物的开始标记。

系统故障恢复:正向扫描日志文件,将故障发生前的已提交的事物放入重做队列;未完成的事物放入撤销队列。先对撤销队列undo再对重做序列redo。

介质故障的恢复:先将数据库后备副本装好,再根据日志恢复数据。

使用检查点的恢复:先找到检查点,将记录检查点时正发生的所有时间先放入撤销队列,然后正向扫描检查点记录的日志。发现新的事物,暂且将该事物放入撤销队列;发现事物提交,将该事物放入重做序列。待扫描完成后对撤销队列进行undo操作,完成后再对重做队列内的事物redo。

9. 触发器

定义:用户定义在关系表上的一类由事件驱动的数据库对象,也是一种保证

数据完整性的方法。

功能:实现主键和外键不能保证的复杂的参照完整性和数据的一致性从而

有效保护表中数据。

10.为什么不给所有的单个属性都建立索引?

A. 索引的创建和维护需要时间,给所有属性建立索引大大增加了数据库管理员的工作量;

B. 索引本身需要占用物理内存,为所有属性建立索引的代价太大;

C. 表中数据变化时,其索引也有可能发生变化,降低了数据的维护速度。

11.如何建立好的索引?

A. 主键、外键一定建立索引;

B. 经常查询的数据如经常在where字句中出现的数据,经常在order by、group by、distinct后出现的字段最好建立索引;

C. 对于需要在指定范围内的快速或高频率查询的数据建立索引;

D. 对于查询中很少涉及的列,重复值比较多的列,数据类型为text、image和bit的列,经常存取的列不要建立索引;

E. 限制表上的索引数目,对于存在大量更新操作的表,索引数目一般不要超过3个,最多不超过5个。

12.登记日志的原则?

一,严格按照操作的执行顺序登记日志;二,先登记日志,再执行操作。

13.请描述锁机制和多种锁结构,并举例说明以及描述其应用场景。大部分锁机制是数据库配置后自动执行,请举例描述哪些情况下,必须利用程序语言控制并发更新?

锁机制是sql为了保证并发性的一种手段。它使用了三级锁协议来避免写入的数据丢失、读“脏”数据和可重复读数据。为了保证事物的并发,使用了先来先服务的调度算法和死锁的诊断和解除等技术(超时法、等待图法等)来避免活锁和死锁的出现。再用两段锁协议保证了事物的冲突可串行化,保证了并发执行的正确性最终实现了事物的并发执行。

悲观锁主要有以下几种:

A. 共享锁(S锁):读取数据前对数据加s锁以保证其他事物无法对该数据修改导致读“脏”数据。

B. 排它锁(X锁):更新数据前,对该数据加x锁以保证其他事物不会更新或读取该数据。

C. 意向锁:在将要加锁的属性上可先加上意向锁。

对于某些隔离级别比较高的,需要手动加锁的事物,需要用程序语言控制并发更新。