数据库系统
数据库基本概念#
概念#
- 数据:是数据库中存储的基本对象,是描述事物的符号记录。
- 数据的种类:文本、图形、图像、音频、视频
- 数据库(DB):是长期存储在计算机内、有组织的、可共享的大量数据的集合。
数据库的基本特征#
- 数据按一定的数据模型组织、描述和存储
- 可为各种用户共享
- 冗余度较小
- 数据独立性较高
- 易扩张
数据库系统(DBS)#
采用了数据库技术,有组织地、动态地存储大量相关数据,方便多用户访问的计算机系统。由四个部分组成
- 数据库:统一管理、长期存储在计算机内的,有组织的相关数据的集合
- 硬件:构成计算机系统包括存储数据所需的外部设备
- 软件:操作系统、数据库管理系统及应用程序
- 人员:系统分析和数据库设计人员、应用程序员、最终用户、数据库管理员
数据库管理系统(DBMS)的功能#
实现对共享数据有效的组织、管理和存取
包括数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立和维护等。
三级模式-两级映像#
- 内模式:管理如何存储物理的数据,对应具体物理存储文件。
- 模式:又称为概念模式,就是我们通常使用的基本表,根据应用、需求将物理数据划分成一张张表。
- 外模式:对应数据库中的视图这个级别,将表进行一定的处理后再提供给用户使用
- 外模式一模式映像:是表和视图之间的映射,存在于概念级和外部级之间,若表中数据发生了修改,只需要修改此映射,而无需修改应用程序。
- 模式一内模式映像:是表和数据的物理存储之间的映射,存在于概念级和内部级之间,若修改了数据存储方式,只需要修改此映射,而不需要去修改应用程序。
数据库设计#
记住每个步骤的顺序,每个步骤的产出,每个步骤的内容
- 需求分析:分析数据存储要求,产出数据流图,需求说明书,数据字典。获得用户对系统三个要求:信息要求,处理要求,系统要求。
- 概念结构设计:设计概念结构图,一般为E-R图(实体-联系图)。产出E-R图。工作步骤:选择局部应用,逐一设计分E-R图,E-R图合并。就是一张一张表去设计最后合并。所以这里合并存在表与表之间的冲突。冲突有3类
- 属性冲突:同一属性在不同E-R图中出现。
- 命名冲突:相同意义的属性在不同表有不同命名,或者命名相同的属性在不同表有不同意义。
- 结构冲突:同一实体在不同的分E-R图有不同属性,同一对象在某一分E-R图中被抽象为实体而在另一分E-R图中又被抽象为属性。
- 逻辑结构设计:将E-R图,转换成逻辑结构模型(一般为关系模型)。产出逻辑结构模型(一般关系模型)。工作步骤包括:确定数据模型、将E-R图转换为指定的逻辑结构模型、确定完整性约束和确定用户视图。
- 物理设计:步骤包括确定数据分布,存储结构和访问方式。
- 数据库实施阶段:根据逻辑设计和物理设计阶段的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
- 数据库运行和维护阶段:数据库应用系统经过试运行即可投入运行,但该阶段需要不断地对系统进行评价、调整与修改。
注:一般下面的步骤需要依赖上面所有步骤
真题#
在数据库逻辑结构设计阶段,需要()阶段形成的()作为设计依据。
A.需求分析 B.概念结构设计 C.物理结构设计 D.数据库运行和维护
A.程序文档、数据字典和数据流图。
B.需求说明文档、程序文档和数据流图
C.需求说明文档、数据字典和数据流图
D.需求说明文档、数据字典和程序文档
答案:A C
数据模型#
关系模型:是二维表的形式表示的实体-联系模型,是将实体-联系(E-R)模型转换而来,经过开发人员设计的。
概念模型:从用户的角度进行建模的,是现实世界到信息世界的第一抽象。是真正的实体-联系模型。
网状模型:实体类型及其实体之间的联系,一个事物和另外几个都有联系,形成一张网。
面向对象模型:采用面向对象的方法设计数据库,以对象为单位,每个对象包括属性和方法,具有类和继承的特点。
数据模型三要素#
- 数据结构:所研究的对象类型的集合。
- 数据操作:对数据库中各种对象的实例允许执行的操作的集合(增删改查)。
- 数据的约束条件:一组完整性规则的集合(约束输入数据比如人的年龄800岁不可能之类的)。
E-R图#
E-R图是用来描述概念数据模型,世界是由一组称作实体的基本对象和这些对象之间的联系构成的。
- 椭圆:实体的属性(实体和联系都可以有属性,比如配送联系可以有配送员属性)
- 长方形:实体(人,物,系统)(方框里有竖线的是弱实体)
- 菱形:联系
联系的两端都要填写联系类型。
- 实体:客观存在并可相互区别的事物。人、事、物或抽象概念。如:人、汽车、图书、账户、贷款。
- 弱实体和强实体:弱实体依赖于强实体,强实体的强字可以省略,弱不行。如:人员是强实体,部门经理是弱实体,部门经理依赖人员。
- 实体集:具有相同类型和共享相同属性的实体的集合,如学生、课程
- 属性:实体所具有的特性。
- 属性分类:简单属性和复合属性(简单:一个值。复合:由简单组成。如:省份是简单属性,省份、城市等组成一个复合属性地址);单值属性和多值属性(单值:一个人你年龄只有一个。多值:电话号码,一个人有多个电话号码);NULL属性(可以为空Null的属性);派生属性(计算出来的属性,如:给出了出生年月日,可以计算年龄)
- 域:属性的取值范围称为该属性的域
- 码:唯一标识,就是键。
- 联系:现实世界中事物内部以及事物之间的联系,在E-R图中反映为实体内部的联系和实体之间的联系。
- 联系类型:一对一、一对多(多对一)、多对多。
实体型联系图#
- 课程和教师的关系是1:n,一个课程可以由多个老师来讲授,一个老师只能教授一个课程。课程和参考书的关系是1:n,一个课程可以有多个参考书,一本参考书只能讲授一个课程。
- 供应商和项目的关系是m:n,一个供应商可以供应多个项目,一个项目可以由多个供应商供应。供应商和零件的关系是m:n,一个供应商可以供应多种的零件,一种零件可能由多个供应商供应。
关系模型#
关系模型中数据的逻辑结构是一张二维表,由行列组成。其中行是记录具体信息,所以也称为水平记录、元组。列是实体的属性。用表格结构表达实体集,就是一个表就是一个实体集。用外键标识实体间的联系。
- 优点:建立在严格的数学概念基础上;概念单一、结构简单、清晰、用户易懂易用;存取路径对用户透明,从而数据独立性、安全性好、简化数据库开发工作。
- 缺点:由于存取路径透明,查询效率往往不如非关系数据模型。
E-R转换关系模型#
- 每个实体都对应一个关系模式,每个强实体就是一个表(弱实体不是,弱实体可以作为强实体的属性。强实体才是)。
- 联系是否需要生成一个关系模式(表),需要看情况分为三种
-
- 1:1联系中,联系可以放到任意的两端实体中,作为一个属性(要保证1:1的两端关联),也可以转换为一个单独的关系模式。
- 1:N联系中,联系可以单独作为一个关系模式,也可以在N端加入1端的主键(如:实体员工和实体部门,员工有属性工号,姓名,主键工号。部门有属性部门编号,部门名称,主键是部门编号。员工和部门关系就是1:N,部门是1,员工是N。就把部门的主键,部门编号加入员工的属性里。)
- M:N联系中,联系必须作为一个单独的关系模式,其主键是M和N的联合主键
真题#
1、某本科高校新建教务管理系统,支撑各学院正常的教学教务管理工作。经过初步分析,系统中包含的实体有学院、教师、学生、课程等。考虑需要将本科学生的考试成绩及时通报给学生家长,新增家长实体;考虑到夜大、网络教育学生管理方式的不同,需要额外的管理数据,新增进修学生实体:规定一个学生可以选择多门课程,每门课程可以被多名学生选修;一个教师可以教授多门课程,一门课程只能被一名教师讲授。()实体之间为多对多联系,()属于弱实体对强实体的依赖联系。
A、学生、学院 B、教师、学院 C、学生、课程 D、教师、课程
A、家长、学生 B、学生、教师 C、学生、学院 D、教师、学院
答案:C A
解析:一个学生可以选择多门课程,每门课程可以被多名学生选修,因此学生和课程是多对多。弱实体依赖于强实体的存在而存在,只有学生存在,其家长信息才会存在,否则单独的家长信息无意义。
2、54-56.部门、员工和项目的关系模式及它们之间的E-R图如下所示,其中关系模式中带实下划线的属性表示主键属性。图中:部门 (部门代码,部门名称,电话)员工(员工代码,姓名,部门代码,联系方式,薪资)项目(项目编号,项目名称,承担任务)
若部门和员工关系进行自然连接运算,其结果为(54)元关系。由于员工和项目之间的联系类型为(55),所以员工和项目之间的联系需要转换成一个独立的关系模式,该关系模式的主键是(56)。
(54)A.5 B.6 C.7 D.8
(55)A.1对1 B.1对多张 C.多对1 D.多对多
(56)A.(项目名称,员工代码) B.(项目编号,员工代码) C.(项目名称,部门代码) D.(项目名称,承担任务)
答案:C D B
关系代数#
- 并:结果是两张表中所有记录合并,相同记录只显示一次。
- 交:结果是两张表相同的记录。
- 差:S1-S2,结果是S1表中有S2表也有的不显示,S2没有的显示。
- 笛卡尔积:S1×S2,产生的结果包括S1和S2所有的属性列,并且S1中每个数据依次和S2中的记录组成一条记录,最终属性列为S1+S2,记录为S1*S2记录数
- 投影:实际是按条件选择某关系模式中的某列,列也可以用数字表示。(select)
- 选择:实际是按条件选择某关系模式中的某条记录行,条件也可以用数字表示。(where)
- 自然连接:显示全部的属性列,相同的属性列只显示一次,记录就显示属性相同的记录。
真题#
答案:B D
解析:对R与S做自然联接运算时,联接条件为:R.C=S.CandR.D=S.D。运算结果会自动去重复列,所以结果的列为:A、B、C、D、E,一共5列。
规范化和并发#
函数依赖#
给定一个X,能唯一确定一个Y,就称X确定Y,或者说Y依赖于X。(但Y不能确定X,如Y=X2,X可以决定Y,但±X不确定,所以Y不能确定X)
扩展规则#
- 部分函数依赖:A可以确定C,(A,B)也可以确定C,(A,B)中的A可以确定C,称为部分函数依赖。
- 传递函数依赖:当A和B不等价时,即A不能等于B,A可以确定B,B可以确定C,那可以认为A可确定C。若A和B等价就没有必要了,直接确定C,不存在传递。
公理系统#
设关系模式R<U,F>,U是关系模式R的属性全集,F是关系模式R的一个函数依赖集。对于R<U,F>来说有以下的:
- 自反律:若Y⊆X⊆U,则X→Y为F所逻辑蕴含
- 增广律:若X→Y为F所逻辑蕴含,且Z⊆U,则XZ→YZ为F所逻辑蕴含
- 传递律:若X→Y和Y→Z为F所逻辑蕴含,则X→Z为F所逻辑蕴含
- 合并规则:若X→Y,X→Z,则X→YZ为F所蕴涵
- 伪传递率:若X→Y,WY→Z,则xW→Z为F所蕴涵
- 分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴涵
补充:#
- 属于(E):对于一个元素是否属于某个集合,我们使用符号"∈"来表示。例如,如果元素a属于集合A,我们可以写作aEA。这表示元素a在集合A中。
- 包含(⊆):对于集合与集合之间的包含关系,我们使用符号"⊆"来表示。例如,如果集合B包含于集合A,我们可以写作BCA。这表示集合B的所有元素都是集合A的元素,或者说集合B是集合A的子集。
键与约束#
键#
- 超键:能唯一标识此表的属性的组合。(如:学生表有学号,姓名,年龄。学号是超键,学号加姓名也是超键,学号加姓名加年龄也是超键)
- 候选键:超键中去掉冗余属性,剩余的属性就是候选键。(如:学生表有学号,身份证,姓名,年龄。候选键就是学号和身份证)
- 主键:任选一个候选键,即可视为主键。(如:学生表有学号,身份证,姓名,年龄。候选键就是学号和身份证,主键就是选其中之一)
- 外键:就是其他表的主键。
- 主属性:候选键内的属性为主属性,其他属于非主属性。(如:学生表有学号,身份证,姓名,年龄。主属性就是学号和身份证,非主属性就是姓名,年龄)
约束#
- 实体完整性约束:即主键约束,主键值不能为空,不能重复。
- 参照完整性约束:即外键约束,外键可以为空,必须是其他表的主键。
- 用户自定义完整性约束:自定义约束。用户设定,如:设定年龄不能大于200岁。
范式#
- 第一范式:关系中每一个分量必须是一个不可分的数据项。就是表里不允许有小表。下图就不属于第一范式!
- 第二范式:如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于第二范式。就是说在满足第一范式的基础上,不存在部分依赖就是第二范式。就是非主属性不依赖候选码中的某个。下图中就不属于第二范式,它们依赖关系学号→学生姓名,学号→系编号,系编号→所在系,系编号→班主任,(学生号,课程号)→成绩。根据关系得出候选键是学生号和课程号,而学生姓名这些就是学生号可以决定的,所以存在部分依赖。为满足第二范式,可把表格转换为2个表格,如下图。第一个张表候选键是学号,第二张表候选键是学号和课程号,两张表都不存在部分依赖。
- 第三范式:满足第一范式在第二范式的基础上,表中不存在非主属性对候选码的传递依赖。即满足第二范式后去除传递依赖。用回第二范式的例子,我们先把部分函数去除变成2个表格。发现第一个表格,学生号→学生姓名,学生号→系编号,系编号→所在系,系编号→系主任。这里学生号→系编号存在传递依赖继而我们继续分解表格获得下图3个表。
- BC范式即BCNF,是在第三范式基础上消除主属性对主键的部分依赖和传递依赖。通俗说就是左边每一个因素都包含候选键。如下图,我们可知(S,J)→T,T→J,候选码就是(S,T)或(S,J)。所以这里没有非主属性,满足3NF。当主键是(S,T)时,求出J是T→J和(S,J)→T,左侧包含候选键T和S,所以满足BCNF,但当主键是(S,J)时求出J是T→J和(S,J)→T,左侧包含候选键T不在候选键S,J里所以不满足BCNF,这时候需要优化把T→J,变成(T,S)→J即可
补充:如果不存在非主属性即满足3NF,因为3NF和前面的NF都是为了消除非主属性的依赖。如果没有非主属性就相当于不用消除就自动满足到3NF了。
真题#
1、给定关系模式R(U,F),U={A,B,C,D},F={AB→C,CD→B}。关系R(),且分别有()。
A.只有1个候选关键字ACB B.只有1个候选关键字BCD C.有2个候选关键字ACD和ABD D.有2个候选关键字ACB和BCD
A.0个非主属性和4个主属性 B.1个非主属性和3个主属性 C.2个非主属性和2个主属性 D.3个非主属性和1个主属性
候选关键字的求法:根据依赖集,找出从未在右边出现过的属性,必然是候选键之一,以该属性为基础,根据依赖集依次扩展,看能否遍历所有属性,将无法遍历的加入候选键中。
答案:C A
2、设有关系模式R(E,N,M,L,Q),其函数依赖集为F={E→N,EM→Q,M→L}。则关系模式R达到了_;该关系模式
A. 1NF B.2NF C. 3NF D.BCNF
A.无需进行分解,因为已经达到了3NF
B.无需进行分解,因为已经达到了BCNF
C.尽管不存在部分函数依赖,但还存在传递依赖,所以需要进行分解
D.需要进行分解,因为存在余、修改操作的不一致性、插入和删除异常
答案:A D
模式分解#
范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖何传递依赖的属性分离出来,来达到一步步优化。一般分为以下两种:保持函数依赖分解和无损分解。
保持函数依赖分解#
对于关系模式R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉冗余依赖(如传递依赖)。
如何判断分解后是否保持函数依赖呢?这里有2点,其中第1点是充分条件,满足的就肯定保持函数依赖。但不满足的部分需要用第2点来验证。考试中一般不满足部分也不满足第2点,所以只需掌握第1点即可,但实际中需要进行第2点补充。
- 如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的。其实就是看分解后的表是否还存在原来的依赖关系。
- 如果上述判断有不存在的,就需要使用该方法验证。该法较为复杂,需要执行下列过程来判断,其中α是第1点不满足的依赖的左侧,如果运行过程中中途退出了就是那个R不满足,也就不满足保持函数依赖分解
无损分解#
分解后的关系模式能还原出原关系模式,就是无损分解。
- 当分解的表只有两个时,可以使用定理快速判断是否无损。R1∩R2→R1-R2或者R1∩R2→R2-R1
- 如果分解表多于两个时,需要使用表格法求解。(考试一般不会多于2个表)。
-
- 根据分解表列出初始表,然后把各个表存在的属性,存在打勾不存在打叉填入表格
- 根据依赖关系,逐个表把打叉的属性看看是否能推导出来,能推导的改成打勾。只要有一个表全是勾就是无损,如果所有表都没有全部勾那就是有损。
真题#
1、给定关系模式R<U,F>,U={A,B,C,D,E},F={B→A,D→A,A→E,AC→B},则R 的候选关键字为(),分解p={R1(ABCE),R2(CD)}()。
A.CD B.ABD C.ACD D.ADE
A.具有无损连接性,且保持函数依赖
B.不具有无损连接性,但保持函数依赖
C.具有无损连接性,但不保持函数依赖
D.不具有无损连接性,也不保持函数依赖
答案:A D
并发控制#
事务#
由一系列操作组成,这些操作,要么全做,要么全不做。
四种特性
- 原子性:要么全做,要么全不做
- 一致性:事务发生后数据是一致的,例如提交后的数据情况和你前面的操作一致的
- 隔离性:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间隔离的,互不干涉。(根据事务的隔离性级别并发的时候还是有干扰)
- 持续性:事务操作的结果是持续的。
事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率。
存在三个问题
- 丢失更新:事务1对数据A进行了修改并写回,事务2也对A进行了修改并写回,此时事务2写回的数据会覆盖事务1写回的数据,就丢失了事务1对A的更新。即对数据A的更新会被覆盖。
- 不可重复读:事务2读A,而后事务1对数据A进行了修改并写回,此时若事务2再读A,发现数据不对。即一个事务重复读A两次,会发现数据A有误。
- 读脏数据:事务1对数据A进行了修改后,事务2读数据A,而后事务1回滚,数据A恢复了原来的值,那么事务2对数据A做的事是无效的,读到了脏数据。
封锁协议#
- X锁是排它锁(写锁)。若事务T对数据对象A加上X锁,则只允许T读取和修改其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
- S锁是共享锁(读锁)。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁(也即能读不能修改),直到T释放A上的S锁。
注:如果操作有写就加写锁,如果操作只有读就加读锁
如上面3个问题分别可以这样加锁避免
真题#
1、“当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的”,这一性质通常被称为事务的()。
A.原子性 B.一致性 C.隔离性 D.持久性
答案:C
2、若事务T1对数据D1加了共享锁,事务T2、T3分别对数据D2、D3加了排它锁,则事务T1对数据();事务T2对数据()
A.D2、D3加排它锁都成功 B.D2、D3加共享锁都成功 C.D2加共享锁成功,D3加排它锁失败 D.D2、D3加排它锁和共享锁都失败
A.D1、D3加共享锁都失败 B.D1、D3加共享锁都成功 C.D1加共享锁成功,D3如排它锁失败 D.D1加排它锁成功,D3加共享锁失败
答案:D C
数据库新技术#
数据库安全#
- 静态转储:即冷备份,指在转储期间不允许对数据库进行任何存取、修改操作;优点是非常快速的备份方法、容易归档(直接物理复制操作);缺点是只能提供到某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
- 动态转储:即热备份,在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行;优点是可在表空间或数据库文件级备份,数据库扔可使用,可达到秒级恢复;缺点是不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。
- 完全备份:备份所有数据。
- 差量备份:仅备份上一次完全备份之后变化的数据。
- 增量备份:备份上一次备份之后变化的数据。
注:如果前一天有进行增量备份或者差量备份的话,差量备份也不会以此为基础,也会往前找直接找到完全备份为止。而增量备份则只找到上一次备份就以此为基础了。
- 日志文件:在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
分布式数据库#
局部数据库位于不同的物理位置,使用一个全局DBMS将所有局部数据库联网管理,这就是分布式数据库。
分片模式#
- 水平分片:将表中水平的记录分别存放在不同的地方。
- 垂直分片:将表中的垂直的列值分别存放在不同的地方。
分布透明性#
- 分片透明性:用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。
- 位置透明性:应用程序不关心数据存储物理位置的改变
- 逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据模型
- 复制透明性:用户或应用程序不关心复制的数据从何而来
数据仓库技术#
数据仓库是一个面向主题的、集成的、非易失的、且随时间变化的数据集合,用于支持管理决策。
- 面向主题:按照一定的主题域进行组织的。
- 集成的:数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
- 相对稳定的:数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
- 反映历史变化:数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
数据仓库的结构通常包含四个层次,如下图所示:
- 数据源:是数据仓库系统的基础,是整个系统的数据源泉。
- 数据的存储与管理:是整个数据仓库系统的核心。
- 0LAP(联机分析处理)服务器:对分析需要的数据进行有效集成,按多维模型组织,以便进行多角度、多层次的分析,并发现趋势。
- 前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。
商业智能#
BI系统主要包括数据预处理、建立数据仓库、数据分析和数据展现四个主要阶段。(和数据仓库结构是类似的)
- 数据预处理:是整合企业原始数据的第一步,它包括数据的抽取(Extraction)、转换(Transformation)和加载(Load)三个过程(ETL过程);
- 建立数据仓库:则是处理海量数据的基础;
- 数据分析:是体现系统智能的关键,一般采用联机分析处理(OLAP)和数据挖掘两大技术。联机分析处理不仅进行数据汇总/聚集,同时还提供切片、切块、下钻、上卷和旋转等数据分析功能,用户可以方便地对海量数据进行多维分析。数据挖掘的目标则是挖掘数据背后隐藏的知识,通过关联分析、聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题;
- 在海量数据和分析手段增多的情况下,数据展现则主要保障系统分析结果的可视化。
反规范化技术#
范化设计后,数据库设计者希望牺牲部分规范化来提高性能。
采用反规范化技术的益处#
降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,能够提高查询效率。
可能带来的问题#
数据的重复存储,浪费了磁盘空间;可能出现数据的完整性问题,为了保障数据的一致性,增加了数据维护的复杂性,会降低修改速度。
具体方法#
- 增加余列:在多个表中保留相同的列,通过增加数据余减少或避免查询时的连接操作。
- 增加派生列:在表中增加可以由本表或其它表中数据计算生成的列,,减少查询时的连接操作并避免计算或使用集合函数。
- 重新组表:如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
- 水平分割表:根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
- 垂直分割表:对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少1/0次数。
大数据#
处理大数据,一般使用集群平台,称为大数据处理系统
特点#
大量化、多样化、价值密度低、快速化。
特征#
高度可扩展性、高性能、高度容错、支持异构环境、较短的分析延迟、易用且开放的接口、较低成本、向下兼容性。
数据和传统数据的比较#
真题#
1、为了保证数据库中数据的安全可靠和正确有效,系统在进行事务处理时,对数据的插入、删除或修改的全部有关内容先写入();当系统正常运行时,按一定的时间间隔,把数据库缓冲区内容写入();当发生故障时,根据现场数据内容及相关文件来恢复系统的状态。
A.索引文件 B.数据文件 c.日志文件 D.数据字典
A.索引文件 B.数据文件 C.日志文件 D.数据字典
答案:C B
解析:在数据库中引入了日志文件,记录系统进行事务处理时的一切操作,但只记录操作内容,数据是存放在数据文件中,恢复现场时,依据日志文件可知有哪些操作,依据数据文件可知操作的数据是哪些。
2、数据仓库中数据()的特点是指数据一旦进入数据仓库后,将被长期保留并定期加载和刷新,可以进行各种查询操作,但很少对数据进行修改和删除操作。
A.面向主题 B.集成性 C.相对稳定性 D.反映历史变化
答案:C
SQL语言#
SQL语言中的语法关键字,不区分大小写:
- 创建表createtable;
- 指定主键primarykey();
- 指定外键foreignkey();
- 修改表altertable;
- 索引index,视图view
CREATE TABLES(SnoCHAR(5)NOT NULL UNIQUE,SnameCHAR(30)UNIQUE,StatusCHAR(8),City CHAR(20)PRIMARYKEY(Sno));
ALTER TABLE S ADD Zap CHAR(6);
DROP TABLE Student;
CREATE UNIQUE INDEXS-SNO ON S(Sno);
CREATE VIEW CS-STUDENT;
- 数据库查询:select...from...where;
- 分组查询groupby,分组时要注意select后的列名要适应分组,having为分组查询附加条件:select sno,avg(score)from studentgroupby snohaving(avg(score)>60)
- 更名运算as:select sno as“学号”fromt1
- 字符串匹配like,%匹配多个字符串,_匹配任意一个字符串:select * fromt 1 where sname like'a_'
- 数据库插入:insert into...values()
- 数据库删除:delete from...where
- 数据库修改:update...set...where
- 排序orderby,默认为升序,降序要加关键字DESC:select * fromt 1 order by sno desc
- ISTINCT:过滤重复的选项,只保留一条记录。
- UNION:出现在两个SQL语句之间,将两个SQL语句的查询结果取或运算,即值存在于第一句或第二句都会被选出。
- INTERSECT:对两个SQL语句的查询结果做与运算,即值同时存在于两个语句才被选出。
- MIN、AVG、MAX:分组查询时的聚合函数
真题#
1、某销售公司数据库的零件关系P(零件号,零件名称,供应商,供应商所在地,库存量),函数依赖集F={零件号→零件名称,(零件号,供应商)→库存量,供应商→供应商所在地)。零件关系P属于_54查询各种零件的平均库存量、最多库存量与最少库存量之间差值的SOL语句如下:SELECT零件号,__55_FROM P_56__;
54、A. 1NF B.2NF C.3NF D. 4NF
55、A.AVG(库存量)AS平均库存量,MAX(库存量)一MIN(库存量)AS差值
B.平均库存量ASAVG(库存量),差值AS MAX(库存量)一MIN(库存量)
C.AVG库存量AS平均库存量,MAX库存量一MIN库存量AS差值
D.平均库存量ASAVG库存量,差值ASMAX库存量一MIN库存量
56、A.ORDER BY 供应商 B.ORDER BY 零件号 C.GROUP BY 供应商 D.GROUP BY 零件号
答案:A A D
解析:依题意,基于函数依赖集F,零件P关系中的(零件号,供应商)可决定零件P关系的所有属性,因此零件P关系的主键为(零件号,供应商)。又因为“(零件号,供应商)→零件名称”,而“零件号→零件名称”、“供应商→供应商所在地”,由此可知零件名称和供应商所在地都部分依赖于码,所以关系模式PE1NF。查询各种零件的平均库存量、最多库存量与最少库存量之间差值时,首先需要在结果列中的第一空缺处填入“AVG(库存量)AS平均库存量,MAX(库存量)一MIN(库存量)AS差值”。其次必须用分组语句按零件号分组,因第二空缺处应填入“GROUP BY零件号”。
2、若有关系R(ABCDE)和S(BCFG),则R和S自然连结运算后的属性列有(51)个,与表达式等价的SQL语句如下:SELECT(52)FROM(53)WHERE(54);
(51)A.5 B.6 C.7 D.9
(52)A.A,R.C,F,G B.A,C,S.B,S.F C.A,C,S.B,S.C D.R.A,R.C,S.B,S.C
(53)A.R B.S C.RS D.R,S
(54)A.R.B=S.B AND R.C=S.CAND R.C<S.B
B.R.B=S.BAND R.C=S.CAND R.C<S.F
C.R.B=S.BORR.C=S.CORR.C<S.B
D.R.B=S.BORR.C=S.CORR.C<S.F
答案:C A D B
解析:自然连接后的属性列取两个表所有属性列,但相同属性列只显示一次,因此共7列;SELECT后是要查询显示的列,与投影π下标相同,将ABCDEFG七列从1开始编号,取第1,3,6,7列;FROM后面是要查询的表格,是R和S两张表,以逗号分开;WHERE后面是条件,自然连接取的是属性相同且值相同的记录,因此有R的B,C列与S的B,C列相等,表达式中的条件是第3列小于第6列,也加上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示