原创文章,禁止转载。
数据库是长期存储在计算机中的、有组织的、可共享的数据集合。它通过某种数据模型进行组织,存储于外部存储设备上,并支持多个用户的并发访问。
数据库系统的基本特征为:数据共享性、数据独立性、数据结构化和冗余度低。
不会因系统数据存储结构与数据逻辑变化而影响应用程序的性质称为数据库系统的数据的独立性。
DBA的职责:
1.参与数据库设计,确定数据库的结构和内容。
2.定义数据的安全性和完整性,分配用户权限并管理口令。
3.监督数据库的运行,优化或重构数据库系统。
4.为终端用户提供数据库使用支持。
数据库管理系统的主要功能:
1.实现数据定义:使用数据定义语言(DDL)定义数据结构。
2.实现数据操作:使用数据操纵语言(DML)进行数据查询、插入、删除和修改。
3.实现运行管理:负责并发控制、安全性检查、完整性约束执行和数据库内容维护。
4.实现建立与维护:支持初始数据输入与转换、数据库转储与恢复、重组和性能优化。
数据库系统的三层模式结构由以下三个层次构成:
1.外模式:用户视图,定义用户如何看待数据。
2.模式:定义数据库的逻辑结构,描述数据的组织和关系。
3.内模式:定义数据在存储介质上的物理存储方式。
三层模式结构的好处:
1.逻辑独立性:用户无需关心数据的物理存储细节,能够从逻辑上处理数据。
2.物理独立性:数据库管理系统通过映射层(外模式/模式、模式/内模式映射)处理数据的转换,改变物理存储方式时不影响用户视图。
3.三层模式结构使得数据库更加灵活,便于管理和维护。
数据库的安全性是指保护数据库免受非法使用、数据泄露、篡改或破坏。
DBMS的安全性措施包括:
用户鉴定:通过用户标识和密码验证,确保只有合法用户可以访问系统。
访问权限控制:为用户定义访问权限,限制其访问的数据。
视图:通过定义视图隐藏敏感数据,确保用户只能查看授权的数据。
数据加密:对敏感数据进行加密,防止未授权访问。
审计功能:记录用户操作日志,帮助监控和审查数据访问。
参照完整性规则:
如果属性F是表R的外键,且与表S的主键F对应,则对于表R中的每条记录,F的值要么是表S中主键F的某个值,要么为NULL。
视图与基本表的区别和联系:
视图是从一个或多个基本表中派生出的虚拟表,它不同于基本表。视图本身不存储数据,而是存储对基本表的查询定义,数据依然保存在原始的基本表中。当基本表中的数据发生变化时,视图的数据也会随之更新。
区别:
- 视图不存储数据,只存储查询定义;基本表存储实际数据。
- 对视图的更新操作有限制,而基本表的更新操作没有此限制。
联系:
- 视图可以像基本表一样进行查询、删除等操作。
- 可以在视图基础上进一步定义新的视图。
事务的特性(ACID):
1.原子性(A):事务要么全部执行,要么全部不执行。
2.一致性(C):事务执行前后,数据库必须保持一致性。即事务执行前后,数据库状态必须符合所有的约束条件。
3.隔离性(I):一个事务的执行不应受到其他事务的干扰。即事务执行的中间状态对其他事务是不可见的。
4.持久性(D):一旦事务提交,其结果是永久性的,即使发生系统故障,已提交的数据也不会丢失。
数据库恢复策略主要包括数据冗余恢复和日志恢复技术。故障发生时,系统通过扫描日志文件,找出已提交的事务并将其事务标识加入REDO队列,同时识别未完成的事务并将其事务标识加入UNDO队列。然后,系统对UNDO队列中的事务进行撤销操作,恢复到事务开始前的状态,对REDO队列中的事务进行重做操作,确保已提交的事务得以恢复,从而保持数据库的一致性和完整性。
数据库管理系统是系统软件(软件产品),数据库系统是应用系统(不仅仅是软件产品)。
IBM公司的数据库管理系统IMS支持的是层次模型。
层次模型以树状结构表示各实体及其实体间的联系,但不能表示多对多的联系。
层次模型是网状模型的特例,网状模型可以表示多对多的联系。
关系模型由工程师E.F.Codd提出。
在关系模式中,使用关系(表)来表示数据。
数据模型由数据结构、数据操作和完整性约束三部分组成。
数据库设计过程的输出主要有两部分:完整的数据库结构、应用程序的设计原则。
完整性约束包含:
实体完整性约束(主键不得为空或重复)、参照完整性约束(二表之间的参照关系)、用户定义完整性约束(唯一约束、非空约束等)。
进行插入操作、更新操作时需要检查是否满足实体完整性约束、参照完整性约束、用户定义完整性约束。
进行删除操作时,仅需检查是否满足参照完整性约束。
实体完整性和参照完整性被称作关系的两个不变性,由数据库管理系统自动支持。
数据模式是稳定的,而实例是变动的。
触发器是用户定义在关系表上的一类由事件驱动的特殊过程。
数据库设计:
创建一个性能良好的、满足不同用户使用要求的、符合选定DBMS的数据库格式的数据库。
主属性:包含在任何一个候选码中的属性。
不仅可以在基本表上创建索引,还可以在视图上创建索引。
当视图被删除,不会对基本表造成影响;但修改视图时会影响到基本表。
从一个关系中指定若干属性组成的新的关系的运算称为投影。
投影会自动剔除重复行。
数据项是不可再分的数据单位。
数据库系统提供三种级别的数据抽象: 视图级抽象、概念级抽象、物理级抽象。
SQL语言有两种使用方式: 交互式、嵌入式。
SQL具有关系代数(如投影) 和 关系演算(如要求age<20) 的特点。
SQL特点:高度非过程化、面向集合的操作方式。
SQL语言一次查询的结果是一个集合。
在SQL语言的结构中,基本表有对应的物理存储,视图没有对应的物理存储。
自然连接会对连接结果去除重复行。 因此3个各有10个元组的关系自然连接后元组个数不确定。
在等值连接中将目标列中重复的属性列删除,称为自然连接。
自然连接举例:
表 Student
(学生表):
StudentID | Name | Age |
---|---|---|
1 | Alice | 20 |
2 | Bob | 22 |
3 | Charlie | 19 |
表 Enrollment
(课程注册表)
StudentID | Course | Grade |
---|---|---|
1 | Math | A |
2 | Science | B |
4 | History | C |
自然连接会自动基于两个表中 列名相同的列(StudentID
) 进行匹配。
结果如下:
StudentID | Name | Age | Course | Grade |
---|---|---|---|---|
1 | Alice | 20 | Math | A |
2 | Bob | 22 | Science | B |
外键值的取值有两种:1、空;2、等于参照关系中的某个主键值。
关系数据理论主要解决的问题是消除操作异常和数据冗余。
如果一个分解具有无损连接性, 则它能够保证不丢失信息。
如果一个分解保持函数依赖, 则它可以减轻或解决各种异常情况。
无损连接与保持函数依赖没有任何联系。
分解关系模式时,应保持无损连接和函数依赖(也称FD)。
既要保持函数依赖,又要满足无损连接,对关系模式进行分解时一定可达3NF。
用户定义的完整性的违约处理是拒绝执行。
数据库管理系统对并发操作进行调度,以此保证事务的隔离性与一致性。
并发操作破坏了事务的隔离性。
并发操作带来的数据不一致性包括丢失修改、不可重复读、读脏数据。
对数据库的最基本要求:保证数据的一致性。
SIX锁与IX锁不相容。
数据的完整性是指数据的正确性和相容性。
实体具有的某一特征称为属性。
GRANT语句中如果指定了WITH GRANT OPTION字句,则获得某种权限的用户还可以将该权限授予其他用户。
在授权的定义中,数据对象的范围越小,授权子系统越灵活。
若授予全部权限,应使用关键字ALL PRIVILEGES,如GRANT ALL PRIVILEGES ON TABLE A TO U1,授予U1对A表的所有权限。
动态转储的后援副本必须加上日志文件后,才可以将数据库恢复到某一时刻的正确状态。
数据库副本+日志文件,可以恢复被破坏的数据库。
E-R图合并时,可能出现属性冲突(属性域冲突【本应插入数字却插入了字符】和属性取值单位冲突【重量列插入了0.1kg和10g】)、命名冲突(同名异义和异名同义)、结构冲突(包含同一对象在不同应用中具有不同的抽象、同一实体在不同的分 ER 图中所包含的属性个数和属性排列次序不完全相同、实体间的联系在不同的分 ER 图中为不同的类型)。
使用两段封锁协议产生的是可串行化调度。
定义视图时加上WITH CHECK OPTION子句后,在对视图进行增删改查时会检查视图定义的条件。
视图可以对基础表进行选择、投影和连接,因此能够为数据呈现提供多种视角,包括限制用户访问的数据范围,从而提供一定的安全保护。
增广律:X->Y,则XZ->YZ。
自反律:Y⊆X,则X->Y。
传递律:X->Y,Y->Z,则X->Z。
分解规则:X->YZ,则X->Y,X->Z。
伪传递规则:X->Y,YA->Z,则XA->Z。
数据控制语言由 GRANT 和 REVOKE 两个指令组成,维护数据库的安全性。
数据操纵语言:由删改查指令构成。
死锁是指当两个(或多个)并发的事务分别等待对方释放封锁的资源,而使事务处于长期等待状态的现象。
解决死锁问题的方法有两类:死锁的预防、死锁的检测与解除
解决死锁的方法:
1、死锁的预防
- 一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁。
- 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
2、死锁的检测与解除 - 超时法:如果一个事务的等待时间超过了规定的时限,则认为发生了死锁(该方法会误判发生了死锁)
- 等待图法:出现环则说明存在死锁
DBS(数据库系统)包括DB和DBMS。
模式与开发语言、物理存储无关。
内模式用于对数据库物理存储方式进行描述,内模式最接近外部存储器。
二级映像的主要作用是提高数据与程序的独立性。
外模式/模式映像用于实现数据库的逻辑独立性(注意:不是外模式实现数据库的逻辑独立性)。
模式/内模式映像用于实现数据库的物理独立性。
对于一个数据库,模式和内模式(也称存储模式)只能有一个,其外模式可以有多个。
一个外模式可以用于多个应用,但一个应用只能使用一个外模式。
外模式是数据库的局部逻辑结构描述。
模式改变时,只需改变外模式/模式映像,即可使外模式不变。
内模式改变时,只需改变模式/内模式映像,即可使模式不变。
在数据库的逻辑结构设计中,实现外模式;在数据库的物理结构设计中,实现内模式。
外模式的作用:1、实现数据的安全性,每个用户只能看见自己对应外模式的数据;2、保证数据独立性。
Π运算符对应SELECT字句;σ运算符对于where子句。
构造一个合理的数据逻辑结构,需要由关系数据库规范化理论解决。
需求分析(数据流图、数据字典 | 自顶向下进行)->概念结构设计(概念模型、E-R图 | 自底向上进行)->逻辑结构设计(将E-R图转换为关系模型)->物理结构设计->数据库实施->数据库运行和完善。
对现实世界进行第一层抽象(最高级别的抽象)的模型称为概念模型。
对现实世界进行第二层抽象的模型称为逻辑模型。
需求分析与概念结构设计独立于数据库管理系统。
数据字典:是各类数据描述的集合,包括数据项、数据结构、数据流、数据存储、数据加工工程、处理过程等的描述。
概念结构设计有三种主要方法:自底向上(局部先行,最后集成全局结构)、自顶向下(全局框架先行,再细化局部)和逐步扩张(从基础框架出发,逐步扩展和完善)。
概念结构设计中数据抽象分为:分类([学生:小明 小李] is member of)、聚集([学生:学号 专业 姓名] is part of)、概括([学生:本科生 研究生] is subset of)。
数据库结构设计与数据库设计是并行的。
关系数据库物理设计的内容包括存储结构和存取方法的设计。
在进行数据库实施时,组织数据入库是最主要的工作。
在数据库的维护阶段,增加或删除某个表的工作称为重构造。
设计数据库模式结构时应先确定数据库的逻辑模式,再确定其物理模式。
关系数据库必须满足第一范式。
现实世界到机器世界的一个中间层次是概念模型。
构成E-R模型的三个基本要素是实体、属性和联系。
事务日志的用途为数据恢复。
X锁,也称排它锁,对某事务添加X锁后,不得添加其它锁。
S锁,也称共享锁,对某事务添加S锁后,可以添加S锁,但不可添加X锁。
模式锁不会阻止其它锁(包括排它锁和共享锁)的工作。
学生表与学生选课表共有学号这一属性,二表之间应满足参照完整性约束。
一个关系,只满足1NF,其可能存在的问题是:数据冗余度大、插入异常、修改异常、删除异常。
数据冗余可能产生的问题是潜在的数据不一致性。
并发控制的主要方法是封锁机制。
解决并发操作带来的数据不一致性问题普遍采用封锁。
BETWEEN 18 AND 20,包括上下限,即18<=X<=20。
任何一个关系模式一定有键。
非关系数据模型采用面向记录的操作方式,操作对象是一条记录;SQL采用集合操作方式。
层次模型表示两个记录以及它们之间的一对一、一对多联系。
网状模型的特点:允许结点没有双亲,允许结点有多个双亲。
一个M:N联系转换为关系模式时,该关系模式的码为:M端实体码与N端实体码的组合。
SQL的集合处理方式与宿主语言(JAVA、C)单记录的处理方式之间用游标进行协调,它使得程序能够逐条处理SQL查询返回的结果集。
游标包括游标结果集和游标位置。
某一对象在局部E-R图中作为实体,却在另一个局部E-R图中作为属性,这种现象称为结构冲突。
较低的范式(如第一范式),数据冗余较多,更新操作可能导致多处数据不一致,更新操作的代价较高。
但由于高范式要求将数据拆分成更多的表,在查询时需要更多的连接操作,查询的代价可能会增加。
关系模型和网状模型的数据结构分别为二维表和有向图。
关系模型用二维表表示实体与实体之间的联系。
关系数据语言可分为SQL语言、关系代数语言和关系演算语言。
事务是恢复和并发控制的基本单位,是数据库的逻辑工作单位。
表有三种:视图、基本表和临时表。
基于函数依赖讨论,则任何二元关系的最高范式一定是BCNF。
任何二元关系的最高范式一定是4NF。
若要求分解保持函数依赖,则模式分解一定可以达到3NF,最高可以达到BCNF。
若要求分解具有无损连接性,则模式分解一定可以达到4NF。
若要求分解既要保持函数依赖又要具有无损连接性,则模式分解一定可以达到3NF。
通过消除主属性对不包含它的候选码的部分和传递函数依赖,将3NF转变为BCNF。
通过消除非平凡非函数依赖的多值依赖,将BCNF转变为4NF。
数据库中存储的是数据及数据之间的联系。
导致数据不一致的根本原因是数据冗余。
视图对应三级模式结构中的外模式,外模式一级数据结构的基本单位是视图。
1NF包含2NF,2NF包含3NF,3NF包含BCNF,BCNF包含4NF。
如果一个关系模式∈BCNF,则它∈3NF。
违背事务的隔离性时,将导致事务A的数据被其他事务修改。
RDBMS:关系数据库管理系统。
数据独立性是指不会因数据存储结构与逻辑结构的变化而影响应用程序。
一段程序中可能包含多个事务,一个事务也可以包含多个程序。
应用数据库的主要目的是实现数据的共享。
数据库系统的故障分为:事务内部故障、系统故障、计算机病毒、介质故障。
数据恢复的基本原理:利用冗余数据重建数据库。
数据恢复(即建立冗余数据)中最常用的技术:数据转储(【转储方式】静态转储和动态转储、【转储状态】海量转储和增量转储)和建立日志文件。
恢复数据时应先写日志文件再写数据库的原因是:1、若先写日志文件,但没有写数据库,则按日志恢复使仅执行了不必要的UNDO操作,不影响数据的正确性;2、若先写数据库,但没有写日志文件,则按日志恢复时无法恢复该修改,影响数据的正确性。
事务故障恢复需要反向扫描日志文件+UNDO。
系统故障恢复需要正向扫描日志文件+反向扫描日志文件+UNDO+REDO。
介质故障恢复需要重新备份并恢复至一致性状态(使用数据库镜像技术)+REDO。
数据库镜像的作用是自动将整个数据库或其中的关键数据复制到另一个磁盘上,确保镜像数据与主数据库保持一致性。一旦发生介质故障,系统可以直接切换到镜像磁盘继续提供服务,无需关闭系统或重新加载数据库副本,从而降低故障恢复的成本。此外,在正常情况下,数据库镜像与主数据库可实现读写分离,提高系统的并发性能。
SQL Server中,系统数据库为:master、model、msdb。
SQL Server中主数据文件的拓展名为mdf,辅助数据文件的拓展名为ndf,日志文件的拓展名为ldf。
每当创建数据库时,model数据库的内容会被拷贝到新的数据库中作为模板。
一个数据库系统必须含有一个主数据文件,可以没有辅助数据文件。
事务日志文件最小为512K,不属于任何一个文件组;一个文件只能是一个文件组的成员。
一次只能对一张表进行更新查询,不得同时更新多张表,也不得对一张表同时进行追加、删除和更新等多种操作。
在执行一条多记录更新语句时,若违反某个约束,则所有语句,不论是否执行成功,都会被回滚。
每个数据库最多可创建一个簇索引和249个非簇索引。
一个索引页的大小为8KB。
SQL Server的每个表最多允许有1024列。
创建表时可以使用用户自定义类型。
如果表没有任何簇索引,数据不以特定顺序存储,这种结构叫做堆。
如果一个表中已经建立了主键约束,则不能再创建簇索引。
主键用于强制数据的实体完整性,其特征是:值唯一、值非空。
修改索引列的数据时,相关索引会被自动更新。
在索引页中,填充因子越小,空余空间越多,页面分割的可能性越大。
数据库系统的核心是数据库管理系统。
在三级模式中,用于描述数据库全体数据的全局逻辑结构和特征的是模式。
DIFFERENCE用于对两个字符串进行比较操作。
连接两个表时,公共列的名称可以不同。
数据表及其别名表,同属一个表,并不相互独立。
存储过程可以由用户调用,而触发器只能由SQL Server自动地激发。
BEFORE触发器在修改操作之前执行。
AFTER触发器在修改操作之后执行。
在一张表上,只能有一个BEFORE触发器,但可以有多个AFTER触发器
只有受到INSERT、UPDATE或DELETE数据操纵语句的影响时,触发器才被激发。
在执行UPDATE时,如果激发了触发器,数据库系统会创建一个deleted表来保存被修改前的数据,创建一个inserted表来保存更新后的数据。
事务管理确保了所有事务的原子性和一致性。
上锁是保持事务独立性的一种特性。
日志是确保事务持久性的一种特性。
主键可以是一个属性,也可以是多个属性的和。
在WHILE循环语句中,如果循环体语句条数多于一条,应使用BEGIN…AND语句。
触发器只能创建在表上。
SUM只能由于计算数值类型,而COUNT、MAX、MIN可用于日期、字符串等类型。
float可作为变量的数据类型。
SQL语言不能自动实现关系数据库的规范化。
存储过程是一组预先定义并编译的Transact-SQL语句
列值唯一的列(主键)、常被查询的列适合建立索引。
一个表只能创建一个聚集索引(及主键),但可以创建多个非聚集索引。
在SQL SERVER中全局变量前面的字符为@@,局部变量前面的字符为@
事务的执行次序称为调度。
静态列级约束定义列的取值范围或格式,例如号码必须是8位字符串。
动态列级约束需根据业务规则来制定,如订单完成时间必须小于等于当前时间。
插入异常:应被插入的数据未被插入。
删除异常:不应被删除的数据被删除。
更新异常:修改一个数据时修改了另一个数据。
数据库系统结构分为:单用户结构、主从式结构、分布式结构、客户/服务器结构、浏览器/应用服务器/数据库服务器多层结构。
INSERT语句中不可出现WHERE子句。
聚集函数不可出现在WHERE子句中。
聚集函数的返回值是一个标量值。
DISTINCT可以与聚集函数共用。
聚集函数遇到空值时,只有COUNT(*)会对空值进行处理。
NULL表示数值未知。
两个空值相比较的结果是未知,使用=运算符比较两个NULL会返回FALSE,即两个NULL值不相等。
数据库中的数据一般存放在磁盘中。
如果定义视图的FROM子句包括多张表,并且视图中的列来自多张表,则不能在视图用DML(UPDATE、DELETE)语句。
GROUP BY与ORDER BY子句没有任何联系,不强制同时使用。
删除表时,与该表相关的索引自动被删除。
INSERT命令,一次可以插入多行记录。
SQL Server 存储过程能够立即访问数据库。
比较索引查找法与表扫描法的查询速度时,应具体情况具体分析。
索引的创建与多种因素有关,最终提高查询效率。
数据库的容量可以设置为自动增长。
日期时间型数据类型的长度是8。
VARCHAR表示不定长字符数据,CHAR表示固定长字符数据。
%运算符常用于整数类型数据,例如smallint和int类型。
在不同DBMS中,NULL的显示次序不同。在MySQL中,NULL默认最小。
角色是权限的集合。
粒度越大(表),并发度越低,系统开销越低;粒度越小(列),并发度越大,系统开销越大。
具有意向锁的多粒度封锁方法的优点是:封锁的粒度越大,并发度越低,系统系统开销越低;封锁的粒度越小,并发度越大,系统开销越大。多粒度封锁方法同时考虑封锁开销与并发度,根据事务特点选取相应的粒度,从而提高系统并发度、减少封锁开销。
封锁对象的大小称为封锁的粒度,封锁对象可以是物理单元,也可以是逻辑单元。
存取控制分为自主存取控制(DAC | C2级别)和强制存取控制(MAC | B1级别)。
当前大型的DBMS一般都支持自主存取控制,有些DBMS还支持强制存取控制。
一个数据库可以有多个事务,一个事务可以有多个SQL语句。
候选码是能唯一标识元组的最小属性集。
操作的对象和结果都是集合。
关系代数运算的三个要素:运算对象(即关系)、运算符、运算结果(即关系)。
在R(U)中,如果X->Y(Y不属于X),X不函数依赖于Y,Y->Z(Z不属于Y),则称Z对X传递函数依赖。
定义存取权限称为授权,不允许循环授权。
用户权限由数据对象和操作类型组成。
不同的列可以出自同一个域,例如年龄列和个数列都出自整数域。
日志文件中每个日志记录的内容主要包括:事务标示;操作类型;操作对象;更新前数据的旧值;更新后数据的新值。
第四范式涉及多值依赖引起的问题。
第五范式涉及连接依赖引起的问题。
具有检查点的恢复技术解决了以下两个问题:
1.通过在特定时刻保存系统状态的检查点,恢复过程不再需要从日志的开始处逐一扫描,从而提高恢复效率。
2.恢复时只需从检查点之后的日志开始执行REDO操作,避免不必要的重复工作。
可更新的视图:视图来源于单张表、一般行列子集视图。
不可更新的视图:视图定义中有GROUP BY、聚集函数、DISTINCT、子查询等子句的视图。
在SQL Server中,为实现批处理文件的复制,应复制系统存储过程。
在关系数据模型中,表以文件形式存储。
优先级:WHERE>GROUP BY>HAVING>ORDER BY>LIMIT
AND的优先级大于OR。
事务管理分为恢复技术(实现原子性、持久性)和并发控制技术(实现隔离性)。
备份数据时,WITH INIT子句表示在备份时覆盖设备中的任何现有备份数据。
多版本并发控制的缩写:MVCC。
应注意的介词:GRANT TO,REVOKE FROM。
子查询应位于比较符的右侧,例如:SELECT ID FROM A WHERE NO = (SELECT UID FROM B);
E-R图向关系模型转化的问题之一是确定关系模式的属性和码。
对关系模式进行分解,能够提高数据操作的效率和空间利用率,常见的两种方法是水平分解和垂直分解。
水平分解是数据库中一种优化技术,它将关系(表)中的元组按照某种规则分成多个子集合,每个子集合成为一个子关系。若经常使用的数据只是关系的一部分,或多数事务存取的数据不相交,可以通过水平分解提高系统效率。
垂直分解是数据库优化技术的一种,与水平分解相对,垂直分解将一个关系的属性分为若干个子集,每个子集形成一个子关系。这种方法将表按照列进行拆分,通常用于优化存储和访问效率,例如频繁访问部分列的数据时。
将概念模型转换为全局逻辑模型后,还需根据局部应用需求,设计外模式(或视图)。
实体与实体间的联系也是一种实体型,可以有属性。
笛卡尔积不满足交换律,如(a,b)与(b,a)是不同的。
关系满足交换律,如(a,b)与(b,a)是相同的。
单元关系:{(1),(2)}
二元关系:{(1,2)}
实现数据库系统安全性的方法有存取控制技术和审计技术。
关系中的元组没有先后顺序的原因:
关系被定义为元组的集合,而集合中的元素是无序的。因此,关系中的元组也没有固定的顺序。这一特性不仅减少了逻辑排序的复杂性,还使得关系数据库能够更好地借用集合论的理论基础。
若存在非主属性对候选码的部分函数依赖,则达不到2NF。
若存在非主属性对候选码的传递函数依赖,则达不到3NF。
若函数依赖的左边不是候选码,则达不到BCNF。
若存在非平凡且非函数依赖的多值依赖,则达不到4NF。
多值依赖主要影响的是4NF的定义,与1NF、2NF、3NF和BCNF无关。
例如R=(A,B,C),D={AB→C,C→→A},判断R的范式时不必考虑多值依赖C→→A,因此R∈BCNF。
4NF的要求:对于多值依赖 X→→Y,X 必须是超键。
超键的定义为:所有包含候选码的属性集合。例如A是候选码,则AB、AC、ADEF都是超键。
存取方法:索引法(主要是B+树索引)、聚簇法、HASH法。
索引一般由内模式实现。
聚簇是一种将相邻记录存储在同一个物理块中的技术,它能够提高查询效率并节省物理空间。当SQL语句中包含与聚簇码相关的ORDER BY、GROUP BY、UNION等子句或短语时,使用聚簇尤其有利,因为这样可以省去对结果集进行排序的操作。
聚簇码不属于数据字典。
事务处理技术主要包括数据库恢复技术和并发控制技术(封锁、时间戳、乐观控制法)。
二级封锁协议可以防止丢失修改和读脏数据。
两段锁协议(2PL)指所有事务必须分两个阶段对数据项加锁和解锁,第一阶段是获得封锁,也称为扩展阶段;第二阶段是释放封锁,也称为收缩阶段。
以下事务遵守两段锁协议:
SLOCK A SLOCK B <-拓展阶段 收缩阶段-> UnLOCK A UnLOCK B
但以下事务不遵守两段锁协议:
SLOCK A <-拓展阶段 收缩阶段-> UnLOCK A <-收缩阶段 扩展阶段-> SLOCK B <-拓展阶段 收缩阶段-> UnLOCK B
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,这种调度策略称为可串行化的调度。
两段锁协议可实现并发操作调度的可串行性和正确性。
两段锁协议->可串行化调度;一次封锁法遵循两段锁协议。
两段锁协议可能导致死锁问题。
冲突可串行化调度->可串行化调度
冲突可串行化调度->视图可串行化调度
通过优先图可以实现可串行化调度。
将所有事务串行起来的调度策略一定是正确的调度策略。
为了防止死锁,基于时间戳的协议可能会导致短事务的频繁执行和长事务的饿死。
在三级粒度树中,根节点为数据库,根节点的子节点为关系,关系的子节点为元组。
数据库建设的基本规律:三分技术,七分管理,十二分基础数据。
关系模式的规范化:一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合。
一个关系模式的最小函数依赖集不是唯一的。
若X->Y,而Y不属于X,则称X->Y是非平凡的函数依赖。
若X->Y,而Y属于X,则称X->Y是平凡的函数依赖。
相关子查询是指子查询的执行依赖于父查询的每一行数据。例如:
# 找出分数高于班级平均分的学生
SELECT S.Name
FROM Students S
WHERE S.Score > (SELECT AVG(S2.Score)FROM Students S2
);
A->B,称作A蕴涵B。
假设TEACHER表(有1000行)上创建一个触发器,执行如下语句:
UPDATE TEACHER SET Deptno=5;
若该触发器是语句级触发器,那么执行完该语句后,触发动作只发生一次。
若该触发器是行级触发器,触发动作将执行1000次。
在MAC机制中,访问决策基于主体的许可证级别和客体的密级之间的关系。
主体的许可证级别>客体的密级时,可读;主体的许可证级别<客体的密级时,可写。
对DB中数据的操作分为两大类:查询和更新。
软件开发中涉及的数据库技术:1、数据库建模技术;2、数据库管理技术;3、数据完整性与约束;4、索引与查询优化;5、存储过程与触发器;6、事务管理;7、安全与权限管理;8、数据备份与恢复;9、并发控制。
[]用于匹配任意一个字符,如[A]%表示以A开头的字符串。
[]表示不匹配任何一个字符,如%[A]表示最后一位不是A的字符串。
在一个SELECT语句中,只允许一个DISTINCT存在。
若BC->ABC,则左部为BC的函数依赖有八个。
活锁是指某事务在申请锁时,系统调度持续将锁分配给比该事务更晚的其他事务,导致该事务始终处于等待状态,无法获得锁资源。
解决活锁的简单方法是采用先来先服务策略。
事务以BEGIN TRANSACTION语句开始,以COMMIT或ROLLBACK语句结束。
两个函数依赖集F和G等价的充分必要条件是F的闭包等于G的闭包。
每次只转储上一次转储后更新过的数据的方式叫增量转储。
连接查询是最主要最耗时的查询,分为内连接(等值连接、自然连接、自连接)与外连接。
外连接与内连接的区别:内连接操作只输出满足连接条件的元组;外连接操作将主体表中不满足连接条件的元组一并输出。
SELECT TOP 5 ID FROM A 输出A表的前五个记录(根据ID)
SELECT TOP 5 PERCENT ID FROM A 输出A表的前5%个记录(根据ID)
创建索引的语法:CREATE INDEX indexname(索引名称) ON_name(表名) (columnname [ASC|DESC]);
创建降序索引:CREATE INDEX indexname ON A(ID DESC);
常见的关系型数据库:Oracle、Sybase、DB2、SQL Server。
属性的取值范围称为域。
外连接是一种关系数据库查询操作,用于返回两个表中匹配的记录以及其中一个表中不匹配的记录。根据包含不匹配记录的表,可分为左外连接(保留左表所有记录)、右外连接(保留右表所有记录)和全外连接(保留两个表中所有记录)。外连接通过填充空值(NULL)来表示未匹配的记录内容。
对表A的查询操作启用审计:AUDIT SELECT ON A;
BCNF要求:对于每个X->Y函数依赖,X都必须为候选码。
未来的数据库管理系统将朝着高性能、高扩展性、多功能性方向发展。分布式架构、多模处理、云原生、实时流处理将成为基础;AI 驱动的自动化和隐私保护技术将进一步提高数据库的智能化和安全性。数据库系统将继续演化,满足不断增长的多样化大数据管理需求,并为新兴技术(如物联网、量子计算)提供更广泛的支持。
例如:1、基于 AI 的自适应索引、缓存管理和资源分配工具正在普及;2、数据库系统通过 AI 提前检测性能瓶颈和潜在故障,提高系统可靠性;3、云原生数据库将更加依赖容器化和微服务架构,提高易用性和部署效率;4、流数据库如Kafka支持对实时流数据的高效查询和分析;5、数据库将支持混合查询方式,实现跨模型的数据操作;6、多模数据库支持多种数据模型的存储和查询;6、数据库将支持算法优化分片策略,动态调整数据分布。
在 SQL 中,NOT IN 通常对应于 <> ALL。
文件系统中的数据独立性是指设备独立性。
就信息处理的方式而言,在文件系统阶段,程序设计处于主导地位,数据起着服从程序设计需要的作用;而在数据库方式下,数据占据了中心位置。
数据库技术是在OS的文件系统的基础上发展起来的。
在DBS中,逻辑数据与物理数据之间差别很大,数据库管理系统的功能是在这两者之间进行转换。
层次模型的数据结构是树结构;网状模型的数据结构是有向图结构;关系模型的数据结构是二维表结构;面向对象的数据结构之间可以嵌套和递归。
在层次、网状模型中,用指针导航数据;而在关系模型中,用关键码(主键与外键)导航数据。
数据库的三级结构是对数据的3个抽象级别。
在数据库技术中,编写应用程序的语言是高级语言,这些语言被称为宿主语言。
层次模型、网状模型的DML语言属于过程性语言,而关系模型的DML语言属于非过程性语言。
在DBS中,DB在磁盘上的基本组织形式是文件。
DBS中单一逻辑工作单元的操作集合,称为事务。
并发事务发生死锁,属于事务故障;在DBS运行时,断电属于系统故障。
封锁能避免错误的发生,但会引起活锁、饿死和死锁问题。
S锁增加了并发度,但缺点是容易发生死锁。
判断一个并发调度是否正确,可以用可串行化概念来解决。
数据依赖主要有函数依赖和多值依赖。
对表添加约束:
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (condition);
设有关系模式 R(A,B,C,D),F 是 R 上成立的 FD 集,F = { AB→C,D→B },则 F 在模式 ACD 上的投影为?F 在模式 AC 上的投影为?
解:由于 D->B,因此 AB->C 可化为 AD->C,故 F 在模式 ACD 上的投影为 AD->C;由于 F 在模式 AC 上没有函数依赖,因此投影为空集。
设计子模式属于数据库设计的逻辑结构设计。
数据管理技术的发展,与硬件、软件和应用需求有密切的联系。
数据独立性是指应用程序与数据库的数据结构之间相互独立。
数据库中的两级独立性:
在物理结构改变时,尽量不影响应用程序,称为物理数据独立性。
在逻辑结构改变时,尽量不影响应用程序,称为逻辑数据独立性。
在DBS中,DBMS和OS之间的关系是DBMS调用OS。
在数据库技术中,未提交的随后被撤销了的数据通常称为脏数据。
“为哪些表,在哪些字段上,建立什么样的索引”这一设计内容应该属于数据库设计中的物理结构设计阶段。