只记录了个人觉得的重点和难点知识,大部分是摘抄ppt,部分会给出自己的解答和扩展。
持续更新中
数据(Data) :数据库存储的基本对象,即数据表的一行数据,如一个学生
数据库(Database,DB) :长期储存在计算机内、有组织的、可共享的大量数据的集合。
基本特征
数据库管理系统 (DataBase Management System,DBMS) :位于用户应用与操作系统之间的一层数据管理软件,是基础软件,是一个大型复杂的软件系统,能够科学地组织和存储数据、高效地获取和维护数据。
主要功能:
也就是说,数据库管理系统就是我们平时说的数据库,如mysql数据库就是一个数据库管理系统
八大常见数据库管理系统
数据库系统 ( DataBase System ,DBS ) :是指在计算机系统中引入数据库后的系统构成。
在不引起混淆的情况下常常把数据库系统简称为数据库。
数据库系统的构成
数据管理:对数据进行分类、组织、编码、存储、检索和维护 ,数据处理和数据分析的中心问题 。
数据管理技术发展:人工管理阶段、文件系统阶段、数据库系统阶段。
数据库系统的特点:
数据独立性:指
应用程序
和数据结构
之间相互独立, 互不影响
- 物理独立性:应用程序与数据的物理存储是相互独立的,数据的物理存储改变了,应用程序不变
- 逻辑独立性:
数据独立性由数据库管理系统的二级映像功能来保证。
数据库管理系统提供的数据控制功能
数据模型是对现实世界数据特征的抽象。
数据模型分为两类(两个不同的层次)
术语:
实体-联系方法(Entity-Relationship Approach)
ER图
数据模型的组成要素:
从数据库应用开发人员角度看:
数据库系统采用三级模式结构,是数据库系统内部的系统结构
从数据库最终用户角度看,数据库系统的结构有:
数据库系统模式
模式(Schema)
实例(Instance)
数据库
某一时刻的状态
——模式的一个具体值数据库系统的三级模式结构
理解三层模式:
内模式:记录数据的物理结构
和存储方式,如使用堆存储、压缩存储、加密等
模式: 数据库中全体
数据的逻辑结构
和特征的描述
外模式:数据库用户使用的局部
数据的逻辑结构和特征的描述
显然,内模式和模式只有一种,外模式根据用户需求,有多种。
三级模式是对数据的三个抽象级别。
数据库管理系统内部提供二级映像
先举个例子:
假设A和C认识,经常联系,他们直接联系,即A–>C。
有一天,C整容失败了,A就不认识C了,AC就断了。
现在加入映射。
A–>B–>C
A现在跟C联系,它需要通过B,这个B就是一个映射关系。
如果C现在整容了,管理员只需要让B在认识一下C就行了(修改B),A继续通过B找C,依旧能找到。
(为什么不修改A呢?因为实际开发中,A作为“用户”,如果会因为底层变动而改变,是非常不好的做法,这里不多赘述,可以百度面向接口编程
)
外模式/模式映像:
(假设用户想要的外模式视图是(学号,姓名),当数据本身的
模式
变了,管理员就让映射关系变一下,用户依旧能得到(学号,姓名))
模式/内模式映像:
术语:
单一的数据结构——关系
笛卡尔积——关系的域(所有可能的关系)
R(D1,D2,…,Dn)——R:关系名、D:关系、n:关系的degree
元组——关系中的每个元素(d1,d2,…,dn)叫作一个n元组(n-tuple) 或简称元组,通常用 t 表示(元组)
属性——关系中不同列称为属性(Attribute),每个属性有一个名字;n目关系必有n个属性
候选码——若关系中的某一属性组的值能唯一地标识一个元组,则称该属性 组为候选码
全码——关系模式的所有属性组是这个关系模式的候选码, 称为全码(All-key)
主码——若一个关系有多个候选码,则选定其中一个为主码(Primary key)
主属性——候选码的属性称为主属性(Prime attribute) 不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或 非码属性(Non-key attribute)
单元关系、二元关系——当n=1时,称该关系为单元关系(Unary relation) 或一元关系;当n=2时,称该关系为二元关系(Binary relation)
什么是关系模式?
关系模式(Relation Schema)是型、关系是值;关系模式是对关系的描述
关系数据库的型:
“型”与“值”的关系
静态
的、稳定的某一时刻
的状态或内容,是动态的、随时间不断变化的(关系模式和关系笼统称为关系,根据上下文辨别)
实体完整性和参照完整性(关系模型必须满足的完整性约束条件称为关系的两个 不变性,应该由关系系统自动支持)
用户定义的完整性
初学者可能觉得这个不重要,会写sql就行了;
但是实际上,关系代数运算,在优化
中用的非常多。必须熟练掌握
选择
按行查询
查询信息系(IS系)全体学生。
select * from Student where Sdept=“IS”
σSdept = ‘IS’(Student)
σ条件(对应表)
σSage < 20(Student)
查询年龄<20的全体学生
投影
按列查询
πSname,Sdept(Student)
π列(对应表)
连接
一般连接:按条件连接,重复列通过别名的形式保留
自然连接:按相同列等值连接,合并重复列
悬浮元组:自然连接时某些为null的值行会被除去,悬浮元组能够保留存在null的列(也就是常用的外连接)
左(右)外连接的区别就在于:只保留左(右)的悬浮元祖
除运算
同时考虑行和列。
关系R和关系S拥有共同的属性B、C , R÷S得到的属性值就是:关系R包含而关系S不包含的属性、的像集,在S中至少存在对应的投影的 属性值
(此处至少的意思是可多不可少)
听起来绕口,如上图所示:
易得
在R关系中A属性的值可以取{ a1,a2,a3,a4 }
a1值对应的象集为 { (b1,c2) , (b2,c1) , (b2,c3) }
a2值对应的象集为 { (b3,c7) , (b2,c3) }
a3值对应的象集为 { (b4,c6) }
a4值对应的象集为 { (b6,c6) }
关系S在B、C上的投影为 { (b1,c2) , (b2,c1) , (b2,c3) }
显然,只有a1的象集在S中有对应的投影,因此R÷S=a1;
R÷S=查询R中有S的列,并排除S;S其实是等值条件;
大白话就是:满足条件S的所有R
SQL语言中没有全称量词,具体实现时可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。
解决这类的除法问题一般采用双嵌套notexists来实现带全称量词的查询,解决所谓forall的问题。
练习:
学出满足下列要求的关系表达式
学生关系S(SNO, SNAME,AGE,SEX)
选课关系SC(SNO,CNO,grade)
课程关系C(CNO,CNAME,TEACHER)
(1) 检索学习课程号为C2的学生学号与成绩
π SNO,grade (σ CNO=‘C2’(SC))
(2) 检索学习课程号为C2的学生学号与姓名
π SNO,SNAME (σ CNO=‘C2’(S⋈SC))
(3) 检索选修课程名为MATHS的学生学号与姓名
π SNO,SNAME (σ CNAME=‘MATHS’(C⋈(SC⋈S)))
(4) 检索选修课程号为C2或C4的学生学号
π SNO(σ CNO=‘C2’ ∪ CNO=‘C4’ (SC) )
(5) 检索至少选修课程号为C2或C4的学生学号
select SNO
from SC
where CNO=“C2” or CNO=“C4”
group by SNO
having count(*)>1
(6) 检索不学C2课的学生姓名与年龄
π SNAME,AGE (σ CNO!=‘C2’(SC⋈S) )
(7) 检索学习全部课程的学生姓名
π SNAME (π SNO,SNAME (S) ⋈ (CNO(SC) ÷ π CNO(S)))
:查询至少选修1号课程和3号课程的学生号码 。
建立临时关系
K:
Cno
1
3
πSno,Cno (SC)÷K
概念模型,逻辑模型,物理模型,分别站在三个世界看
查看1.3
关系是一张表,一开始一直无法理解这句话。
表本身哪里来的关系?
这个关系不是指某某之间具有联系,而是“将一堆东西放在一起,建立起联系,这堆东西,称为关系”。
这堆东西,就是属性(字段)
比如说:学号,姓名,年龄…等等不应该带入常识,觉得他们是一体的,他们就是A,B,C,D…,它们放到一堆(在一个表中),建立联系,这个联系就是关系。
这里的关系不是实体间的关系,不是表间关系,是多个属性形成一个东西,叫做关系。
表间通常称为联系。