导图社区 数据库系统概论复习笔记
数据库系统概论复习笔记,数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。
编辑于2023-05-05 20:33:47 河南数据库
数据库习题
关系数据库设计理论
规范化: 插入异常:该插的没插
BCNF范式:1.被完全函数依赖的叫做候选码 2.消除主属性对码的非完全依赖(必须让主属性对于不包含它的码完全依赖) 在函数依赖范畴内,已消除了插入和删除的异常
关系数据库标准语言
关系数据库基础
关系模式
完整性约束 实体完整性,参照完整性
数据库设计
逻辑设计阶段:设计关系模式
物理设计阶段:为哪些表,在字段建立索引
数据库系统概论
最小关系系统:FoxBASE,FoxPro
DBMS:基本单位事务
关系数据库 可命名的最小单位:属性名
数据库保护
丢失修改:对数据重复修改,事务1.2都同时修改,1被2的修改覆盖 脏读:事务1撤回或没更新,另一个依旧保持基于事务1数据进行操作 不可重复读:事务1读数据,2修改,1再读数据和第一次不一样。两次结果不一致叫。
事务 数据库只包含成功事务提交的结果,说数据库处于一致状态
安全性-完整性
数据的完整性指的是数据的正确性和相容性
数据的完整性指的是数据的正确性和相容性
①数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。 ③数据库的完整性是为了在数据的添加、删除、修改等操作中不出现数据的破坏或多个表数据不一致,是指存储在数据库中的数据正确无误并且相关数据具有一致性,数据在逻辑上的一致性、正确性、有效性和相容性。 ③数据的完整性和安全性是两个不同概念,数据库的完整性是指数据的正确性和相容性。数据库的安全性是指保护数据库,以防止不合法的使用造成的数据泄密、更改或破坏。
保护数据安全性 设置用户标识和存储权限控制
关系规范化理论(第6章)
1.选出候选码#被完全函数依赖 的是候选码→2.写出第几范式和原因→3.会有的异常操作是(插,删,更)→4.升更高级范式的方法
具体判断第一范式部分函数依赖:只有一个非主属性函数对码完全函数依赖,其他的非主属性都依赖于码里面的主属性(其中一个),所以他们对码是部分函数依赖,就可以判断是第一范式。
插入删除更新异常简述:(sno,cno)主码,插入|创建课程号必须有学号记录不然无法创建=插入异常 删除:某学生退课,但是其不是独立的,删除课程就会连锁全部删除。如果只有(sno,cno)这是他自己记录,删课程只是自己的,其课程还存在。
1NF或者其他范式的函数异常的分析相似:因为候选码有两个主属性。所以想要创建新的课程时因为缺乏主属性的其中之一sno(没有同学进行选修)无法创建出现插入异常(不能执行插入操作),当某个同学想要退课删除某门课程时会把不该删的课程信息(所有的这门课程删除,所以应该有一个自己的范围区,删除只删除自己的表这门课程号的记录,而该课程任然可以被其他的同学选择)。(升级范式后也可以在想要插入信息的时候能只先插入课程号也可以创建。)
绘画他们的关系
4.关系数据库设计理论
总结:1.写候选关键字是 2.依赖关系(不满足时:有非主属性/主属性x对候选码y的部分/传递依赖)(且讲明满足NF:没有非主属性对候选码的xx依赖) 3.出现的异常(删除不该删的信息) 4.升高级范式(传递的分成两个关系模式:S(sno,sd,sdname,sno→sd,sd→sdname)传递依赖是2NF,升是S1(sno,sd),S2(sd,sdname))
依赖
函数依赖
关系模式可以被当作一个元组,基本以三元组R<U,F>//R关系模式属性集合;U所有的属性;F属性之间的关系。
即当某些/一属性被某一属性决定,叫做某些/一属性依赖于决定他们的属性
学号只对应一个学生,一个学生只能在一个系学习,就被唯一的确定了。即学号决定学生名,决定系名。所以所以学生名和系名依赖于学号,记作Sno→Sname,Sno→Sdept;Sno确定Sname,Sname依赖于Sno
数据依赖: ◆是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系(比如名字有相同的,但是学号能唯一确定一个人,来区别其同名的唯一的人。但不能唯一确定其年龄,因为大家都有相同岁数的可能。)
完全函数依赖
部分函数依赖
平凡函数依赖
非平凡函数依赖
概要
传递函数依赖
子主题
基础
超码:部份依赖于K,则称K为R的一个超码。一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中唯一的标识一个实体。
标注
例如:学生是一个实体,则学生的集合是一个实体集,而超码是用来在学生的集合中区分不同的学生。假设学生(实体)具有多个属性:学号,身份证号,姓名,性别。因为通过学号可以找到唯一一个学生,所以{学号}是一个超码,同理{学号,身份证号}、{学号,身份证号,姓名}、{学号,身份证号,姓名,性别}、{身份证号}、{身份证号,姓名}、{身份证号,姓名、性别}也是超码.在这里,因为不同的学生可能拥有相同的姓名,所以姓名不可以区别一个学生,既{姓名}不是一个超码,{性别}、{姓名、性别}也不是。
虽然超码可以唯一标识一个实体,但是可能大多数超码中含有多余的属性。所以我们需要候选码。
候选码:关系模式R<U,F>中属性U完全依赖于K,(→上面P)则称K为R的一个候选码 定义:如果超码的任一真子集不能包括超码,则称其为候选码;超码包括候选码;其实候选码就是能唯一证明实体里边最简略的超码(比如说身份证能唯一的证明一个人;身份证+姓名也能唯一证明一个人,但身份证是候选码。
在上例中,只有{学号}、{身份证号}都是候选码;另外,如果性别和姓名可以唯一标识一个学生,则{姓名,性别}也为超码。
一个关系模式里面一个候选码(比如原本一堆属性在一起,然后里面选出来一个可以决定其他属性的码(而其他属性就叫非主属性),出现了传递依赖,就规范化也是升高一级,再分出一个关系模式,只要让里面的非主属性都完全依赖这个关系模式的候选码。)
主码(即键):关系模式R有多个候选码,选定其中的一个做主码;外码(X为在R中的属性或属性组,但是不是R的码,是另一个关系模式的码,则称X为R的外码) 定义:被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码;此外,应该选择哪些从不或极少变化的属性;
一个实体集中只能有一个主码,但可以有多个候选码 主码的选择必须慎重。 例如:人的姓名是不可以做主码的,因为可能有多个人重名,而身份证可以做主码。 主码的选择应该是那些从不或极少变化的属性。 例如:一个人的地址就不应该作为主码的一部分,因为它很可能变化
比如左边那个题,(C,E)是R的主码,C是S21(C,B,,)的主码(B完全依赖于C);C是R的外部码即外码。
范式
第一范式
关系模式R的所有属性都是不可分的基本数据项
第二范式
关系模式R⊆1NF,并且每一个非主属性都完全函数依赖于R的码,则R⊆2NF。
即非主属性的一个集合和其中的真子集都依赖于码
第三范式
若R⊆3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码
BC范式
①所有非主属对每一个码都是完全依赖函数。 ②所有的主属性对每一个不包含它的码也是完全函数依赖。 ③没有任何属性完全函数依赖于非码的任何一组属性。
一个或一些唯一性的属性/组成称之为决定性因素,并且是码(候选码),除了这些码没有其他的决定因素就属于BCNF。因为条件是,在关系模式R中每一个决定因素都包含(即大于等于)码(包含⊇,开口方向是两者大的一方)。 ps:1.没有属性对码传递依赖和部分依赖(所以是第三范式)而且,除了现有的决定因素(其实就是题目例如:每门课程中每一名次只有一个学生(无并名次)这个里面(课程,名词)是决定因素也是候选码,可以确定学生,也叫学生依赖于(课程,名词)的码)以外没有其他决定因素。
关系模式规范化的基本步骤:
异常
1、数据冗余太大,浪费存储空间 如:系主任的名字重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。 2、更新异常(Update Anomalies) 数据冗余,更新数据时,维护数据完整新代价大 如果某系换主任,系统必须修改与该系学生有关的每一个元组。 3、插入异常(Insertion Anomalies),该插入的数据插不进去 如果成立一个新的软件工程系,还没有招生,我们就无法把这个系及其系主任的信息存入数据库。 4、删除异常(Deletetion Anomalies),不该删除的数据也删除了 如果某个系的学生全部毕业了,我们在删除该系学生信息的同时,把这个系及其主任的信息也丢掉了。
关系数据库标准语言[教材3;4.2.4章]
一个关系数据库管理系统的实例(Instance)中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
数据库对象是表或视图等?
1.建立数据库三级模式的功能由SQL语言的数据定义功能完成;SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言。SQL的数据定义功能:模式定义、表定义、视图和索引的定义。 2.视图的优点之一:提高数据的逻辑独立性;修改基表视图可以看到修改结果 3.关系代数-SQL转化:实现 R∪T的SQL语句是_SELECT * FROM R UNION SELECT * FROM T 4.DML数据操纵:入“95031”班学号为 30、姓名为“郑和”的学生记录;#插入部分数据 INSERT INTO R(NO,NAME,CLASS) VALUES(30,” 郑和”,”95031”) 。 ③ 学号为 10 的学生姓名改为“王华”; UPDATE R SET NAME=“王华”WHERE NO=10 。#有条件的更新 ④ 所有“95101”班号改为“95091”; UPDATE R SET CLASS=“95091” WHERE CLASS=“95101”。 ⑤ 除学号为 20 的学生记录;#删除部分条件 DELETE FROM R WHERE NO=20。 ⑥ 除姓“王”的学生记录; DELETE FROMR WHERE NAME LIKE“王%”。
SQL基本功能
DQL数据查询SELECT
Student.*#学生的所有情况都输出
定义:select子句:指定要显示的属性列 select distinct#去重:同一个人多个成绩查不及格的多科学生只展示一次学号 from:指定查询对象 where:查询条件 group by 指定列|属性名:对查询结果按指定列值分组,组为1的学生合并放一起,2的合并放一起并且他会和count()一起用便于统计修一个课程的学号数量=选修这门课的人数 #对学号进行分组时count可以记录同一组即同一个学号出现的次数,同一个学号出现一次是选一门,多次就是多门 having短语:满足指定条件的组才输出搭配group by 和count使用 order by 指定列:按指定列的升序#默认或降序DESC排序。 查询条件:比较#大于小于不等于not;确定范围(not)between 值 and 值#是在这个区间包括两边;确定集合:in,not in ;字符匹配:(not) like (%#可以匹配一堆,'刘%'就可以匹配所有姓刘的,'刘_'就只能匹配姓刘两个字,都是字母中间_需要先转义表示不是要匹配只是人家原本就叫那个,匹配DB_DE where Cname like 'DB#_DE' ESCAPE '#') ;空值:is (not)null;逻辑运算:and,or,not
条件查询:='要匹配名#值不用引号';in ('名')#在哪个系也必须,只要是名|长字符串就引号;
聚合查询:count()#计算和,count(distinct)#比如选多个课程同一学号避免重复 avg()#平均成绩 联系两表的查询需要 表名.相同属性名=表名相同属性名#需要一个表的学分和联系表里面练习两表的学号,因为查的是某个学号的学分但是course表没学号但联系表SC有学号+课程号
连接查询:自身连接:可以对一个表重复不同名称的命名来在一个题里面使用比如求先修课程的先修课=一门课的间接先修课Course FIRST#重命名为FIRST作为第一门课 ,Course SECOND select展示FIRST.Cno 和SECOND.Cpno 外连接:左向外连接left join#结果是指定的左表的所有行都展示(因为一般的=是互相迁就就是两边都得满足要求,现在意思是左边的全都展示,右边迁就左边,若不满足条件就全空)而不只是连接条件匹配的行,左表没有匹配的就空值但必须显示 多表连接:有一个中间联系表即可,让一个表.属性=中间表.属性 and 另一个表.属性=中间表.属性
左连接left join:left join左边的全部展示,left join右边的不满足on条件的为空值; 右连接right join:right join右边的表全展示,左边的表和属性不满足on条件的为空。
嵌套查询:
定义:select-from-where一个查询块,一个查询块嵌套在一个查询块的where|having子句里面叫嵌套查询,里面的叫子查询,子查询不能出现order by;查询顺序:不相关子查询:先子查询再往外,只是其结果用来做父查询的满足条件,一次即可所以不用重命名表。相关子查询:定义:需要把所有的记录筛选一遍,就是需要依赖父查询的属性才能处理子查询(因为要一一对比,查一次放一个到结果,所以反复调用父查询来一次最后的对比才能放结果),那就调用一下用的属性的值就是记录也叫元组先判断一个,然后查询比较,where后子句(就是查询了子查询后出来满足where条件)的结果为真就输出一下再继续判断下一个元组,直到把所有记录判断完#有点像while循环;要是子查询要用到父查询的表记得在父查询时就重命名一下
DML数据操纵INSERT,UPDATE,DELETE
DDL数据定义CREATE,ALTER,DROP
功能包括定义模式SCHEMA(有级联等)、定义表、定义视图和定义索引,只有表可以alter
创建模式create schema 模式名 authorization 用户名 create table 表名(表的所有属性,可以这样做); 删除是drop schema 模式名 cascade(把所有都删除包括定义 的数据库对象) |restrict删除有限制必须把模式中定义的所有对象(表/视图删除) 索引:在基本表上创建(可以提供多种存储路径),存储数据可能会选择索引的存储,一个表上最多一个聚簇索引cluster多个表中物理顺序会变更。是对表中某些/全部创建索引,比如为学号创建唯一索引会更快。
create创建:基本表:create table 表名(属性名(列名)数据类型 约束条件(primary key主键/unique唯一));//逗号分隔开属性。
创建视图:create view 视图名(视图对应select属性所起的属性名,也可以不写不写就是原本的名字)AS SELECT 属性,属性,属性#这些只表示视图要展示的属性 from 表 where 查询的条件 (其后加上with check option//就对以后的更新插入删除进行约束,只有满足才能进行这些操作,不加上就在搜索的时候满足条件); 多表create view 视图名 as 属性... from 表名.属性#当属性出现同名的时候 from 表名,表名 where 要满足条件 and 条件;
虚拟表,create到了数据字典,select是查再根据语句查,不保存查到的结果。每次都是新查。意义:提供了一定的逻辑独立性,能够对机密数据提供安全保护。
可以使用函数和排序:AVG(属性)#平均成绩;末尾group by 属性#对属性进行排序
创建索引:create unique|cluster index 索引名 on 表名(属性 ASC#升序|DESC#降序)
组成主码:primary key(属性,属性);再表示是这个表的外键foreign key (属性名) references 属性/主键原本的表名(属性/主键名)
alter:修改。1.添加alter table 表名 add 数据类型 属性名; 2.修改数据类型alter table 表名 alter column列的英语也是属性 属性名 新的数据类型; 3.增加约束条件alter table 表名 add unique约束条件(属性名);
索引:alter index 索引名 rename to 新索引名
drop删除:drop table 表名 cascde全删包括其依赖对象/destrict被引用或存在依赖此表不能删除 视图:drop view 视图名 cascade|restrict(#不添加就是直接只删除当前视图) 索引:drop index 建立的索引属性 on 索引名;
对数据库对象(表,视图,索引)的处理
update修改数据:update 视图名 set 修改属性=新名 where 修改满足的条件
insert插入数据:insert into 视图名 values('值','值'#插入的属性要和视图属性顺序一一对应)
delete from 视图名 where 属性名 =‘要删除的记录值’#可以说是删除条件;
DML数据操纵INSERT,UPDATE,DELETE:对数据的处理
DCL数据控制GRANT,REVOKE
SQL支持的关系数据库三级模式
三级模式是对数据的三个抽象级别,二级映象在数据库管理系统内部实现这三个抽象层次的联系和转换:
外模式(子模式或用户模式)对应于视图和部分表
数据库应用的数据视图(局部数据)
模式(逻辑模式)对应表
模式:数据库逻辑结构和特征的描述;是型的描述,不涉及具体值。
模式:所有用户的数据视图(全体数据)
内模式(存储模式)对应存储文件
索引
数据定义语言DDL(CREATE、ALTER、DROP)
数据操作语言DML
更新(插入,删除,修改)
数据控制语言DCL(设置权限)
简单填空概念即可
GRANT
REVOKE
建立数据库结构
数据库设计部分(数据库设计[7])
关系 R有三类关系(基本关系(基本表或基表);查询表(查询结果对应的表);视图表)
数据库设计的基本步骤
根据用户的需求,在数据库管理系统上(比如:MySQL、Oracle),设计数据库的结构和建立数据库的过程。
就是把E-R图写成关系模式名(实体型名字)<所有属性U(写出主码和关系)>
需求分析
确定用户对数据库系统的使用需求,得到需求描述。弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。
概念结构设计
E-R图
第一步:先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图,即局部 E-R图);第二步得到全局的E-R图
逻辑结构设计
E-R图向关系模式转换的基本原则
E-R图向关系模型的转换就是将实体型、属性和实体之间的联系转换为关系模式,或者说是将E-R图中的内容如何存储到关系中
1.关系 关系是一张二维表,表示数据的逻辑结构。表中每一行代表一个记录(元组),每一列代表一个属性也叫字段(属性值的取值范围为域)。 2.关系模型 关系模型是指以二维表结构表示的实体关系,用键表示实体间联系的数据模型。 关系模型的组成包括关系数据结构、关系操作和关系完整性约束三部分。 3.码(键) 在关系中由唯一可标识记录的属性或属性组构成。 4.超码 关系中某一属性组的值能唯一标识一个元组,可能包含一些无关紧要的属性(学号、姓名) 5.候选码 最小超码,任一真子集都不能成为超码 6.主码 在候选码中选定一个码作为记录标识,不能为空 7.外键 若在关系R中包含另一个关系S的主键对应的属性或属性组K,则称K为R的外键。 8.主属性 候选码中各属性 9.非主属性 不包含在任意一个候选码中的属性
1.先面向对象,把对象及属性列全了,再考虑面向过程。先列实体,再列实体间的关系,再细化关系; 2.一定要结合业务需求考虑表依赖关系,主外键关系不能混乱或者弄反,尽量考虑表之间关系是不是存在1:N的情况; 3.表关系为1:N的,N方要有1方的主键字段作为外键; 4.表关系存在N:N的时候一定要加入中间表做成N:1:N;(就是如果是多对多,可以在这两个表中间加上一个基本表作为他们的联系)
(1)一个实体转换成一个关系模式,实体的属性就是关系的属性,实体的码就是关系的主码。 (2)一个联系转换成一个关系模式,与该联系<菱形>相连的各实体的主码以及联系的属性构成该关系的属性。该关系主码有三种情况。 ①如果联系为1:1,则每个实体的主码都可以是关系的候选码。选一个不可变的为主码。 合并:关系可以带着另一端实体的主键放入左边实体的属性集,名字不用变。 ②如果联系是1:n,则n端实体的主码是关系的主码,1端候选码。 合并:与n端合并(1端主码放入n端的属性集作为外键) ③如果联系是m:n,则每个实体的主码的组合是关系的主码 两个以上的实体:(5) 一个多元联系可以转换为一个独立的关系模式 与该多元联系相连的各实体的码,以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。 (6) 具有相同码的关系模式可以合并
实体型转换成一个关系模式
一种实体就是一种实体类型(比如学生型)
语义:一种实体存储在一个表中,一行代表一个实体
实体名称作为关系模式名称 实体的属性就是关系的属性 实体的主码就是关系的主码
实体间的联系针对不同情况进行转换
数据库物理设计
物理设计就是根据所选择的关系型数据库的特点对逻辑模型进行存储结构设计。
:1. 定义数据库、表及字段的命名规范;2. 选择合适的存储引擎(索引,哈希,聚簇);3. 为表中的字段选择合适的数据类型;4. 建立数据库结构(DML数据操作语言:数据查询和数据更新两类,数据更新又分成插入、删除和修改三种操作,主要命令:select、insert、delete、update、merge、call、explain、plan。)(DDL数据定义语言:DDL包括两种类型数据:数据字典(就是将一个属性列新建到另一个表中,在原本的主体表只保存其代码。是一种用户可以访问的记录数据库和应用程序元数据的目录。)以及数据类型和结构定义。主要命令:create 、alter、drop、truncate、rename、comment。)(DCL数据控制语言:设置或更改数据库用户或角色权限,包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。 grant)(TCL事务控制语言)。
数据库实施
数据库运行和维护阶段
关系数据库基础(第2章)
关系数据库系统是支持模型的数据库系统,它由关系数据结构,关系操作集合和关系完整性约束三要素组成。
关系模式
关系模式是型,关系是值;关系模式是对关系的描述。因此关系模式必须指出这个元组集合的结构,即它由哪些属性构成,这些属性来自哪些域,以及属性与域之间的映像关系。
关系模式可以形式化地表示为:R(U,D,DOM,F) R 关系名 U 组成该关系的属性名集合 D U中属性所来自的域 DOM 属性向域的映象集合 F 属性间数据的依赖关系的集合 关系模式通常可以简记为R (U)或 R (A1,A2,…,An) R: 关系名 A1,A2,…,An : 属性名 注:域名及属性向域的映象常常直接说明为属性的类型、长度
关系模式与关系? 关系模式(Relation Schema)是型,而关系是值,关系模式和关系往往笼统称为关系。 关系模式是对关系的描述,它是静态的、稳定的。 关系则表示关系模式在某一时刻的状态或内容,它是动态的、随时间不断变化的。 关系数据库:在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
数据结构
关系数据结构的概念是:关系、域、笛卡尔积、关系的性质
关系:
现实世界的实体以及实体间的各种联系均用关系来表示。
笛卡尔乘积D1×…×Dn的任意一个子集合 称为一个定义在域D1、…、Dn上的关系。
课程={离散,C语言…..},学生={张三,李四…..},D1×…×Dn ={ (d1 , …, dn ) | di ∈Di,1≤i≤n }。 解: D1={离散,C语言…},D2={张三,李四…} D1×D2={(离散,张三),(离散,李四),…… (C语言,张三),(C语言,李四),…… …….}
三类关系: 基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示 查询表:查询结果对应的表 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
域
域是一组具有相同数据类型的值的集合。#其实就是一个列(属性|字段)元组(记录)
笛卡尔积
笛卡儿积(cartesian product):设D1、…、Dn是n个域。D1、…、Dn上的笛卡尔乘积定义为集合D1×…×Dn ={ (d1 , …, dn ) | di ∈Di,1≤i≤n }。笛卡尔积是所有域的所有取值的一个组合,它不能重复。
关系的性质
关系操作|运算
基于代数的定义:关系代数
传统集合运算:并,交,叉,广义笛卡尔积
用运算符号 要求(表名)
并运算
元组放一起,一样的不写
交
相交相同的拿出来
差
R-S,找R中有S中无的
广义笛卡尔积
所有的结果都拼一下#把两个表放一起,第一个表的属性组对第二个的进行搭配
专门的关系运算:选择s,投影P,连接,除¸
投影P=select#选择展示的列|属性
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性后,就可能出现重复行,应取消这些完全相同的行。对列进行计算
选择s:满足条件的拿出来,s=where
从行的角度进行计算
连接:先做笛卡尔集运算再进行条件 对比连接, #就是先把ABCDE全放一起排列组合,然后再对比B<D,满足这个条件的保留下来
常用的两种连接运算 (1)等值连接 (2)自然连接(需要消除重复列) 自然连接是一种特殊的等值连接,即若A,B是相同的属性组,就可以在结果中把重复的属性去掉。这种去掉了重复属性的等值连接称为自然连接
特殊的三个连接操作
1.自然连接R.B=S.B。#B的所有元组只出现一次不必再组合
2.复合连接:似于自然连接,只是连接结果不包含连接属性。B相等的组合一下。#关系R中的B=b就组合关系S中的B=b再组合S中第二B=b的相应其他属性元组。但是当两个关系的元组不一样就不
商操作÷:就是两个关系,在R中找S中没有的两个属性列看有几组与S中不同的,再把这几个元组对应一行中S中不包含的写出来。 #看这道题:S中有属性C,D两列,那么R中就只看A,B两列。A,B的元组分成三类(a,b)(b,c)(e,d)。然后就是看这三种与S进行笛卡尔积运算(就是R的AB的三类不同元组与S中的CD排列组合,去除掉R中重复的,结果再去除CD。)
基于逻辑的定义 :关系演算
此处不重要
完整性约束
概念:当在关系模式中一个属性的在U的任两个元组之间都不相等,则叫这个属性为候选码|键 外部键:关联完整性约束说明:任何关系的一个元组只能通过外部键与另一个关系的元组相关联
实体完整性
若属性A是基本关系R的主属性,则属性A不能取空值,空值就是“不知道”或“不存在”或“无意义”的值。
参照完整性
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K对应(基本关系R和S也可能是同一个关系),则对于R中每一个元组在F上的取值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。
在CREATE TABLE中用FOREIGN KEY定义哪些列为外码。
用户自定义完整性
由用户根据实际情况对数据库中数据的内容进行的规定,也称为域完整性规则。
用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求。 关系数据库管理系统提供了定义和检验用户定义完整性的机制,不必由应用程序承担。 CREATE TABLE时定义属性上的约束条件: 列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个条件表达式(CHECK)
数据库系统概述(☆)第一章
数据库Database
数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。
数据库管理系统DBMS
据库管理系统是位于用户与操作系统之间的一层数据管理软件,它是一个大型复杂的软件系统,它主要用于科学地组织和存储数据、高效地获取和维护数据。
数据库系统 DBS
数据库系统主要是由数据库、数据库管理系统(及其开发工具)、数据库管理员以及应用程序所构成的一套人机系统。
优点:数据的整体结构化 数据的整体结构化是数据库的主要特征之一,它不再仅仅针对某一个应用,而是面向全组织,不仅数据内部结构化,整体也是结构化的,数据之间具有联系,数据记录可以变长,数据的最小存取单位是数据项。 1 数据的共享性高,冗余度低且易扩充 数据面向整个系统,可以被多个用户、多个应用共享使用。 数据共享的好处: (1)、减少数据冗余,节约存储空间。 (2)、避免数据之间的不相容性与不一致性。 (3)、使系统易于扩充。 数据独立性高 数据独立性由数据库管理系统的二级映像功能来保证,它主要分为:物理独立性和逻辑独立性。 物理独立性:指用户的应用程序与数据库中数据的物理存储是相互独立的,当数据的物理存储改变了,应用程序不用改变。 逻辑独立性:指用户的应用程序与数据库中数据的逻辑结构是相互独立的,当数据的逻辑结构改变了,应用程序不用改变。 数据由数据库管理系统统一管理和控制 数据库管理系统提供的数据控制功能。 (1)、数据的安全性(Security)保护:保护数据以防止不合法的使用造成的数据的泄密和破坏。 (2)、数据的完整性(Integrity)检查:保证数据的正确性、有效性和相容性。 (3)、并发(Concurrency)控制:对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。 (4)、数据库恢复(Recovery)技术:将数据库从错误状态恢复到某一已知的正确状
以上的概念以及之间的联系
简单了解数据库开发阶段:人工管理-文件管理-数据库系统
数据模型:
理解信息的三种世界以及其对应关系
现实世界-信息世界-机器世界 概念模型用于信息世界的建模
概念模型: 概念模型也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。
逻辑模型和物理模型: 逻辑模型主要包括层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。按计算机系统的观点对数据建模,用于DBMS实现。 物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。
数据模型组成要素
数据结构
描述数据库的组成对象,以及对象之间的联系,它是对系统静态特性的描述。
数据操作
查询
更新(包括插入、删除、修改)
数据的完整性约束条件
是一组完整性规则的集合,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。 完整性规则:给定的数据模型中数据及其联系所具有的制约和依存规则。
信息世界涉及的基本概念
实体E;属性;码;域;实体型;实体集;联系。#底层概念中
概念模型的表示方法
实体-联系方法,用E-R图来描述现实世界的概念模型,E-R方法也称为E-R模型。
简单了解常用的结构数据模型-层次、网状、关系模型
关系模型中涉及的概念
数据库系统模式结构:三级模式 模式、外模式、内模式 每个模式的作用
两级映像:模式/内模式映象保证数据的物理独立性;外模式/模式保证了数据和程序间逻辑独立性
常见的数据模型 层次模型(Hierarchical Model) 网状模型(Network Model) 关系模型(Relational Model))
层次模型和网状模型的数据结构分别是___树___ 和__有向图__
数据库保护[4;5.1-5.4;10;11](☆)
数据库安全性以及安全性控制方法(GRANT、REVOKE)
授权GRANT ON TO (WITH GRANT OPTION );
把查询Student表权限授给用户U1。 GRANT SELECT ON TABLE Student TO U1 ;
把对Student表和Course表的全部权限授予用户U2和U3。 GRANT ALL PRIVILIGES ON TABLE Student,Course TO U2,U3 ;
权限授予所有用户:TO PUBLIC ;
修改学生学号的权限:GRANT UPDATE(Sno) 对表SC的INSERT权限:GRANT INSERT
并允许他再将此权限授予其他用户:WITH GRANT OPTION ;#最末位添加的
权限回收: REVOKE ON FROM (CASCADE | RESTRICT);
实例: 把用户U4修改学生学号的权限收回。 REVOKE UPDATE(Sno) ON TABLE Student FROM U4 ;
收回所有用户:FROM PUBLIC ;
把用户U5对SC表的INSERT权限收回。FROM U5 CASCADE ;
完整性控制:与MySQL结合几种约束保证完整性
实体完整性:CREATE TABLE中用PRIMARY KEY定义那些列为主码。 单属性构成的码有两种说明方法 定义为列级约束条件 Sno CHAR(9) PRIMARY KEY, 定义为表级约束条件 PRIMARY KEY (Sno) 多属性构成的码有一种说明方法 定义为表级约束条件
参照完整性 关系模型的参照完整性定义:在CREATE TABLE中用FOREIGN KEY定义哪些列为外码。
/*在表级定义实体完整性*/ PRIMARY KEY (Sno, Cno), /*在表级定义参照完整性*/ FOREIGN KEY (Sno) REFERENCES Student (Sno), /*在表级定义参照完整性*/ FOREIGN KEY (Cno) REFERENCES Course (Cno)
用户定义的完整性 用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求。 关系数据库管理系统提供了定义和检验用户定义完整性的机制,不必由应用程序承担。 CREATE TABLE时定义属性上的约束条件: 列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个条件表达式(CHECK)
并发控制和封锁:事务的概念、特征、数据库并发性含义、并发操作与数据不一致性(结合具体案例、会分析哪些情况是丢失更新、脏读、不可重复读)、并发控制实现的常见机制是封锁、封锁的概念、封锁类型、封锁协议、死锁、活锁
概念:是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。事务和程序是两个概念。一般地讲,一个程序中包含多个事务。
特征:四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这个四个特性也简称为ACID特性。
并发控制概述 事务是并发控制的基本单位,并发控制机制的任务,对并发操作进行正确调度,保证事务的隔离性,保证数据库的一致性,并发操作带来的数据不一致性会导致以下问题: 丢失修改(Lost Update) 不可重复读(Non-repeatable Read) 读“脏”数据(Dirty Read)
脏读 一个事务读到另一个事务,尚未提交的修改,就是脏读。就是假设取出100余额900,现在确定是九百,但是下一步撤销了上上步就是取100操作,所以真实余额是1000,但是上一步脏读的没更新或每提交这个修改保留余额900的状态,和真实数据不符
脏读的重点是读另一个事务未提交的数据(假若那个事务RollBack, 则这数据就是无效的):某个事务已更新一份数据, 另一个事务在此时读取了同一份数据, 由于某些原因, 前一个RollBack了操作, 则后一个事务所读取的数据就会是不正确的
不可重复读 在同一个事务中,再次读取数据时【就是你的select操作】,所读取的数据,和第1次读取的数据,不一样了。就是不可重复读。 #就是只读了一次(读最开始状态),中间有更新,比如取了100,余额现在900。但是另一个事物更新时依旧按照原本最开始的1000状态存100,明明现在余额是1000,记成1100.
不可重复读的重点是修改: 同样的条件, 事务读取过的数据, 再次读取出来发现值不一样了
幻读 事物1where查询一些条件选择是否新增用户1,事物1查到没有用户1准备增加用户1;但是在这个事物1查询的同时事物2创建了用户1,事物1依旧按照自己的判断是没有用户1去又加了一个用户1.
幻读的重点在于新增或者删除: 同样的条件, 第1次和第2次读出来的记录数不一样 当然, 从总的结果来看, 似乎不可重复读和幻读都表现为两次读取的结果不一致, 但如果你从控制的角度来看, 两者的区别就比较大, 对于不可重复读, 只需要锁住满足条件的记录, 对于幻读, 要锁住满足条件及其相近的记录。
封锁概述 封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。在事务T释放它的锁之前,其他的事务不能更新此数据对象。
确切的控制由封锁的类型决定。基本的封锁类型有两种: 排它锁(Exclusive Locks,简称X锁) 和共享锁(Share Locks,简称S锁)。 1. 排它锁又称为写锁(X)。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。 2. 共享锁又称为读锁(S)。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
封锁类型
封锁协议 在运用X锁和S锁这两种基本封锁,对数据对象加锁时,还需要约定一些规则,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)。
一级封锁协议: 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议可防止丢失修改,并保证事务T是可恢复的。在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读"脏"数据。 二级封锁协议: 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改,还可进一步防止读"脏"数据。在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。 三级封锁协议: 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读"脏"数据外,还进一步防止了不可重复读。 上述三级协议的主要区别在于什么操作需要申请封锁,以及何时释放锁(即持锁时间)。
活锁和死锁 和操作系统一样,封锁的方法可能引起活锁和死锁。 活锁 :如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形。避免活锁的简单方法是采用先来先服务的策略 死锁 :如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。
数据库恢复的概念、故障类型、恢复原理(利用冗余数据:数据转储和登记日志文件)、对应不同故障类型的恢复策略
数据库恢复 尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行,但是计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏仍是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复。
故障的种类 事务内部的故障:事务内部的故障有的是可以通过事务程序本身发现的,有的是非预期的,不能由事务程序处理的。事务内部更多的故障是非预期的,是不能由应用程序处理的。如运算溢出、并发事务发生死锁而被选中撤销该事务、违反了某些完整性限制等。以后,事务故障仅指这类非预期的故障。事务故障意味着事务没有达到预期的终点(COMMIT或者显式的ROLLBACK),因此,数据库可能处于不正确状态。恢复程序要在不影响其他事务运行的情况下,强行回滚(ROLLBACK)该事务,即撤销该事务已经作出的任何对数据库的修改,使得该事务好像根本没有启动一样。 系统故障(俗称软故障):系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。例如,特定类型的硬件错误(CPU故障)、操作系统故障、DBMS代码错误、突然停电等。这类故障影响正在运行的所有事务,但不破坏数据库。这时主存内容,尤其是数据库缓冲区(在内存)中的内容都被丢失,所有运行事务都非正常终止。 介质故障(俗称硬故障):系统故障常称为软故障(Soft Crash),介质故障称为硬故障(Hard Crash)。硬故障指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。这类故障比前两类故障发生的可能性小得多,但破坏性最大。
恢复的机制 恢复机制涉及的两个关键问题是: 第一,如何建立冗余数据;(最常用的技术是数据转储和登录日志文件) 第二,如何利用这些冗余数据实施数据库恢复。
数据转储 数据转储是数据库恢复中采用的基本技术。所谓转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。转储是十分耗费时间和资源的,不能频繁进行。DBA应该根据数据库使用情况确定一个适当的转储周期。转储可分为静态转储和动态转储。 静态转储是在系统中无运行事务时进行的转储操作。 动态转储可克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是,转储结束时后援副本上的数据并不能保证正确有效。
登录日志文件的格式: 日志文件是用来记录事务对数据库的更新操作的文件。不同数据库系统采用的日志文件格式并不完全一样。 概括起来日志文件主要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。 对于以记录为单位的日志文件,日志文件中需要登记的内容包括: 各个事务的开始(BEGIN TRANSACTION)标记 各个事务的结束(COMMIT或ROLLBACK)标记 各个事务的所有更新操作 注意:这里每个事务开始的标记、每个事务的结束标记和每个更新操作均作为日志文件中的一个日志记录(log record)。
恢复的策略 当系统运行过程中发生故障,利用数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。 不同故障其恢复策略和方法也不一样。
事务故障的恢复 事务故障是指事务在运行至正常终止点前被终止,这时恢复子系统应利用日志文件撤销(UNDO)此事务已对数据库进行的修改。事务故障的恢复是由系统自动完成的,对用户是透明的。系统的恢复步骤是: 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。 对该事务的更新操作执行逆操作。即将日志记录中"更新前的值"写入数据库。这样,如果记录中是插入操作,则相当于做删除操作(因此时"更新前的值"为空);若记录中是删除操作,则做插入操作;若是修改操作,则相当于用修改前值代替修改后值。 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
系统故障的恢复 系统故障造成数据库不一致状态的原因有两个,一是未完成事务对数据库的更新可能已写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此恢复操作就是要撤销故障发生时未完成的事务,重做已完成的事务。系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。系统的恢复步骤是: 正向扫描日志文件(即从头扫描日志文件),找出在故障发生前已经提交的事务(这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录),将其事务标识记入重做(REDO)队列。同时找出故障发生时尚未完成的事务(这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录),将其事务标识记入撤销队列。 对撤销队列中的各个事务进行撤销(UNDO)处理。进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中"更新前的值"写入数据库。 对重做队列中的各个事务进行重做(REDO)处理。进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作。即将日志记录中"更新后的值"写入数据库。
介质故障的恢复 发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,恢复方法是重装数据库,然后重做已完成的事务。具体地说就是: 装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态。对于动态转储的数据库副本,还需同时装入转储开始时刻的日志文件副本,利用恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。 装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。即首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中"更新后的值"写入数据库。
底层建筑
数据库系统DBS
组成
数据库Database
数据的集合(数据Data是基本对象,将现实事务记载进计算机的一种符号记录,存储形态。)
数据库管理系统DBMS
用户和操作系统间的软件
组织,存储,获取,维护数据。提供数据控制功能:数据的安全性,完整性,并发控制,恢复技术
核心及基础:数据模型
对现实世界的模拟,使现实世界抽象出一条条数据来记录
概念/信息模型
数据库设计初稿(通过用户理解对数据和信息建模)
用户和设计人员的交流的语言(概念模型)
实体-联系方法,E(实体)-R(联系)图
联系就是数据库里面的R,有属性和关系的那两个
逻辑模型和物理模型
逻辑模型:用计算机的理解对数据建模是数据库系统的实现
物理模型:对数据再系统中+数据在磁盘或磁带上的储存和存取方法。
现实-概念模型得到信息世界-数据库实现得到机器世界
数据模型的组成
数据结构
数据操作
1.查询 2更新(包括插入删除修改)
对数据库中对象(型)的实例(值/记录)进行操作的集合
数据的完整性约束
数据库系统结构
三级模式结构
模式/逻辑模式:数据库的全体数据的逻辑结构和特征的描述,所有用户的公共数据视图
模式:是对型(实体型)的描述,不是具体值,反应的是数据结构及其联系,模式是相对稳定的。
外模式(子/用户模式):数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述。 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
内模式(存储模式):数据的物理结构和存储方式
例题
对于表1,(学号、课名)这个属性组就是候选码。该表中有且仅有这一个码。(假设所有课没有重名的情况) 主属性就有两个:学号 与 课名 非主属性:除了学号与课名,其他属性都是非主属性
信息世界
实体E:客观存在可相互区别的事物
属性A:实体的某个特性
学生实体的属性有姓名学号性别年龄系,入学时间。所有的属性构成一个实体(学生由这些属性构成)
码K:代表实体的不可被重复;作为区分其他实体的唯一的属性。用此证明唯一的一个实体。
域D:属性的取值范围
性别的域:男,女;年龄的域:1-100的整数
实体型E T:有相同属性名的实体作为一类以型来称呼
实体集E S:实体型的集合
类型相同,具体数据不同。全体同学
联系R:一对一,一对多,多对多(实体集对应一个实体集的联系)
商家集的商家实体和商品实体集的实体商品是一对一或一对多