第一章 绪论
1.1 数据库系统概论
1.1.1 数据、数据库、数据库管理系统、数据库系统
一、数据(Data)
数据是数据库中存储的基本对象
定义:描述事物的符号记录被称为数据。描述事物的符号可以是数字,也可以是文字、图形、图像、声音、语言等,数据有种表现形式,它们都可以经过数字化后存入计算机。
二、数据库(DataBase,简称DB)
数据库是长期存储在计算机内、有组织、可共享的大量数据的集合。
数据库数据具有永久存储、有组织和可共享三个基本特点。
三、数据库管理系统(DataBase Management System,DBMS)
- 数据定义功能:DBMS 提供数据定义语言(DataBase Definition Language,DDL)用户通过它可以方便地对数据库中的对象进行定义。
- 数据组织、存储和管理: DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据。数据的存取路径等。
- 数据操纵功能:DBMS提供数据操纵语言(Data Manipulation Language DML),用户可以使用DML操纵数据,实现对数据库的基本操作,例如查询、插入、删除和修改等。
- 数据库的事务管理和运行管理:数据库在建立、运用和维护的时由数据库管理系统统一管理、统一控制,以保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。
- 数据库的建立和维护功能:数据库的输入、转换功能,数据库的转储、恢复功能、数据库的重组织功能和性能监视、分析功能等。
四、数据库系统(DataBase ,DBS)
数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。
1.1.2 数据管理技术的产生和发展
数据管理技术经过了人工管理、文件系统、数据库系统3个阶段。
一、人工管理阶段
人工管理阶段有以下特点:
- 数据不保存
- 应用程序管理数据
- 数据不共享
- 数据不具有独立性
缺点:数据的逻辑结构和物理结构发生变化后,必须对应用程序做相应的修改,这就加重了程序员的负担。
二、文件系统阶段
用文件系统管理数据具有如下的特点:
- 数据可以长期保存
- 由文件系统管理数据
缺点:
- 数据共享性差,冗余度大
- 数据独立性差(只和一个程序绑定不是大家都可以访问的)
三、数据库系统阶段
用数据库系统管理数据具有如下特点:
- 数据结构化
- 数据的共享性高,冗余度低,易扩充
- 数据独立性高
- 数据由DBMS统一管理和控制
1.2 数据模型
数据模型(Data Model)也是一种模型,它是对现实世界叔觉得抽象。数据模型就是现实世界的模拟。
1.2.1 两类数据模型
数据模型应满足三方面的要求:
- 能比较真是滴模拟现实世界
- 容易为人所理解
- 便于在计算机上实现
概念模型(Conceptual Model):
概念模型也称为信息模型,它是按照用户的观点来对数据和信息建立模型,主要用于数据库的设计。
逻辑模型和物理模型:
- 逻辑模型主要包括层次模型(Hierachical Model)、网状模型(Network Model)、关系模型(Relational Model)、面向对象模型(Object Oriented Model)和对象关系模型(Object Realtional Model)等。它是按计算机系统的观点对数据建模,主要用于DBMS的实现。
- 物理模型是对数据最底层的抽象,他描述数据在系统内部的表示方法和存储方法,在磁盘或者磁带上的存储方式和存取方式,是面向计算机的。
1.2.2 数据模型的组成要素
数据模型通常由数据结构、数据操作和完整性约束三部分组成。
一、数据结构
数据结构描述数据库的组成对象之间以及对象之间的联系。数据结构所描述的对象类型的集合,是对系统静态特性的描述。
二、数据操作
数据库主要有查询和更新(包括插入、删除、修改)两大类操作。数据操作是对系统动态特性的描述。
三、数据的完整性约束条件
数据完整性约束条件是一组完整性规则。
【例】在关系模型中,任何关系必须满足实体完整性和参照完整性两个条件。
【例】在某大学的数据库中规定教授的退休年龄是65周岁,男教职工的退休年龄是60周岁,女职工的退休年龄是55岁。
1.2.3 概念模型
概念模型是现实世界到机器世界的一个中间层次,表现为:
- 概念模型用于信息世界的建模
- 现实世界到信息世界的第一层抽象
- 数据库设计人员进行数据库设计的有力工具
- 数据库设计人员与用户之间进行交流的语言
概念模型的要求:
- 具有较强的语义表达能力
- 能够方便、直接地表达应用中的各种语义知识
- 简单、清晰、易于用户理解
一、信息世界中的基本概念
1.实体(Enity)
客观存在并可以互相区别的实物被称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系。
【例】一个职工、一个学生、一个部门、一门课、学生的每一次选课都是实体。
2.属性(Attribute)
实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
【例】学生实体可以由学号、姓名、性别、出生年月份、所在学院、入学时间等属性所组成,这些属性组合起来表征了一个学生。
3.码(Key)
唯一标识实体的属性集称码。
【例】学号是学生实体的码。
4.域(Domain)
域是一组具有相同数据类型的值的集合。属性的取值范围来自于某个域。
【例】学号的域为8位整数,学生年龄域为整数,学生性别的域为(男,女)
5.实体型(Entity Type)
具有相同属性二队实体必然具有共同的特征和性质。用实体名以及其属性名集合来抽象和刻画同类实体,称为实体型。
【例】学生(学号,姓名,性别,出生年月)就是一个实体型。
6.实体集(Emtity set)
同一类型的实体的集合称为实体集。
【例】全体学生就是一个实体集。
7.联系(Relationship)
在现实生活中,事物内部以及事物之间是有联系的,这些联系在信息世界中反应为实体(型)内部的联系和实体(型)之间的联系。
实体内部的联系通常是指实体的个属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。
二、两个实体型之间的联系
1.一对一联系(1:1)
如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。
【例】学校里面,一个班级只有一个正班长,而一个班长只在一个班级中任职,则班级与班长之具有一对一的联系。
2.一对多联系(1:n)
如果对于实体集A中的每一个实体,实体集B中有n个实体(n>=0)与之联系,反之对于实体集B中的每一个实体,实体集A中至多有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n。
【例】一个班级中有若干名学生,而每个学生只在一个班级中学习,则班级与学生之间具有一对多的联系。
3.多对多联系(m:n)
如果对于实体集A中的每一个实体,实体集B中有n个实体(n>=0)与之联系,反之,对与实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系,记为m:n。
【说明】实际上,一对一联系是一对多联系的特例,一对多联系又是多对多联系的特例。
三、两个以上的实体型之间的联系
两个以上的实体型之间存在着一对一、一对多、多对多的联系。
若实体型E1、E2.....En之间存在着联系,对于实体型Ei(j=1,2,.....,i-1,i+1,......,n)中的给定实体,最多只和Ei中的一个实体相联系,则说明Ei与E1,E2,......Ei-1,Ei+1,....,En之间相联系是一对多的。
【例】对于课程,教师参考书3个实体型,如果一门课程可以由若干个教师讲授,使用若干本参考书,而每一个教师只讲授一门课程,每一本参考书只提供一门课程使用,则课程与教师、参考书之间的联系是一对多的。
四、单个实体型内的联系
同一个实体集内的各实体之间可以存在一对一、一对多、多对多的联系。
【例】职工实体型内部具有领导与被领导的联系,即某一个职工(干部)“领导”若干名职工,而一个职工仅被另外一个职工直接领导,因此这是一对多的体系。
五、概念模型的一种表示方法:实体-联系图(E-R图)(重点)
E-R图提供了表示实体型、属性和联系的方法让你每天打游戏
实体型:用矩形表示,矩形框内写明实体名。
属性:用椭圆形表示,并向无向边将其相应的实体型连接起来。
【例】学生实体具有学号、姓名、性别、出生年份、系、入学时间等属性。
联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁边标上联系的类型(1:1,1:n,m:n)。
【注意】如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。
【例】如果用“供应量”来描述“供应”的属性,表示某供应商供应了多少数目的零件给某个项目。那么这三个实体及其之间联系的E-R图如下:
六、一个实例
用E-R图来表示某个工厂物资管理的概念模型。
物资管理涉及的实体有:
- 仓库属性有仓库号、面积、电话号码
- 零件属性有零件号、名称、规格、单价、描述等
- 供应商属性有供应商号、姓名、地址、电话号码、账号
- 项目属性有项目号、预算、开工时间
- 职工属性有职工号、姓名、年龄、职称
对实体的联系分析如下:
- 一个仓库可以存放多种零件,一个零件可以存放在多个仓库之中,因此仓库和零件是多对多的联系。用库存量来表示在仓库中的某种零件的数目。
- 一个仓库有多个职工当仓库的保管员,但是一个职工只能在一个仓库工作,因此仓库和职工之间是一对多的联系。
- 职工之间具有领导和被领导的关系。即仓库主任领导报关员,因此职工实体中具有一对多的联系。
- 供应商、项目和零件三者之间有多对多的联系。一个供应商可以供给若干项目多种零件,每个项目可以使用不同供应商供应的零件,每种零件可以由不同的供应商供给。
实体和属性的E-R图(因为属性E-R图很好画,这里将只给出一个,不再重复)
实体及其联系的E-R图:
完整的E-R图只要把属性的都用无向边加上去就可以了,我懒我不画了
1.2.4 最常用的数据模型
目前,数据库领域中最常用的逻辑数据模型有:层次模型(Hierarchical Model)、网状模型(Network Model)、关系模型(Relationship Model)、面向对象模型(Object Orient Model)、对象关系模型(Object Relational Model)。
1.2.5 关系模型
一、关系数据模型的数据结构
关系(Relation):一个关系对应通常说的一张表,如下面这个学生登记表;
元组(Tuple):表中的一行为一个元组
属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即为属性名
【例】下表有6列,对应6个属性(学号、姓名、年龄、性别、系名和年级)
学号 | 姓名 | 性别 | 系名 | 年级 |
2005004 | 王小明 | 女 | 社会学 | 2005 |
2005006 | 黄大棚 | 男 | 商品学 | 2005 |
2005008 | 张文斌 | 女 | 法律 | 2005 |
... | ... | ... | ... | ... |
码(Key):也称为码键。表中的某个属性组,他可以唯一确定一个与元组;如上表中的学号,可以唯一确定一个学生,也就成为本关系的码;
域(Domain):属性的取值范围,年龄一般在1-150之间;
分量:元组中的一个属性值
关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,属性3,....属性n)
【例】上面的关系可以描述为:学生(学号、姓名、年龄、性别、系名、年级)
【例】学生、课程、学生与课程之间的多对多的联系在关系模式中可如下表示:
学生(学号,姓名,年龄,性别,系名,年级)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)
二、关系数据模型的操纵与完整性约束
关系数据模型的操作主要包括查询、插入、删除和更新数据。这些操作必须满足关系的完整性约束条件。
关系的完整性约束条件包括三大类:
- 实体的完整性
- 参照完整性
- 用户定义的完整性
下面对于上述三个完整性约束进行通俗易懂的解释:
实体完整性:能够确定一个实体,用多种属性等,例如每个学生都有一个学号而且学号是不同的且具有唯一性的。
参照完整性:和别人差不多,例如学生的基本信息取的属性应该是一样的,学号姓名等
用户定义完整性:根据用户的场景,来定义取值的范围,例如退休年龄是65岁,那么在职的教授都应该是在65岁以下的。
三、关系数据模型的优点
- 关系模型和格式化模型不同,它是建立在严格的数学概念的基础上的
- 关系模型的概念单一
- 关系模型的存取路径对用户透明,从而具有更高的独立性、更好的安全保密性也简化了程序员的工作和数据库开发建立的工作。
缺点:存取路径对用户透明导致查询效率往往不如非关系数据模型。
1.2.6层次模型
1.层次模型中的数据结构
在层次模型中,树的节点表示记录类型(也称实体),结点之间的连线表示相连的两个实体集之间的关系,这种关系只能是一对多(包括一对一)的联系。
层次模型的结构特点如下:
- 有且仅有一个根节点
- 根节点以外的其他节点有且仅有一个父结点。故而层次模型只能表示一对多的联系,不能直接表示多对多的联系。
2.层次模型的数据操控与完整性约束
层次模型的数据操纵主要有查询、插入、删除和修改。进行插入、删除、修改操作的时候需要满足层次模型的完整性约束。
进行插入操作时,如果没有相应的双亲结点值就不能插入子女结点。
进行删除操作时,如果删除双亲的结点值,则对应的子女结点值也被同时删除。
进行修改操作时,应该修改所以相应的几率,以保证数据的一致性。
3. 层次模型的存储结构
存储层次模型时,不仅要存储数据本身,还要存储数据之间的层次联系。
层次模型数据的存储常常是和数据之间的联系存储结合在一起的。常用的实现方法有两种:邻接法和链接法。
邻接法是指按照层次树前序穿越的顺序把所有的记录值依次临接存放,即通过物理空间的位置关系来体现层次顺序。
链接法是指利用指针来反映数据之间的层次联系。
4.层次模型的优缺点
优点:
- 数据模型简单,操作容易
- 实体间的联系是固定的,预先定义好的应用系统性能较高
- 提供良好的完整性支持
缺点:
- 不适合表示非层次性的联系
- 对插入和删除的限制较多
- 查询子女结点必须根据双亲结点
IMS数据库 最大的层次数据库。IBM合作开发,用于帮助阿波罗计划汇总的繁琐资料(主要是物料清单)。
操作语言是DL/I,嵌在COBOL中,目前也支持java。
1.2.7 网状模型
网状模型是指用有向图结构表示的实体类型及实体间的联系的数据模型。网状模型的典型代表是DBTG。
1.网状结构的数据结构
网状模型允许多个结点没有父结点,允许结点有多个父结点,允许两个结点之间有多种联系。在网状模型中,每个结点表示一个记录类型的(实体),每个记录类型可以包含若干个字段(实体的属性),结点间的连线表示的是给记录类型(实体)间的父子关系。
网状模型与层次模型的根本区别是:
- 一个子结点可以有多个父结点
- 在两个结点之间可以有多两种或者多种联系
显然,层次模型是网状模型的特殊形式,网状模型是层次模型的一般形式。
2.网状模型的数据操纵和完整性约束
网状模型的数据操作主要包括查询、插入、删除和修改数据。
进行插入操作时,允许插入尚未确定双亲结点值的子女结点值。
进行删除操作时,允许只删除双亲结点值。
进行修改操作时,可以直接表示非树型的结构,而无需像层次结构那样增加冗余的结点,因此修改操作只需要更新指定记录即可。
3.网状结构的存储结构
网状模型的存储结构经常使用单向链接、双向链接、环状链接、向首链接等链接方法,此外还有用引元阵列法、二进制阵列法、索引法等其他实现方法。
4.网状结构的优缺点
优点:
- 能够更为直接的描述现实世界
- 具有良好的性能,存取的效率更高
缺点:
- 其数据定义语言(DDL)极其复杂
- 数据独立性较差
1.2.8面向对象数据模型
面向对象数据模型是面向对象的数据库模型的模型基础,是一种可以扩充的数据模型。。
1.对象标识
2.封装
每一对象是其状态和行为的封装
3.类
所有具有相同属性的方法的对象抽象出类。
4.继承
一个类可以继承类层次中其直接或者间接祖先的所有属性和发那个发。
5.消息
1.3 数据库系统结构
1.3.1 数据库系统模式的概念
模式是数据库中全体数据的逻辑结构和特征描述,同一个模式可以有很多实例。
【例】在学生选课数据库模式中,包括学生记录、课程记录、学生选课记录,则2003年中有一个学生数据库的实例,该实例包含了2003年学校中所有学生的记录(如果学校有10000个学生,则有10000个学生的记录)、学校开设的所有课程的记录和所有学生选课的记录。
1.3.2 数据库系统的三级模式结构
数据库系统的三级模式结构是指数据库系统由外模式、模式和内模式三级构成。
- 外模式根据需求返回数据给应用,供给应用程序使用
- 模式就是具体的数据库
- 内模式在实际的物理上哪里存储
- 模式之间的转换叫做映像
一、模式(Schema)
模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
它是数据库系统模式结构的中间层,挤不涉及数据的物理存储细节和硬件环境,也与具体的应用程序、所使用的的应用开发工具及高级程序设计语言(如C,COBOL)无关。
二、外模式(External Schema)
外模式也成子模式(Subschema)或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,它是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
【注意】
- 外模式通常是模式的子集,一个数据库可以有多个外模式
- 同一外模式也可以为某一用户的多个应用系统所使用,但是一个应用程序只能使用一个外模式。
- 外模式是保证数据库安全的一个有力措施。每个用户只能看见和访问对应的外模式中的数据,数据库其余数据是不可见的。
三、内模式(Internal Schema)
内模式也称为存储模式(Storage Schema),一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。
1.3.3 数据库的二级映像功能与数据独立性
数据库系统的三级模式是对数据的3个抽象级别,他对数据的具体组织留给DBMS管理,使用户能逻辑地抽象低处理数据,而不必关心数据在计算机中的具体表示方式和存储方式。
数据库管理系统在这三级模式中提供了两层映像:
外模式/模式映象
模式/内模式映像
两层映像保证了数据库中的数据能够具有较高的逻辑独立性和物理独立性。
1.4 数据库系统的组成
数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统和数据库管理员构成。
一、硬件平台以及数据库
硬件资源要求:
- 要有足够大的内存,存放操作系统。DBMS的核心模块、数据缓冲区和应用程序
- 要足够大的磁盘或磁盘阵列等设备存放数据库,渔鸥足够的磁带(或者光盘)作数据备份
- 要求系统有较高的通道能力,以提高数据传送速率
二、软件
数据库系统的软件主要包括:
- DBMS。DBMS是为数据库的建立、使用和维护配置的系统软件。
- 支持DBMS运行的操作系统。
- 具有与数据库借口的高级语言以及编译系统,便于开发应用程序。
- DBMS为核心的应用开发工具。
- 为特定应用环境开发的数据库应用系统。
三、人员
开发、管理和使用数据库系统的人员主要是:数据库管理员、系统分析员和数据库设计人员、应用程序员和最终用户。不同的人员涉及到不同的数据抽象级别,具有不同的数据视图,如下图所示:
1.数据库管理员(DataBase Administrator,DBA)
需要有专门的管理机构来监督和管理数据库系统。DBA则是这个机构的一个(组)人员,负责全面监管和控制数据库系统。具体职测包括:
(1)决定数据库中的信息内容和结构,数据库中要存放那些信息,DBA要参与决策
(2)决定数据库中的存储结构和存取策略
(3)定义数据的安全性要求和完整性约束条件
(4)监控数据库的使用和运行
(5)数据库的改进和重组重构
2.系统分析员和数据库设计人员
系统分析员负责应用系统的需求分析和规范说明,要和用户及DBA相结合,确定系统的硬件软件配置,并参与数据库系统的概要设计。
数据库设计人员负责数据库中数据的确定、数据库各级模式的设计。
3.应用程序员
应用程序员负责设计和编写应用程序的程序模块,并进行调试和安装
4.用户
这里用户是指最终用户(End User)。最终用户通过应用程序的用户接口使用数据库。
2024.1.14
第二章 关系数据库
2.1 关系数据结构以及形式化定义
2.1.1 关系
单一的数据结构——关系
现实世界的实体以及实体间的各种联系军用关系来表示
逻辑结构——二维表
从用户角度,关系模型中数据的逻辑结构是一张二维表
关系模型是建立在集合代数的基础上
1.域(Domain)
【定义】域是一组具有相同类型的值的集合
【例】整数、实数、介于某个取值范围的整数、指定长度的字符串集合,{“男”、“女”}等等。
2.笛卡尔积(Cartesian Product)
【定义】给定一组域D1,D2,.....,Dn,这些域可以是相同的。D1,D2,...,Dn的笛卡尔积为:
D1×D2×....×Dn={(d1,d2,....,dn)|di∈Di,i=1,2,.....,n}.所有域的所有取值的一个组合。
单纯的看有点抽象,所以在这里我决定给出一个更抽象的例子!
【例】D1=字母的集合={A,B},D2=数字的集合={1,2},D3=符号的集合={@,#}
则D1,D2,D3的笛卡尔积为:
D1×D2×D3={(A,1,@),(A,1,#),(A,2,@),(A,2,#),(B,1,@),(B,2,@),(B,1,#),(B,2,#)}
元组(Tuple)
笛卡尔积中的每一个元素(d1,d2,d3,....,dn)称作是一个n元组(n-tuple)或简称元组(Tuple)。
【例】(A,1,@)(A,2,#)等都是元组。
分量(Component)
笛卡尔积元素(d1,d2,.....,dn)中的每一个值的di称作一个分量。
【例】A,2,@等都是分量。
基数(Cardinal number)
若Di(i=1,2,....,n)为有限集,其基数为(i=1,2,....,n),则××....×的基数M为:
笛卡尔积的表示方法:笛卡尔积可以表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。
上面的可能说的不是那么的通俗易懂,接下来Ares用最简单的方法来说明到底什么是基数,(A,1,@)(A,2,#)的基数都为3,这也就是说一个括号里面有多少个元素那个基数就是几。我们上面一共是有三个集合分别为:字母的集合,数字的集合还有符号的集合,每个集合里面有两个元素,那么基数就是2*2*2=8.
3.关系(Relation)
(1)关系
××....×的子集称作在域,,....,的关系,表示为R(,,....,)
R表示关系名,n表示关系的目或度(Degree)
(2)元组
关系中的每个元素是关系中的元组,通常用t表示。
(3)单元关系与二元关系
当n=1时,称作该关系为单元关系(Unary relation)或者一元关系
当n=2时,称作搞关系为二元关系(Binary relation)
(4)关系的表示
关系也是一个二维表,表的每一行对应一个元组,表的每列对应一个域,一个属性
导师 | 专业信息 | 姓名 |
韩博林 | 人工智能 | 姜走走 |
杨泰铭 | 物联网工程 | 帅帅 |
王夹心 | 计算机科学与技术 | 广为 |
(5)属性
关系中不同列可以对应相同的域,为了加以区分,必须给列起一个名字,称为属性(Attribute)。
n目关系必有n个属性。
(6)码
候选码(Candidate key):若关系中的某一属性组的值能唯一地表示一个元组,则称该属性码为候选码。
简单的情况:候选码只包含一个属性。
全码(All-key):最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)。
主码:若一个关系有多个候选码,则选定其中一个为主码(Primary)
主属性:候选码的诸属性称为主属性
非主属性:不包含在任何候选码中的属性(Non-Prime attribute)或非码属性(Non-key attribute)。
注意:码不一定指的是一个属性,也可能指多项属性,在没有一个属性能作为码的时候,全码就是指的是最坏的情况,所有的属性一起才算是一个码。
【说明】,,....,的笛卡尔积的自己不是都有实际意义,只有某个自己才有实际意义。
【例】上面题目中的导师,专业和姓名的笛卡尔积其实就没有实际意义。取出有实际意义的元组来构造关系。
关系:SAP(导师,专业,姓名)
假设:导师与专业:1:1,导师与学生1:1
主码:姓名(假设所有的学生不会重名)
SAP关系有实际含义的子集之一,包含三个元组:{(韩博林,人工智能,姜走走),(杨泰铭,物联网工程,帅帅)(王夹心,计算机科学与技术,广为)}
(7)三类关系
- 基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示。
- 查询表:查询结果对应的表。
- 视图表:由基本表或者其他视图表导出的表,是虚表,不对应实际存储的数据。
(8)基本关系的性质
- 列是同质的
- 不同的列可以出自同一个域,其中每一列称为一个属性,不同的属性要给予不同的属性名
- 列的顺序无所谓,列的次序可以任意交换
- 任意两个元组的候选码不能相同
- 行的顺序无所谓,行的次序可以任意交换
- 分量必须取原子值,这是规范条件中最基本的一条
2024,1,16 哥们 你都看到这里了吗,我明天会更的(前提是我不懒)
2.1.2 关系模式
1.什么是关系模式
关系模式是对关系的描述。关系模式是模型,关系是值。
(1)元组集合的结构
属性构成、属性来自域、属性与域之间的影响关系
(2)一个关系通常由富裕他的元组语义确定。
(3)现实世界中还存在着完整性约束。
2.定义关系模式
关系模式可以形式化地表示为:R(U、D、DOM、F)
R:关系名
U:组成该关系的属性名的集合
D:属性组U中属性所来自的域
DOM:属性向域的映象集合
F:属性间的数据依赖关系集合
【例】导师和研究生出自同一个域——人,因此取不同的属性名并在模式中定义属性向域的影响,即说明他们分别出自哪个域:
DOM(SUPERVISOR——PERSON)=DOM(POSTGRADUATE——PERSON)=PERSON
3.关系模式与关系
关系模式是静态的、稳定的。
关系式动态的、随时间不断变化的。
关系是关系模式在某一时刻的状态或内容,在实际工作中关系模式和关系往往统称为关系,需要通过上下文加以区别。
2.1.3 关系数据库
1.关系数据库
在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
2.关系数据库的型与值
(1)关系数据库的型:关系数据库的模式,对关系数据库的描述。
(2)关系数据库的模式:若干域的定义,在这些域上定义的若干关系模式。
(3)关系数据库的值:关系模式在某一时刻对应的关系的集合简称为关系数据库。
2.1.4 关系模型的存储结构
1.有的关系数据库管理系统中一个表对应一个操作系统文件
2.有的关系数据库管理系统从操作系统那里申请若干文件,自己划分文件空间,组织表。索引等存储结构,并进行存储管理。
2.2 关系数据结构
2.2.1 基本关系操作
一、常用的关系操作
查询:选择、投影、连接、除、并、交、差等,其中选择、投影、并、差、笛卡尔积是五种基本操作。
数据更新:插入、删除、修改
查询的表达能力是其中最主要的部分
二、关系操作的特点
集合操作方式:操作的对象和结果是集合,一次一集合的方式。
2.2.2 关系数据库语言的分类
一、关系代数语言
用对关系的运算来表达查询要求。代表:ISBL
二、关系演算语言
用为此来表达查询的要求。
(1)元组关系演算语言:谓词变元的基本对象是元组 变量
代表:APLHA,QUEL
(2)域关系演算语言:谓词变元的基本对象域变量
代表:QBE
三、具有关系代数和嘎UN稀盐酸 双重特点的语言
代表:SQL(Structured Query Language)
2.3 关系的完整性
关系模型中有三种完整性约束:实体完整性、参照完整性、参照完整性和用户定义的完整性。
其中实体完整性、参照完整性是模型必须满足的完整性约束条件,称为关系的两个不变性,应该由关系系统自动支持。
用户定义完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
2.3.1 实体完整性
实体完整性规则(Enity Integrity)是指若属性A是基本关系R的主属性,则属性A不能取空值。
空值就是“不知道”或“不存在”或“无意义”的值。
【例】SAP(SUPERVISOR,SPECIALLITY,POSTGRADUATE)
POSTGRADUATE:主码(假设研究生不会重名)不能取空值
实体完整性规则的说明:
(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实生活世界的一个实体集。
(2)现实世界中实体是可以区分的,即他们具有某种唯一性标识。
(3)关系模型中以主码作为唯一性标识。
(4)主码中的属性即主属性不能取空值。
主属性去空值,就说明存在某一个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则被称为实体完整性。
【注意】实体完整性规则规定基本关系的所有主属性都不能取空值
【例】选修(学号、课程号、成绩)
“学号、课程号”为主码,则学号和课程号两个属性不能取空值。
2.3.2 参照完整性
在关系模型中实体及实体间的联系都是用关系来描述的,存在着关系和关系间的引用。下面我们举几个例子。
【例】学生实体、专业实体
学生(学号、姓名、性别、专业好、年龄)
专业(专业号,专业名)
学生关系引用了专业关系的主码“专业号”。
学生关系中的“专业号”值必须是确实存在的专业的专业号,即专业关系中有该专业的记录。
学号 | 姓名 | 性别 | 专业号 | 年龄 |
801 | 张三 | 女 | 01 | 19 |
802 | 李四 | 男 | 01 | 20 |
803 | 王五 | 男 | 01 | 20 |
804 | 赵六 | 女 | 01 | 20 |
805 | 钱七 | 男 | 01 | 19 |
专业号 | 专业名 |
01 | 信息 |
02 | 数学 |
03 | 计算机 |
【例】学生、课程、学生与课程之间的多对多联系
学生(学号、性别、性别、专业号、年龄)
课程(课程号、课程名、学分)
选修(学号、课程号、成绩)
学号 | 姓名 | 性别 | 专业号 | 年龄 |
801 | 张三 | 女 | 01 | 19 |
802 | 李四 | 男 | 01 | 20 |
803 | 王五 | 男 | 01 | 20 |
804 | 赵六 | 女 | 01 | 20 |
805 | 钱七 | 男 | 01 | 19 |
课程号 | 课程名 | 学分 |
01 | 数据库 | 4 |
02 | 数据结构 | 4 |
03 | 编译 | 4 |
04 | PASCAL | 2 |
学号 | 课程号 | 成绩 |
801 | 04 | 92 |
801 | 03 | 87 |
801 | 02 | 65 |
802 | 03 | 98 |
802 | 04 | 76 |
803 | 04 | 81 |
2.外码(Foreign Key)
定义:设F是基本关系R的一个或一组属性,但不是没关系R的码。如果F与基本关系S的主码相对应,则称F是基本关系R的外码。
基本关系R称为参照关系。
基本关系S称为被参照关系或者目标关系。
【例】选修关系的“学号”与学生关系的主码“学号”相对应;选修关系的“课程号”与课程关系的主码“课程号”相对应。
“学号”和“课程号”是选修关系的外码;
学生关系和课程关系均为被参照关系;
选修关系为参照关系。
【说明】
- 关系R和S不一定是不同的关系;
- 目标关系S的主码和参照关系的外码F必须定义在同一个或同一组域上
- 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同的关系时,往往取相同的名字以便于识别。
3.参照完整性规则
参照完整性规则:若属性(或属性组)F是基本关系R的外码,他与基本关系S的主码相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性均为空值);
或者等于S中某个元组的主码值。
2.3.3 用户定义的完整性
针对某一具体关系数据库的约束条件,反应某一具体应用所涉及的数据必须满足语义要求。
关系模型应提供定义和经验这类完整性的机制,以便用统一的系统方法处理他们,而不要由应用程序承担这一功能。
【例】课程(课程号,课程名,学分)
“课程号”属性必须取唯一的值,非主属性“课程名”也不能取空值,“学分”属性只能取值{1,2,3,4}。
2024.1.21 真好
2024.3.23 不好了,摆烂了好久,重新开始写
2.4 关系代数
关系代数是一种抽象查询语言,是对关系的运算来表达查询。
关系代数的运算对象是关系,运算结果也是关系。
关系代数按运算符的不同可以分为传统的集合运算和专门的关系运算。
集合运算是从关系的水平方向的即行角度进行。
专门的关系运算不仅涉及行而且涉及列。
运算符 | 含义 |
集合运算符 - × | 并 差 交 笛卡尔积 |
专门的关系运算符 | 选择 投影 连接 ÷ 除 |
2.4.1 传统的集合运算
1.关系R和S你相同的目n(即两个关系都有n个属性)相应的属性都取自于同一个域。
R和S的并运算表示为RS:RS={t|tRtS}。
运算结果为:n目关系,由属于R或属于S的元组组成。
【例】关系R与关系S的并运算。
R | S | RS | ||||||
A | B | C | A | B | C | A | B | C |
a1 | b1 | c1 | a1 | b2 | c2 | a1 | b1 | c1 |
a1 | b2 | c2 | a1 | b3 | c2 | a1 | b2 | c2 |
a2 | b2 | c1 | a2 | b2 | c1 | a2 | b2 | c1 |
a1 | b3 | c2 |
2.差(except)
关系R和S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域。
R和S的差运算表示为R-S:R-S={t|tRtS}。
运算结果为:n目关系,由属于R而不属于S的所有元组组成。
3.交(intersection)
关系R和S具有相同的目n(即两个关系都有n个属性),显影的属性取自于同一个域。
R与S的交运算表示为RS:RS=={tRtS,RS=R-(R-S)}。
运算结果为:n目关系,由即属于R又属于S的元组组成。
4.笛卡尔积(Cartesian product)
严格意义上来讲应该是广意的笛卡尔积(Extended Cartesian)
R:n目关系,K1个元组,S:m关系,K2个元祖
R与S的笛卡尔积运算表示为R×S:
运算结果为:行:K1×K2个元组,列:(n+m)列元组几个,其中元组的前n列是关系R的一个元组,后m列是关系S的一个元组。
【例】关系R与关系S的笛卡尔积
将就着看吧,能看懂最好了
2.4.2 专门的关系运算
关系运算包括:选择、投影、连接、除运算。
相关记号说明:
1.关系模式为R(A1,A2,...,An),他的一个关系为R,tR,表示t是R
的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个分量。
2.若A={Ai1,Ai2,...,Aik},期中Ai1,Ai2,....,是A1,A2,....,An中的一部分,则称A为属性列或属性组。
t[A]=(t[Ai1],t[Ai2],....,t[Aik]])表示元组t在属性列A上各个分量的集合。A表示{A1,A2,....,An}中去掉{Ai1,.....,Aik}后剩余的属性组。
3.R为n目关系,S为m目关系,R,S,称为元组连接。是一个n+m列的元组,前n个分量中为R中的一个n元组,后m个分量为S中的一个m元组。
4.给定一个关系R(X,Z),X和Z为属性组,当t[X]=x时,x在R中的象集(images Set),=[t[Z]|tR,t[X]=x},他表示R中属性X上值为x的诸元组在Z上的分量。
【例】求、、在关系R上的象集。
当X为x1时,Z取得的值就为x的象集
是的,因为我越来越懒了,所以就是说,你看懂了就好,别有多余的追求了
5.学生——课程数据库:学生关系,课程关系,选修关系
学号 | 姓名 | 性别 | 年龄 | 所在系 |
20121511 | 李永 | 男 | 20 | CS |
20121512 | 刘飞 | 男 | 18 | CS |
20121513 | 林那 | 女 | 19 | MA |
20121514 | 张帅 | 男 | 19 | IS |
学号 | 课程号 | 成绩 |
20121511 | 1 | 92 |
20121512 | 2 | 85 |
20121513 | 3 | 88 |
20121514 | 4 | 90 |
20121515 | 3 | 80 |
课程号 | 课程名 | 先行课 | 学分 |
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 3 |
6 | 数据处理 | 2 | |
7 | PASCAL | 6 | 4 |
2024.3.14 上晚课真的好烦好烦好烦呐
1.选择
选择又称为限制,在关系R中选择满足给定条件的诸元组,记作:
其中,表示比较运算符,他可以是><。X1、Y1等是属性名,或者为常量,或者为简单函数,属性名也可以用它的序号来代替。
2.投影
从R中选择除若干属性列组成新的关系。
其中:A:R中的属性列。投影操作主要从列的角度进行运算,投影之后不仅取消了原来关系中的某些列,而且还可能取消某些元组(避免重复行)
3.连接
又称为连接,表示从两个关系的笛卡尔乘积中选取属性间满足一定条件的元组。
A和B:分别为R和S上读书相等且可比的属性组。
:比较运算符
运算结果:从R和S的广义笛卡尔积R×S中选取(R关系)在A的属性组上的值与(s关系)在B属性组值上满足比较关系的元组。
两类常用连接运算:
1.等值连接
等值连接的含义:从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。
2.自然连接
自然连接是一种特殊的等值连接,两个关系中进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉。
自然连接的含义:R和S具有相同的属性组B
注意:自然连接还需要取消重复列,所以是同时从行和列角度进行运算的
悬浮元组: 两个关系R和S在自然连接时,关系R和S中被舍弃的元组被称为悬浮元组
外连接:如果把悬浮元组舍弃的元组也保存在结果中,而在其他属性上填空值(Null),这种链接叫做外连接。
左外连接:如果只保留左边的关系R中的悬浮元组叫做左外连接
右外连接:如果只保留右边的关系S中的悬浮元组叫做右外连接
2024.3.18 老师讲课真快
4.除(Division)
给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组,。R中的Y与S中的Y可以有不同的属性名,但是必须出自相同的域集。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:
元组在X上的分量值x象集Yx包含S在Y上的投影的集合,记作:
R÷S={tr[X]}|tr∈RπY(S)Yx}
Yx:x在R中的象集,x=tr[X]
【注意】除操作时同时从行和列的角度进行运算的。
【例】关系R、S的除法运算R÷S:
R | ||
A | B | C |
a1 | b1 | c2 |
a2 | b3 | c7 |
a3 | b4 | c6 |
a1 | b2 | c3 |
a4 | b6 | c6 |
a2 | b2 | c3 |
a1 | b2 | c1 |
S | ||
B | C | D |
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
R÷S |
A |
a1 |
好,上面这个表格看到了吧,现在来解释一下,看懂看不懂随缘。
首先,什么是象集呢,看上面的文字描述,给定关系R(X,Y)和S(Y,Z),我们上述的两个表就是R(A,B,C)和S(B,C,D)。在A中,当取得的值是a1的时候,BC能取得的值就是a1的象集。
这样的话,a1的象集就是(b1,c2)、(b2,c3)、(b2,c1)
这样的话,类比一下就求出了a2,a3的象集
a2的象集是(b3,c7)(b2,c3)
a3的象集是(b4,c6)
a4的象集是(b6,c6)
此时我们就找到了A取得的所有值的象集,接下来进行下面的运算,我们要找到一个象集包含了S中的BC,BC的取值在S中分别为(b1,c2)(b2,c1)(b2,c3),由此可以排除a2,a3,a4,a1包含了S中BC的取值,是不是突然通透了,这样的话我们就能算出R÷S为a1。
因为上面有点懒没写例题,在此补充一下很多符号的意思
:表示选取某一列,其他的都不要
:表示选取满足条件的行
两个组合的话就能选出某一格。
2.5 关系验算
关系演算是以数理逻辑中的谓词演算为基础的。按谓词变元的不同,关系演算可以分为元组关系演算和域关系演算。
2.5.1 元组关系演算语言ALPHA
元组关系演算以元组变量作为谓词变元的基本对象,一种淡定的元组关系演算语言是ALPHA语言。
ALPHA语言主要有GET,PUT,HOLD,UPDATE,DELETE,DROP 6条语句。
语句的基本格式是:
操作语句 工作空间名(表达式):操作条件
表达式用于说明要查询的结果,他可以是关系名或者是属性名。
操作条件是一个逻辑表达式,说明查询结果要满足条件,用于将操作结果限定在满足条件的元组之中,操作条件可以为空。
除此之外,还可以在基本格式的基础上,排序要求定额要求等。
1.检索操作
检索操作用GET语句实现。
(1)简单检索(即不带条件的检索)
Get W(SC.Cno)
【说明】W为工作空间名。这里条件为空,表示没有限定条件。
【例】查询所有学生的数据。
Get W(student)
(2)限定条件的查询
【例】查询信息系(IS)中年龄小于20岁的学生
GET W(Student.Sno,Student.Sage):Student.Sdept='IS'\wedgeStudent.Stage<20
(3)带排序的检索
【例】查询计算机科学系(CS)学生的学号、年龄,结果按照年龄降序排序。
GET W(Student.Sno,Student.Sage):Student.Sdepet='CS' DOWN Student.Sage
(4)指定返回元组的个数
【例】取出一个信息系学生的学号。
GET W(1)(Student.Sno):Student.Sdept='IS'
【例】查询信息系年龄最大的三个学生的学号以及其年龄,按照年龄降序排序。
GET W(3)(Student.Sno,Student.Sage):Student.Sdept='IS' DOWN Student.Sage
(5)用元组变量的检索
元组变量是在某一关系范围内变化(所以也称范围变量Range Variable),一个关系可以设置多个元组变量。元组变量主要有两方面的用途:
- 简化关系名。如果关系名字很长使用起来会感觉到不方便,这时可以设置一个较短的元组变量来代替关系名。
- 操作条件中使用量词时必须使用元组变量。 ALPHA语言用RANGE来说明元组变量。
【例】查询信息系学生的名字。
RANGE Student X
GET W(X.Sname):X.Sdept=‘IS'
本例子中X是关系Student上的元组变量,用使简化关系名,X代表Student。
(6)用存在量词的检索条件中使用量词时必须用元组变量。
【例】查询选修2号课程的学生名字。
RANGE SC X
GET W(Student.Sname):X(X.Sno=Student.SnoX.Cno='2')
【例】查询选修了这样课程的学生学号,其直接先行课是6号课。
RANGE Course CX
GET W(SC.Sno):CX(CX.Cno=SC.Cno CX.PCNO='6'
【例】查询至少选修一门其先行课为6号课程的学生名字
RANGE Course CX
SC SCX
GET W(Student.Sname): SCX (SCX.Sno=Stuent.Sno CX.Cno=SCX.CnoCX.Pcno='6'))
上述的元组关系演算共识可以变换为前束范式(Prenex normal form)的形式:
GET W(Student,Sname): SCXCX (SCX.Sno=Student.SnoCX.Cno=SCX.Sno CX.Pcno='6');
(7)带有多个关系的表达式检索
【例】查询成绩为90分以上的学生名字和课程名字
本查询所要求的结果是学生名字和课程名字,分别在Student和Course两个关系之中。
Range SC SCX
GET W(Student.Sname,Course.Cname):SCX(SCX.Grance>=90SCX.Sno=Student.SnoCourse.Cno=SCX.Cno);
(8)用全称量词的检索
【例】查询不选1号课程的学生的名字
RANGE SC SCX
GET W(Student.Sname):SCX(SCX.Cno≠Student.SnoSCX.Cno≠‘1’);
本例也可以用用存在量词来表示:
RANGE SC SCX
GET W(Student.Sname):反SCX(SCX.Sno=Student.SnoSCX.Cno='1');
(9)用两种量词的检索
【例】查询选修了全部课程的学生名字
RANGE Course CX
SC SCX
GET W(Student.Sanme):CX SCX(SCX.Sno=Student.SnoSCX.Cno=CX.Cno);
(10)用蕴涵的检索
【例】查询最少选修20125122学生所选课程的学生学号
【解析】对Course中的所有课程,一次检查每一门课程20121522是否选修了该课程,如果选修了,则再看某一个是否选修了该课程,。如果选修了,则再看某一个学生是否也选修了该门课程,如果对于210125122所选的没门课程都选修了,则该学生为满足要求的学生。
RANGE Course CX
SC SCX
SC SCY
GET W(Student.Sno):CX(SCX(SCX.Sno='20121522'SCX.Cno=CX.Cno)
SCY(SCY.Sno=Student.SnoSCY.Cno=CX.Cno));
2.更新操作
(1)修改操作
修改操作用UPDATE语句实现。步骤是:
- 首先用HOLD语句将修改的元组从数据库读到工作空间中区
- 然后用宿主语言修改工作空间中的元组属性值
- 最后用UPDATE语句将修改后的元组送回到数据库中
【注意】单纯检索数据使用GET语言即可,但为修改数据而读元组时必须使用HOLD语句,HOLD语言是带上并发控制的GET语句。