数据库原理
-
请解释数据库的四个基本概念
-
数据
数据(Data)是描述事物的符号记录,是数据库中存储的基本对象。
-
数据库
数据库(Data Base DB)是长期存储在计算机内,有组织的,可共享的大量数据的集合。
-
数据库管理系统
数据库管理系统(Data Base Management System DBMS)位于用户和操作系统之间的一层数据管理软件;是基础软件,是一个大型复杂的软件系统。
-
数据库系统
数据库系统(Data Base System)是指在计算机系统中引入数据库后的系统构成。
包括:DB 数据库、DBMS 数据库管理系统、APP 应用程序、DBA 数据库管理员、用户
-
-
数据模型是什么?分为哪些?
数据模型是对现实世界数据特征的抽象。
-
概念模型
信息世界的建模,是现实世界到信息世界的第一层抽象;
-
逻辑模型
数据的逻辑结构。它包括层次模型、网状模型、关系模型和其他模型;
其他模型包括面向对象模型、对象关系数据模型和半结构化数据模型;
-
物理模型
描述数据是如何在计算机中存储和组织的。
-
-
请描述数据库三级模式的结构
-
模式与实例
- 模式:对数据库逻辑结构和特征的描述,是型的描述(模式是相对稳定的)
- 实例:数据库某一时刻的状态,模式的具体值,同一个模式可以有很多实例
-
三级模式结构
-
外模式(用户模式、子模式)
与某一应用有关的数据的逻辑表示,如视图
-
模式(逻辑模式)
是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
-
内模式(存储模式)
是数据物理结构和存储方式的描述,如聚簇和索引
-
-
二级映像
- 外模式-模式映像:保证数据与程序的逻辑独立性
- 模式-内模式映像:保证数据与程序的物理独立性
-
数据与程序的逻辑独立性与物理独立性
- 逻辑独立性:模式改变,外模式和应用程序不变
- 物理独立性:数据存储结构改变,模式、外模式、应用程序不变
-
-
数据模型的组成要素
-
数据结构(静态)
描述系统的静态特性,它是刻画数据模型性质的重要方面
-
数据操作(增删改查)
-
数据完整性约束条件
是一组完整性规则,描述数据及其联系所具有的制约和依存关系
-
-
关系完整性约束分为哪些
- 实体完整性:主属性不可以取空值;
- 参照完整性:外码要么取空值要么取参照关系中某个元组定义的主码值
- 用户自定义的完整性
-
视图和基本表的区别
- 视图是从一个或多个基本表中导出的表,是已经编译好的SQL语句;
- 视图没有实际的物理记录,不占用物理空间,而基本表相反;
- 视图是查看表内容的窗口,查看数据表的一种方法,视图可以不给用户接触表,使用户不知道表结构,安全性更高;
- 视图是逻辑概念,视图的建立删除只影响它本身,而不影响对应的基本表;基本表是物理概念,对基本表的操作就是数据库的实际读写;
-
数据库范式
-
1NF 是指数据库表的每一列都是不可分割的基本数据项;(队伍中是由人组成的)
-
2NF 是指实体的非主属性对码完全依赖,不是部分依赖;(对一把手的绝对服从)
-
3NF 是指非主属性属性之间不互相依赖;(队伍内部不拉帮结派)
例如存在部门信息表,每个部门除了部门号还有部门名称等;员工信息表中列出部门编号后不能再列出部门名称等,防止信息冗余。
-
BCNF 是指在3NF基础上,消除主属性对码/键的部分依赖、传递依赖,则称它符合BCNF;(一把手之间互不影响)
即每一个决定因素都包含码。
-
-
数据库设计基本步骤
-
ODBC、JDBC是什么?
- ODBC是微软公司开发的开放数据库互连系统。不依赖任何DBMS。
- JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
- 加载jdbc驱动程序;
- 创建数据库的连接;
- 创建preparedStatement;
- 执行SQL语句;
- 遍历结果集;
- 处理异常及关闭JDBC对象资源。
-
事务的四大特性是?
-
原子性
全部成功或全部失败;
-
一致性
事务的执行不能破坏数据库的完整性和一致性;
-
隔离性
在并发环境中,并发的事务是相互隔离的,一个事务的执行不能不被其他事务干扰。
-
持久性
一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。
-
-
数据库故障的种类有哪些
- 事务内部故障
- 系统故障
- 存储介质故障(硬件故障)
- 计算机病毒
-
数据并发操作所造成的数据库不一致性
- 丢失修改
- 不可重复读
- 读“脏”数据
-
什么是封锁?什么是两段锁协议?有哪些封锁类型?
- 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。
- 两段锁协议指的是事务执行分为两个阶段:加锁阶段和解锁阶段。
- 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议;
- 但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。
- 基本锁的类型
- 排它锁X锁,也称为写锁,表示对数据进行写操作。
- 共享锁S锁,也称为读锁,用于所有的只读数据操作。
-
一级、二级和三级封锁协议
- 一级封锁协议
- 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。
- 一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。使用一级封锁协议可以解决丢失修改问题。
- 在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,它不能保证可重复读和不读“脏”数据。
- 二级封锁协议
- 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。
- 二级封锁协议防止了丢失修改和读“脏”数据。但在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。
- 三级封锁协议
- 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
- 三级封锁协议防止了丢失修改和读“脏”数据,还进一步防止了不可重复读。
- 一级封锁协议
-
饥饿、活锁、死锁的区别?
- 饥饿:任务一直等待得不到处理;
- 活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。
- 死锁:两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待
-
可串行化调度的充分条件有哪些?
- 事务遵守两段锁协议是可串行化调度的充分条件
- 冲突可串行化调度是可串行化调度的充分条件
-
自主存取控制和强制存取控制的区别
- 自主存取控制
- 通过 SQL 的GRANT 语句和REVOKE语句实现
- 用户对不同的数据对象有不同的存取权限。
- 不同的用户对同一对象也有不同的权限。
- 用户还可以将其拥有的存取权限转授给其他用户。
- 强制存取控制
- 每个数据对象被标注为一个特定的等级
- 每个用户被授予一个特定等级的许可证
- 对于任意一个对象,只有具备合法许可证的用户才可以存取。
- 自主存取控制
-
为什么强制存取控制规定仅当主体许可证级别小于等于客体密级才能写入相应客体,而非大于等于?
-
自主存取控制的缺点?