1、一些基本概念
- 候选健:能够唯一标识一个元组。在集合中可能有多个候选键,注意候选键也可能是多个属性的集合。
- 主键:是候选键之一,选取它来组织关系
- 外键:不是当前关系的候选键但却是另一个关系的候选键
- 主属性:候选键中的任何一个属性
- 非主属性:不包含在任一候选键中的属性
2、完整性约束有哪些?
数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反映当前实际状况的。数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。
- 实体完整性:关系的主属性不为空值
- 参照完整性:在维护两个表的关系时,外键属性值在目标表和依赖表上要保持一致
- 用户定义完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。
3、什么是数据库约束,常见的约束有哪几种?
定义数据库表的时候需要指定的。总体来讲,约束可以分为:
- 主键约束:primary key; 唯一性,非空性
- 外键约束:foreign key;需要建立两表间的关系并引用主表的列
- 唯一约束:unique;唯一性,可以空,但只能有一个
- 检查约束:check;对该列数据的范围、格式的限制(如:年龄、性别等)
- 空值约束:not null;
- 默认值约束:default;该数据的默认值
4、基本连接运算
两个关系的连接指的是从两个关系的笛卡尔积中(全集合)根据条件选取对应行
- 条件连接:根据条件选取对应行
- 等值连接:选取两个关系中共有属性值相等的元组,不合并属性
- 自然连接:在等值连接的基础上合并公有属性
- 外连接:左连接为例,以左表为基础,连接两表,如果左表某行在右表中没有匹配,相应属性值为空
5、什么是视图
视图是在数据库中通过Select查询语句从多张表中提取的多个表字段组成的虚拟表。不包含真正数据,方便用户从不同角度去观察数据库实表。
在满足一定条件下,允许通过视图对原表中的数据进行增删改。
6、关系数据库的函数依赖关系
函数依赖是指关系表中各个属性(表中字段)存在什么样的依赖关系
- 完全函数依赖:属性集X中所有属性共同决定属性Y,缺一个都不行
- 部分函数依赖:属性集X的子集可以决定Y
- 传递函数依赖:属性集X决定Y,Y决定Z
7、范式是什么?有哪几种?
范式就是根据约束条件的不同将数据库表分成不同类的表集合。
- 第一范式:表中字段都是单一属性,不可再分。简而言之,第一范式就是无重复的列。缺点是插入修改删除很不方便
- 第二范式:所有非主属性都不部分函数依赖于任一候选键。优点是关系得到细分,具有插入修改删除的优势;缺点是数据冗余,修改复杂,需要修改多处
- 第三范式:所有非主属性都不传递函数依赖于任一候选键,或说所有非主属性都完全函数依赖于候选键,意味着不存在非主属性之间的函数依赖
- BCNF范式:只存在依赖于候选键的函数依赖
满足第二范式,必须满足第一范式,以此类推。
8、什么是数据库的事务?
事务是用户定义的数据库操作的序列,这些操作要么不做,要么就全都做,是一个不可分割的工作单位。
事务的四个特性ACID为:原子性、一致性、隔离性、持久性。
- 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
- 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致
- 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
- 持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
9、封锁协议
-
一级封锁协议:事务T在修改数据R之前必须先对其加写锁,直到事务结束才释放(避免丢失修改)
-
二级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加读锁,读完后即可释放读锁(避免丢失修改和读脏数据)
-
三级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加读锁,直到事务结束才释放(避免丢失修改、读脏数据、不可重复读)
-
两段锁协议:在对任何数据进行读写操作之前,首先要先申请并获得对该数据的封锁。在释放一个锁之后,事务不再申请和获得任何其他封锁