三级模式
- 外模式
- 数据库的用户使用的局部数据的逻辑结构和特征的描述
- 数据库用户的数据视图,是与某一应用程序有关的数据的逻辑表示。
- 概念模式
- 它是数据库中全体数据的逻辑结构和特征的描述;
- 模式是所有用户的公共数据视图。因为数据库是多人共享使用的,模式就是大家都看到的样子,综合了所有用户的数据需求。
- 内模式
- 数据物理结构和存储方式的描述
- 是数据在数据库内部的表示方式
- 记录的存储方式:如顺序存储,按B树结构存储,Hash存储)
- 索引的组织方式:B+树索引,hash索引,Join index索引
- 数据是否压缩存储
- 数据是否加密
两级映射
-
外模式/概念模式映射
保证了数据的逻辑独立性。当模式改变时,数据库管理员修改有关的外模式/模式映像,使外模式保持不变;而应用程序是根据数据的外模式编写的,从而应用程序不必修改,保证了数据与应用程序的逻辑独立性,简称为数据的逻辑独立性。
-
概念模式/内模式映射
保证了数据的物理独立性。
- 当数据的存储结构改变时(如本来我们用堆存储,改成了B+树),数据库管理员修改模式/内模式映像,使模式保持不变。
- 应用程序不受影响,保证了数据与程序的物理独立性,简称为数据的物理独立性。
数据库的设计
E-R模型
集成的方法:
- 多个局部E-R图一次集成。
- 逐步集成,用累加的方式一次集成两个局部E-R。
集成产生的冲突及解决办法:
- 属性冲突:包括属性域冲突和属性取值冲突。
- 命名冲突:包括同名异义和异名同义。
- 结构冲突:包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同。
一个实体型转换为一个关系模式
- 1:1联系
- 1:n联系
- m:n联系
三个以上实体间的一个多元联系
关系代数
- 并
- 交
- 差
- 笛卡尔乘积
- 投影
- 选择
- 联接
规范化理论
函数依赖
设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y门=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。
价值与用途
键
- 主键:唯一标识
- 候选键:
- 将关系模式的函数依赖关系用“有向图”的方式表示
- 找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键
- 若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键
- 外键:其他关系的主键
范式
- 1NF:在关系模式R中,当且仅当所有域只包含原子值,即每个分量都是不可再分的数据项,则称R是第一范式。
- 2NF:当且仅当R是1NF,且每一个非主属性完全依赖主键(不存在部分依赖)时,则称R是第二范式。
- 3NF:第三范式(3NF):当且仅当R是1NP,且E中没有非主属性传递依赖于码时,则称R是第三范式。
- BCNF:设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。
由上往下逐步优化,已解决插入异常、删除异常、数据冗余
模式分解
- 保持函数依赖分解
设数据库模式p={R1,R2,…,R}是关系模式R的一个分解,F是R上的函数依赖集,p中每个模式Ri上的FD集是Fi。如果{F1,F2,Fk}与F是等价的(即相互逻辑蕴涵),那么称分解p保持FD - 无损分解
什么是有损,什么又是无损?
有损:不能还原。
无损:可以还原。 - 无损联接分解:指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式
并发控制
事务
- 原子性
- 一致性
- 隔离性
- 持续性
封锁协议
- 一级封锁协议。事务T在修改数据R之前必须先对其加区锁,直到事务结束才释放。可防止丢失修改
- 二级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,读完后即可释放$锁。可防止丢失修改,还可防止读“脏”数据
- 三级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可防止丢失修改、防止读“脏”数据与防止数据重复读
- 两段锁协议。可串行化的。可能发生死锁
整性约束
- 实体完整性约束
- 参照完整性约束
- 用户自定义完整性约束
- 触发器
数据库安全
措施 | 说明 |
---|---|
用户标识和鉴定 | 最外层的安全保护措施,可以使用用户帐户、口令及随机数检验等方式 |
存取控制 | 对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数据范围)的权限。 |
密码存储和传输 | 对远程终端信息用密码传输 |
视图的保护 | 对视图进行授权 |
审计 | 使用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来 |
数据备份
优点 | 缺点 | |
---|---|---|
冷备份 | 非常快速的备份方法(只需复制文件);容易归档(简单复制即可):容易恢复到某个时间点上(只需将文件再复制回去):能与归档方法相结合,做数据库”最佳状态”的恢复;低度维护,高度安全 | 单独使用时,只能提供到某一时间点上的恢复;在实施备份的全过程中,数据库必须要作备份而不能做其他工作:若磁盘空间有限只能复制到磁带等其他外部存储设备上,速度会很慢;不能按表或按用户恢复 |
热备份 | 可在表空间或数据库文件级备份,备份的时间短:备份时数据库仍可使用:可达到秒级恢复(恢复到某一时间点上);可对几乎所有数据库实体做恢复;恢复是快速的 | 不能出错,否则后果严重;若热备份不成功所得结果不可用于时间点的恢复:因难于维护,所以要特别小心,不允许“以失败告终” |
- 完全备份:备份所有数据
- 差量备份:仅备份上一次完全备份之后变化的数据
- 增量备份:备份上一次备份之后变化的数据
- 静态海量转储:在系统中无运行事务时进行,每次转储全部数据库。
- 静态增量转储:在系统中无运行事务时进行,每次只转储上一次转储后更新过的数据。
- 动态海量转储:转储期间允许对数据库进行存取或修改,每次转储全部数据库。
- 动态增量转储:转储期间允许对数据库进行存取或修改,每次只转储上一次转储后更新过的数据。
日志文件:事务日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中
反规范化
由于规范化会使表不断的拆分,从而导致数据表过多。这样虽然减少了数据冗余,提高了增、删、改的速度,但会增加查询的工作量。系统需要进行多次连接,才能进行查询操作,使得系统效率大大下降
- 增加派生性冗余列
- 增加冗除列
- 重新组表
- 分割表