1、数据库设计的基本步骤是什么?
- 需求分析:了解和分析用户需求。
- 概念模型设计
- 把客观现实世界的对象抽象为某一种信息结构,即对用户的需求进行抽象和归纳,提炼出一些概念的东西来描述用户的需求。
- 常用的方法是画E-R图(实体关系图):由实体、属性和关系组成,用于进行关系型数据库系统的概念设计。
- 如:学生管理系统中有“学生”和“成绩单”等。
- 逻辑模型设计
- 将概念模型具体化,即实现概念模型所描述的东西需要哪些具体的功能。
- 主要包括层次模型、网状模型、关系模型。
- 如:“学生”包括:姓名、性别等,“成绩单”包括:语文、数学等。
- 物理模型设计
- 对真实数据库的具体描述。
- 如:关系数据库中的表、字段、长度、数据类型等。
- 数据库实施阶段
- 数据库的运行与维护
2、数据库管理系统DBMS
- 操纵和管理数据库的大型软件。
- 功能:数据定义、数据操纵、数据库的运行管理、数据库建立和维护。
3、数据库系统的特点是什么?
- 数据结构化。
- 数据共享性高,冗余度低。
- 数据独立性高。
- 数据由DBMS统一管理。
4、数据库管理员DBA的职责是什么?
- 负责管理和维护数据库管理系统,具体为:
- 决定数据库中要存放哪些信息。
- 决定数据库的存储结构和存储策略。
- 定义数据的安全性要求和完整性约束条件。
- 监控数据库的使用和运行。
- 对数据库进行改进和完善。
5、关系模型中的三类完整性约束
- 实体完整性:关系模型中主码不能为空值、不能重复。
- 参照完整性:关系模型中的外码只能是空值或者另一关系模型的主码。
- 用户定义完整性:关系模型中针对某一属性的约束,即指明属性的取值范围。
6、数据库操纵语言和数据库控制语言
- 数据库操纵语言:通过对表中的数据进行插入、删除和修改等,实现对数据库的基本操作。
- 数据库控制语言:用来设置或者更改数据库用户或用户权限的语句。
7、连接查询
- 又称多表查询,当查询的字段涉及多个表的时候,就要用到连接查询。
- 分类:内连接和外连接。
- 内连接:连接查询的结果中仅包含满足条件的行。分为:
- 等值连接:使用等号比较被连接列的值,其查询结果中包含了重复行。
- 自然连接:连接条件和等值连接相同,但是其查询结果中不包含重复行。
- 不等连接:使用除等号以外的运算符比较被连接列的值。
- 外连接:连接查询的结果中既包含满足条件的行,还包含某个表中的全部行。分为:
- 左外连接:显示左表全部行,和右表中与左表相同的行。
- 右外连接:显示右表全部行,和左表中与右表相同的行。
- 全外连接:显示左表和右表中的全部行。
- 内连接:连接查询的结果中仅包含满足条件的行。分为:
8、索引
- 功能:当表的数据量比较大时,查询操作比较耗时,建立索引可以加快查询速度。
- 缺点:索引需要占用一定的存储空间,且基本表更新时需要维护索引表。
- 索引方式:B+树索引、Hash索引。
9、索引和键的区别
- 索引是存储在数据库中的一个物理结构,是实际存在的,相当于一本书的目录。
- 键是一个逻辑概念,分为主键和外键等。
- 主键:一条记录的唯一标识,不能重复,不能为空,用来保证数据完整性。相当于一本书中的页码。
- 外键:其他表的主键,可以重复,可以为空,用来与其他表建立联系。
- 【注】主键和主码是一个意思。
10、视图
- 视图是存储在数据库中的SQL查询语句。是由数据库中的一张或多张表导出的虚拟表,类似于查询函数,方便用户对数据进行查询操作。
- 基本表中的数据发生变化,从视图中查询出来的数据也会随之发生变化。
- 优点:简化了查询操作;提高了数据库的安全性。
11、数据库的安全性技术
- 作用:保护数据库以免被恶意破坏和非法存取。
- 方法:用户标识和鉴别、多层存储控制、审计、视图、数据加密。
- 用户标识和鉴别:保证只有合法的用户才能进入数据库系统访问数据库资源。
- 审计:审计员利用审计日志监控数据库中的各种行为,找出导致数据库发生异常的事件。
- 视图:可以对不同的用户定义不同的视图,即把需要保密的数据对无权存取的用户隐藏。
12、断言
- 断言是更具一般性的约束。断言创建后,任何涉及到断言的操作都会引发数据库对断言进行检查,任何使断言为假的操作都会被拒绝执行,相当于if语句。
- 【注】约束是防止数据库被非法操作的规则,有主键约束,外键约束,检查约束等。
13、触发器
- 触发器是用户定义在关系表上的一类由数据驱动的特殊过程。
- 用户对表进行增删改操作会引起数据库系统自动激活相应的触发器完成某种操作。
- 例如:有一张期中考试成绩表和一张期末考试成绩表。期末考试后某一位同学退学了,需要把他的所有信息从表中删除。可以建立一个触发器,当从期末考试成绩表中删除某个同学的信息时,会引起在期中考试成绩表中也把该同学的信息删除。
14、合并E-R图时有哪些冲突?
- 属性冲突:不同实体对同一属性的定义不同。
- 命名冲突:同名异义,同义异名。
- 结构冲突:同一实体在不同的局部E-R图中有不同的抽象。
15、什么是存储过程?用什么来调用?
- 存储过程是预编译的SQL语句集合,就像函数一样,只需创建一次,即可在程序中进行多次调用,且比执行单纯的SQL语句更快。
- 可以创建一个命令对象进行调用。
16、游标
- 系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。
- 可以通过遍历游标,逐行访问处理执行结果中的数据。
17、关系数据库中查询处理的步骤
- 查询分析:对查询语句进行语法分析。
- 查询检查:对合法的查询语句进行语义检查。
- 查询优化:选择一个高效执行的查询处理策略。
- 查询执行:依据优化得到的执行策略生成查询执行计划,并生成相应的查询执行计划代码。
18、事务
- 事务是对数据库进行操作的一个基本单位。
- ACID特性(数据库事务正确执行的四个基本要素)
- 隔离性:一个事务的执行不能被其他事务干扰。
- 原子性:事务是一个不可分割的单位,即一次执行完。
- 一致性:事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。
- 永久性:一旦事务被提交,它对数据库的改变就是永久的。
19、为什么事务非正常结束时会影响数据库数据的正确性?
- 事务具有一致性,如果数据库系统在运行过程中发生了故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所做的修改有一部分已经写入物理数据库,这时数据库就处于一种不一致的状态。
20、数据库恢复的关键是什么?
- 关键是建立冗余数据。
21、数据库恢复的基本技术
- 当数据库系统运行过程中发生故障,可以利用后备副本和日志文件将数据库恢复到故障前的某个一致性状态。
- 数据转储:定期将数据库的数据复制到其他介质上进行保存,这些备份的数据被称为后备副本。
- 登记日志:记录用户对数据库进行的更新操作,用来记录这些操作的文件被称为日志文件。
22、登记日志文件时为什么必须先写日志文件,后写数据库?
- 如果没有先写日志文件对数据库进行了修改,而后发现这次修改出现了错误,再想要对数据库进行恢复时,发现在日志文件中根本没有登记这次操作,就不能对数据库进行恢复了。
23、数据库故障分类
- 事务故障
- 事务在执行结束前被中止。
- 可利用日志文件撤销此事务对数据库进行的修改。
- 系统故障
- 造成系统停止运转的任何事件,使得系统要重新启动。
- 为了防止系统故障造成的数据不一致性,必须撤销故障时未完成的事务再重做。
- 介质故障
- 磁盘上的物理数据或日志文件被破坏。
- 需要重装数据库,重做已经完成的事务。
24、在数据库中为什么要并发控制?
- 数据库是共享资源,多个事务可以同时对数据库进行操作。当多个事务并发地操作数据库时,就可能存在同时读和写数据的情况(写后读,读后写,写后写),如果不对并发操作加以控制,就可能存在数据存取错误,破坏数据库的一致性,如丢失修改、不可重复读和读取脏数据。
25、并发造成的数据不一致性包括哪些?
- 丢失修改:A、B两个事务同时对一数据进行操作,A的修改破坏了B的修改,导致B的修改丢失。
- 不可重复读:A读取了数据后,B对数据进行了修改,导致A无法再读取前一次的结果。
- 读取脏数据:A对数据进行修改后,B读取了该数据,然后A又因为某一原因撤销了本次修改,导致数据恢复原值,此时B读取的数据就成了脏数据。
26、锁
- 锁是最常见的并发控制机制,是防止其他事务访问指定资源,实现并发控制的一种手段。
- 排他锁(写锁):当数据被加上写锁后,其他事务不能对该数据进行读和写操作。
- 共享锁(读锁):当数据被加上读锁后,只允许其他事务对该数据进行读操作,不允许写操作。
27、一、二、三级封锁协议
- 一级封锁协议:事务在修改数据之前加上写锁,直到事务结束才释放。该协议可以防止丢失修改。
- 二级封锁协议:在一级封锁协议的基础上,事务在读取数据之前对其加读锁,读完后释放读锁。该协议可以防止读取脏数据。
- 三级封锁协议:在一级封锁协议的基础上,事务在读取数据之前对其加读锁,直到事务结束才释放读锁。该协议解决了不可重复读。
28、增删改查操作语句
- 增:insert into
- 删:delete
- 改:update
- 查:select
29、范式
- 范式是我们在设计数据库结构过程中需要遵循的规则和指导方法。
- 三大范式分别为:第一范式、第二范式、第三范式。
- 第一范式:表中每一列都不可再分,即每一个字段的值必须具有原子性。
- 第二范式:在第一范式的基础上,所有非主键字段,都必须完全依赖主键,即一张表只描述一件事情。
- 第三范式:在第二范式的基础上,数据表中的所有非主键字段不能依赖于其他非主键字段,即非主键字段之间是相互独立的。
- 【注】什么是依赖?
- 部分依赖:通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。
- 完全依赖:通过AB能得出C,但是A和B单独得不出C,那么说C完全依赖于AB。
- 传递依赖:通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么说C传递依赖于A。