数据库1期末温习
主观题:
大题:
ER图(画ER图)
而后问你如何转化成关系模型 写数据库根本表
语法树查问优化
关系运算表达式
查问写SQL语句
老师的温习课重点
第一章 数据库发展史
数据管理技术三个阶段:人工治理、文件系统、数据库系统
文件系统的三个缺点:数据冗余、不一致性、数据分割弱
数据库系统三个阶段:
- 层次模型/前面的逻辑数据模型和构造模型
特点:有根树,个别示意一对多分割,也能够示意多对多;用指针示意分割
- 网状模型有向图,能示意多对多m:n;用指针示意分割
关系模型二维表格示意实体集,外键和主键(公共属性)示意分割
关系模型的个性:
- 每列不可分
- 没有两行完全相同
- 没有行序和列序(有时候会有列序,为了不便)
关系模型的三个完整性束缚
- (属于关系完整性)实体完整性
- (属于关系完整性)参照完整性
- 用户自定义完整性
- 层次模型/前面的逻辑数据模型和构造模型
数据库专业术语
- 数据库DB
数据库管理系统DBMS
数据库管理系统的次要性能
- 数据库的定义性能
- 数据库的操纵性能
- 数据库的爱护性能
- 数据库的保护性能
- 数据字典
- 数据库系统DBS:采纳数据库技术的计算机系统
第二章 数据库系统构造
三个世界:<u>事实</u>世界、<u>信息</u>世界、<u>机器</u>世界
数据形容(概念和逻辑)
概念设计中的数据形容
- 实体
- 实体集
- 属性
- 实体标识符
逻辑设计中的数据形容
- 字段/数据项--对应属性
- 记录--对应实体
- 文件--对应实体集
- 关键码--对应实体标识符
数据分割的形容
分割的元数:与一个分割无关的实体集个数
二元分割的类型:
- 一对一
- 一对多
- 多对多
- 实体联通词:起码和最多关系<min,max>
概念和逻辑数据模型
数据模型(Data Model):示意实体类型和实体间分割的模型
- 概念(数据)模型:面对现实世界的第一层形象(ER模型)
最驰名的概念模型就是“实体分割模型”(即ER模型)
概念模型独立于计算机系统,独立于DBMS(齐全不波及信息在计算机系统的任何表白),用于建设信息世界的数据模型
逻辑模型/构造模型:面对现实世界的第二层形象
逻辑/构造数据模型从计算机的观点对于数据建模
间接面向数据库的逻辑构造,间接与DBMS无关,用于建设机器世界的数据模型
- 层次模型
- 网状模型
关系模型
- 个性:二维表格表实体集,由若干个关系模式组成的汇合
关系模型的3个完整性束缚
- 实体完整性
- 参照完整性
- 用户自定义完整性
- 面向对象模型
- 概念(数据)模型:面对现实世界的第一层形象(ER模型)
数据模型三要素
- 数据结构
- 数据操纵
- 完整性束缚
三级构造两级映像
从某个角度看到的数据个性称为“数据视图“
三级构造
- 外模式(外模式能够多个) 用户应用DML数据操纵语言对数据库进行操作
单个用户能够看到的数据个性
用户与数据库系统的接口
外模式是概念模式的逻辑子集
- 模式/概念模式(模式只有一个)模式DDL语言 schema data definition language
所有用户的数据定义
DB中所有数据的整体逻辑构造
不波及到存储构造、拜访技术
- 内模式 内模式DDL:物理方面的形容
定义外部记录类型、索引和文件组成形式
- 外模式(外模式能够多个) 用户应用DML数据操纵语言对数据库进行操作
二级映像(确保数据独立性)
- 外模式/模式(放在外模式形容):逻辑独立性/逻辑数据独立性
- 模式/内模式(放在内模式形容):物理独立性/物理数据独立性
两个数据独立性:应用程序和数据库的数据结构之间互相独立 不受影响
- 逻辑独立性(外模式/模式)
改概念模式 只须要批改外模式/模式 外模式不受影响
- 物理独立性(模式/内模式)
改内模式 只须要批改模式/内模式 模式不受影响
- 逻辑独立性(外模式/模式)
第三章 关系运算
关系数据模型
- 定义
二维表格示意实体集,外键/关键码示意实体间分割的数据模型
- 关系的性质(1)属性是原子的 不可分(2)没有反复元组(3)没有行序(4)实践上没有列序,有时为了不便能够有列序
关键码/键
由一个或者多个属性组成
蕴含在任意候选键中的属性称为主属性,不蕴含在任何候选键中的称为非主属性或非键属性
- 超键:能惟一标识元组的属性或属性集
- 候选键:能惟一标识元组却不含多余属性的属性集 就是候选键
- <u>主键:如果有多个候选键,就抉择其中一个为主键(下划线)</u>
- 外键:蕴含的另一个关系的属性(波浪线)
R中有S主键 那么S是参照关系 R是依赖关系
关系模型三级体系结构
- 关系子模式(外模式是关系子模式汇合)
数据不间接来自关系模式中的数据 而是从若干关系模式中抽取满足肯定条件的
- 关系模式(概念模式是关系模式汇合)用DDL定义
对关系的形容,包含模式名、组成该关系的属性名等。具体的关系称为实例
- 存储模式(内模式是存储模式汇合)
关系如何在物理存储设备上存储的
- 关系子模式(外模式是关系子模式汇合)
关系模型的完整性规定
实体完整性规定和参照完整性规定是关系模型必须满足的完整性的约束条件,称为<u>关系完整性规定</u>
- 实体完整性规定:元组中主键的值不能为空
- 参照完整性规定:外键为空或者为对应某个主键
关系数据库中,关系和关系的分割是通过公共属性(一个表的主键和另一个表的外键)实现的。
这个外键要么是空值null,要么就是在另一个表的主键存在的
外键和对应的主键能够不同名,然而要定义在雷同值域上
- 用户自定义的完整性规定
关系模式的三个组成部分:
- 数据结构
- 数据操作
- 完整性规定
- 定义
关系查询语言(依据实践根底不同分两类)
- 关系代数语言:关系代数以汇合操作为根底
- 关系演算语言:关系演算以谓词演算为根底
过程性语言与非过程性语言:
- 过程性语言(PASCAL、C等程序设计语言):编程时必须指出“干什么”及“怎么干”的语言;
非过程性语言(关系查询语言):编程时只须指出“干什么”,不用指出“怎么干”
- 关系代数语言非过程性较弱,因为要指定每一个步骤怎么做
关系代数(汇合操作)这里的考试考查形式就是要你写【关系查问】
数据操纵语言DML(用户应用的)分为查问语句和更新语句两种
关系代数的五个基本操作 并 查 笛卡尔 投影 抉择
- 并Union OR
要求:两个关系都有n个属性,相应属性取自同一个域 (属性性质统一)
两个关系中所有元组形成一个新关系 运算后果打消反复元组
- 差Difference NOT EXISTS
要求:两个关系都有n个属性,相应属性取自同一个域 (属性性质统一)
R-S是属于R而不属于S的所有元组
- 笛卡尔积 FROM A,B
R有m个元组r个属性 S有n个元组s个属性 那么R X S 有m x n个元组 每个元组有r+s个属性
前r个重量来自R的一个元组 后s个重量来自S的一个元组
- 投影Projection SELECT DISTINCT
对关系垂直宰割 去掉一些列 重新安排程序 <u>再删去反复的元组</u>
列出所有学生的学号、姓名、籍贯:$$\pi_{学号,姓名,籍贯}(S)$$
- 抉择Selection WHERE
对关系程度宰割,抉择复合条件的元组
抉择学生表中性别为女的元组:$\sigma_{SEX='女'}(S)$
- 并Union OR
引出的4个组合运算(要能用根本运算示意)
- 交Intersection (两遍差)
能够用两个差示意
R-(R-S) 或者 S-(S-R)
联接Join(笛卡尔积+抉择的组合)
联接的<u>程序不重要</u>!
- $\theta$联接:从笛卡尔积中抉择属性值满足某$\theta$操作的元组
- F联接:从笛卡尔积中抉择属性间接满足某一公式F的元组
- 天然联接(非凡的等值连贯,要求两个关系中进行比拟的重量是雷同的属性,并且去掉反复的属性) 天然联接相当于笛卡尔积 ➡️ 抉择 ➡️ 投影去反复的列
- 交Intersection (两遍差)
- 除DivisionNOT EXISTS(NOT EXISTS)
除是笛卡尔积 差 投影组成的(一长串不必背)
定义:假如R➗S中的元组为t 那么t和 S中的任何元组u组成的新元组<t,u>肯定在关系R中
- 投影相当于select distinct打消了反复行
关系代数书写小技巧
- 个别规定
- 否定 没有 不包含用差
- 全副/蕴含用除
- 能用天然联结就用天然联结
裁减的关系代数操作
- 内部并
内部并不一定要求两个表R和S有雷同的关系模式
如果RS关系不同就取R和S的所有属性(公共属性只取一次)新关系由属于R或者属于S的元组形成
两个表并在一起 在新减少的属性上填空值null
外联接
- 保留因为不存在公共属性相等的元组
- 左外联接就把右边的全副保留
- 右外联接就把左边的全副保留
- 半联接(分布式数据库经常用到)
R和S的天然联接 在关系R的属性集上的投影
半联接不合乎交换律
- 内部并
关系演算(以谓词演算为根底)--不考给查问写关系演算 主观题考
- 元组关系演算:元组为变量 {t|P(t) } t代表一个元组
元组前没有用到存在量词或者全称量词 就叫做自在元组变量
否则就叫束缚元组变量
- 域关系演算:域为变量{t1,t2,...,tk|P(t1...tn) },t1,t2...tk代表一个元组
- 元组关系演算:元组为变量 {t|P(t) } t代表一个元组
关系运算的安全性
在无限关系上的关系代数操作后果都不会导致有限关系和无穷验证,关系代数零碎是平安的!!
然而元组关系演算和域关系演算可能会导致有限关系和无穷验证
所以要对于元组关系演算进行平安束缚
- 平安的元祖关系演算
- 平安的域关系演算
- 什么是平安的?不导致无穷验证和有限关系
有限关系:元组个数为无穷多
无穷验证:验证公式虚实时要无穷屡次
- 平安束缚是什么?对关系演算表达式施加限度条件,对表达式中的变量取值规定一个范畴,使之不产生有限关系和无穷次验证,这种表达式被称为是平安表达式
- 关系运算的等价性
并,差,笛卡尔积,投影和抉择是关系代数最基本操作,形成了关系代数运算的最小齐备集
在这根底上,关系代数、平安的元组操作演算、平安的域关系演算在<u>关系的表白和操作能力</u>上是等价的
查问优化(必考)
优化就是如何<u>安顿操作的程序</u>
- 等价变换规定-书p58页
6条优化个别策略
- <u>尽早抉择</u>
- F联接运算代替 笛卡尔积+抉择
- 同时计算一串抉择和投影
- 如果屡次呈现一个子表达式,把子表达式的后果保存起来防止反复计算
- 适当对关系文件预处理
- 计算表达式之前预计一下怎么计算合算RxS哪个作为外层循环
(上课讲的三个例子)
- 笛卡尔积
- 投影再抉择
- 抉择再投影(发现要先抉择)
语法树的优化过程-第三章作业外面有-应该就专门考这个
关系代数表达式能够化成一棵语法树,叶子是关系,非叶子结点是关系代数操作
关系代数表达式的优化:
- 用等价变换规定把$\sigma_{F1\wedge ...\wedge F_n}(E)$的子表达式变为$\sigma_{F_1}(...\sigma_{F_n}(E)...)$
- 对于抉择操作,尽可能移到叶端
- 对于投影操作,尽可能移到叶端
- 把抉择和投影合并为单个抉择、单个投影或者一个抉择后跟一个投影
- <span style='background:yellow'>把语法树<u>内结点分组</u>:每个二元运算结点(X $\cup$ —)与它的间接先人(不超过别的二元运算结点)的一元运算结点($\sigma$或$\pi$)分为一组;如果它的子孙结点始终到叶子都是一元运算,也并入这个组。但如果二元运算是笛卡尔积且前面不是与它组合成等值联接的抉择时,不能将抉择与这个二元运算并入一组</span>
- 生成一个程序
查问的优化算法
- 天然连贯变为笛卡尔+抉择+投影
- 拆开抉择
- 抉择尽可能移到叶子
- 不须要的都投影去掉,只剩下最必须的属性
分组
- 相邻投影抉择分一组
- 每组一个二元运算x
第四章 结构化查询语言SQL
SQL是介于关系代数与关系演算之间的语言,SQL的性能包含查问、操纵、定义和管制四方面。
SQL的概述
SQL数据库的体系结构
- SQL模式schema是表和束缚的汇合
- 一个表Table是行的汇合 每行是列的序列 每一列对应一个数据项
- 一个表能够是根本表(理论存在数据库中的表),能够是视图(从根本表活着其余视图导出的表,数据库中只寄存视图的定义,视图是虚表)
- 根本表能够跨存储文件,存储文件能够放多个根本。 一个表能够多个索引,索引放在存储文件中;每个存储文件与外存上一个物理文件对应。存储文件的逻辑构造就组成了关系数据库中的内模式。
- 用户能够用SQL语句对视图和根本表进行查问等操作 (用户看来视图和根本表都是关系/表格)
- SQL用户能够是应用程序,能够是终端用户。
SQL体系结构
- 外模式-对应视图
- 模式-对应根本表
- 内模式-对应存储文件
SQL的组成:数据定义,数据操纵,数据管制,嵌入式SQL的应用
- 数据定义 SQL DDL
定义SQL模式、根本表、视图和索引
数据操纵 SQL DML
- 数据查问
- 数据更新(插入 删除 批改)
数据管制 SQL DCL
- 根本表、视图受权
- 完整性束缚
- 事务管制语句
- 嵌入式SQL的应用
- 数据定义 SQL DDL
SQL的数据定义
SQL的数据定义包含对于4个货色:SQL模式schema、根本表table、视图view、索引index的创立撤销操作。
模式定义/数据库定义
- SQL模式创立:create database/schema<模式名> [AUTHORIZATION <用户名>]
SQL模式撤销:drop database/schema<模式名> [CASCADE | RESTRICT]
- cascade(连锁式) SQL模式和上司的根本表、视图、索引都撤销
- restrict(束缚式) SQL模式下没有任何上司元素的时候能力撤销 否则回绝
根本表的创立批改和撤销
根本表创立
- 语法:
create table SQL模式名.根本表名(
列名 类型,
...
完整性束缚,
...)
完整性束缚/规定的三个子句
- 查看子句(check)
主键子句(primary key)
- 外键子句(foreign key)体现了参照完整性
- 语法:
- 根本表撤销
语法:drop table 根本表名 [CASCADE | RESTRICT]
DROP TABLE S RESTRICT;
索引的定义
创立索引
语法:
create [UNIQUE] index 索引名 on 根本表名 (<列名>[秩序]..)
秩序包含
ASC升序
- DESC降序
- 撤销索引
语法:drop index <索引名>
视图的定义(对于更新有限度)
- 创立
语法:create view 视图名(列名表) as select 查问语句;
- 查问
- 更新(限度)
- 不是所有视图都能够更新(见后)
- 视图也被称为<u>虚表</u>(零碎把视图的定义存在数据字典中,不存数据)
SQL数据查问/数据操纵(40分SQL和关系代数 8个题各5分)
给数据库 给插入删除要求 写SQL语句
SELECT语句格局
语法:
SELECT [DISTINCT] 指标表的列名或者列表达式序列FROM 根本表名和(或)视图序列|表援用[ WHERE 行条件表达式] --行条件子句[ GROUP BY 列名组列 --分组子句 [ HAVING 组条件表达式] ] --组条件子句[ ORDER BY 列名[ ASC | DESC ], ··· ] --排序子句
SELECT语句执行步骤:
- 读取FROM中根本表和视图 执行笛卡尔积
- 选取满足WHERE的元组
- 依照GROUP子句给指定列分组 提取满足HAVING子句中组条件表达式的组
- 依照SELECT的列名求值输入
- 依照ORDER排序 如果有多个ORDER就顺次
- 单表查问
字符串匹配符LIKE
语法:列名 LIKE 字符串常数
罕用通配符:
%:示意和任意长度(0也能够)的字符串匹配
_:示意和任意单个字符匹配
SELECT cname FROM S WHERE cname like 'wang%';
- 多表查问
同名属性要加关系名 例如
S.sno
联结操作
联接的类型:
- INNER JOIN 内联接
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- CROSS JOIN 穿插联接(笛卡尔积)
联接的语法:
from X inner join Y on X.sno=Y.sno....
select distinct X.jno from SPJ X inner join SPJ Y on X.jno=Y.jno where (X.pno='P3') and (Y.pno='P5');
聚合函数 个别会跟分组GROUP BY 还有组条件HAVING一起
- COUNT(*)
- COUNT(列名)
- SUM(列名)
- AVG(列名)
- MAX(列名)
- MIN(列名)
- 数据分组
个别会先分组再进行聚合运算
先GROUP BY分组 再依照HAVING子句的条件来抉择 HAVING是抉择组
汇合操作
- 汇合的并、交、差操作
汇合的四个比拟操作
汇合成员资格比拟
- 元组 IN 汇合
- 元组 NOT IN 汇合
汇合成员算数比拟
元组 $\theta$ SOME(汇合)
元组$\theta$ ALL(汇合)
查问最低廉的商品价格:
select distinct pno,price from SPJ where price>=all(select price from SPJ);
- 空关系测试 抉择“所有”的应用用2次NOT EXISTS
EXISTS (汇合)
NOT EXISTS (汇合)
用EXISTS测试一个汇合是否为非空或空 NOT EXISTS(X) 当X为空时 其值为True 否则为False
- 反复元组的测试
UNIQUE (汇合) 检测一个汇合中是否有反复元组
NOT UNIQUE (汇合)
SQL的数据更新(数据插入,删除,批改)
- 数据插入 insert
INSERT INTO 根本表名(列名表) VALUE (元组值);
INSERT INTO J(JNO,JNAME,JCITY) VALUES ('J8','地铁二号线','上海');
- 数据删除 delete
一次只能删一个关系外面的元组
DELETE FROM <表名> WHERE <条件表达式>
delete from SPJ where sno in(select sno from S where sname='西方配件厂');
- 数据批改
UPDATE 根本表名
SET 列名=值表达式[,列名=值表达式···]
[WHERE 条件表达式]
如果省略WHERE示意批改表中的所有元组
update S set sno='1' where sno='2';
对视图的更新(有限度)
- 对视图的更新最初要转变为对根本表的更新
视图更新的三条规定
- 如果视图是从多个根本表用联结操作导出的,不容许更新操作
- 如果导出视图时应用了分组和聚合操作,不容许更新操作
- 如果视图是从单个根本表应用抉择、投影操作导出,且包含根本表的主键或某个候选键,视图称为“行列子集视图”,能够更新操作
视图能够更新和不能更新的状况
能够更新
- 只有行列子集视图能够更新
- 行列子集视图:单个根本表仅抉择投影操作,且后果蕴含主键或某个候选键的视图
不能更新
- 多个根本表联结操作
- 应用了分组和聚合
- 数据插入 insert
嵌入式SQL(主观题:概念和利用)
SQL语言能够在
- 终端交互方式
- <u>嵌在高级语言的程序中(嵌入式)</u> 应用,被嵌入的高级语言叫做<u>宿主语言</u>
- 为什么须要嵌入式SQL?
SQL基于关系模型
高级语言基于根本数据类型
- 数据交互-共享变量:援用宿主语言的程序变量 应用这些变量前加冒号:
- 工作模式-游标(并不是始终要用)
游标的作用:协调SQL一次解决一批而宿主语言一次解决一条的不同
游标能够对立SQL中一次一汇合与程序中一次一记录的工作形式
游标的应用场景 只有DML语言会应用游标
- 查问后果有多条
要对以后的记录进行操作
游标不应用的场景
- 数据定义DDL 数据管制DCL不须要应用游标
插入,删除,更新不须要
- 查问是单后果不必游标
第六章 ER模型
- 会画(9周的研究题)
给文字叙述/需要 画ER图 或者补充残缺
画完之后转化为关系模式 标主键外键
实体模型的根本属性
实体E(用方框示意)
- 实体名
- 属性...
分割R(用菱形框示意)
- 元数(几个实体之间的分割)
- 连通词(几对几)
- 基数
属性(用椭圆示意,主键加下划线)
能惟一标识实体的属性或属性集称为“实体标识符”/“主键”
- 根本属性和复合属性
单值属性和多值属性
- 单值属性
多值属性(用双椭圆示意)
批改ER模型对多值属性进行变动的两种办法
- 减少几个新属性(把多值属性拆成很多不同属性)
- 减少新实体:减少一个依赖于原来实体的1:N弱实体(用单方框示意)
- 导出属性(虚线椭圆和虚线连线示意)
属性不仅能够从其余属性导出,也能够从实体导出
空值(不好 难解决 减少复杂性)
- 值无意义:占位空值
- 值临时不晓得:未知空值
- 不晓得有没有意义或者值是什么:未知
分割的设计
- 分割的元数:一个分割波及到的实体集个数
- 分割的联通词:分割波及到的实体集之间对应的形式,二元分割中就有1:1, 1:N , M:N , M:1
- 分割的基数
两个实体集E1和E2,E1中每个实体与E2中有分割实体的数目的最小值Min和最大值Max形成E1的基数,用(Min,Max)示意
ER模型的裁减
- 弱实体(单方框和双菱形)
弱实体用单方框
实体和弱实体的分割用双菱形
- 子类和超类
子类实体继承超类实体的所有属性
这种继承性通过子类实体和超类实体具备雷同标识符/主键实现的
超类用两端有双线的方框示意,超类与子类的分割用加圈的线示意
- 弱实体(单方框和双菱形)
ER模型转化关系模式!!!
- 实体间接转为关系模式(一个实体就是一个关系模式,实体有几个属性关系模式就几个属性)
把ER图中的分割转化为关系模式
- 1对1分割:抉择任意实体,把其中的一个的主键放在另一个实体做为外键
- 1对多分割:在多的这边增加一个外键:1的主键
多对多分割:增加新的关系模式/新的根本表来示意分割
- 分割的属性是关系模式属性
- 新关系模式/新根本表的主键是两个实体的主键汇合
- 弱实体转化关系模式
例子:学生-1-n-社会关系
1对多:1的主键作为外键放在多的一边 作为主键的一部分
期末试卷题型散布
- 主观题
- 抉择 10分
- 判断 10分
- 填空10分
- SQL和关系代数各4句 40分
留神点:1.除操作
- 优化查问-语法树 15分
- 给文字描述画ER图-转化为关系模式
主键外键标分明 属性不肯定要全副写 15分
高分不容易 及格很容易
去年的数据库试卷:
题目
车C(CNO,CTYPE,CID,CDATE,)
驾照D(DNO)
部门B(BNO,BNAME,BTEL)
部门用车BC(BNO,CNO,DNO,RQ,DEST,DIS,FECS)
RQ是日期 DIS是间隔!
sql重点考分组group by having
关系代数和sql都会考除和差
关系代数题:
- 为部门b01服务 车型是丰田 费用<600的驾驶员
- 没有被部门b09应用过的车的xxx
- 查问驾驶过所有车辆的驾驶员(除所有车)
- 查问应用沪xxx和沪xxx的驾驶员
- 19年用车超过xxx次的部门(group by)
- 查问定过所有车的部门