回顾
前一堂最后在研究数据库系统结构,这也是引言最后部分。数据库系统结构包括数据库本身、数据库使用人员、编译器等。在引言整个部分,我们对数据库大体结构上有了大致的了解(模糊、大范围的了解)。
数据库这门课重点聚焦于数据库本身,并不是很关心数据库使用人员、数据库背后的编译处理器等。所以从本篇开始我们便关心数据库本身的知识(数据库设计、数据库使用等)。
对于设计一个数据库来说选择一个数据库模型是最重要的。而现阶段数据库模型中最流行的就是关系模型,所以我们先来研究关系模型。
关系模型
历史与现状
组成成分
研究任何数据库模型都考虑三个方面:数据结构、操作方式、完整性约束
数据结构——关系
单一的数据结构——关系:从数学角度,现实世界的实体以及实体间的各种联系均可用关系来表示
数据结构的逻辑结构——二维表:从用户角度,关系可视化体现出来就是一张张二维表格
关系定义
定义:
笛卡尔积 的子集叫做在域(相同数据结构的数据的集合) 、 、 、 上的关系
理解
一、关系是笛卡尔积中有意义的子集(无限关系在数据库中没有意义)
二、关系在逻辑结构上可以表示为二维表
三、关系的表示:关系名+属性名(属性名的添加消除了笛卡尔积下关系的有序性)
四、关系由许多元组组成
五、域本身没有意义,也不存在关系,因为笛卡尔积才产生关系
六、关系的本质就是一种抽象归纳化的概念,就是让域之间产生联系,从而抽象为某种关系
关系性质
注意:在数据库中实际使用时,考虑到效率问题,会允许重复元组的存在
关系和关系模式
关系:是某一关系模式下,随时间变化的一个值(像面向对象编程中的对象)
关系模式:是关系的描述,包括关系名、关系属性、关系映像等(像面向对象编程中的类)
难点概念理解
1、任何实体都可以有一系列属性(元组)来代替。任何世界上的事物本质都是一堆数据的集合。
2、实体间的产生联系都可以通过属性的交融(由旧元组通过笛卡尔积形成新元组)来实现。
3、实体间的联系也可以认为是关系与关系间的引用,用外码来体现。
举个栗子:
学生+课程=学生选课关系
老师+课程=教师授课关系
学生+老师+课程=学生课程信息查询关系/教师授课信息查询关系
综上:实体和实体的联系都可以用关系来表示
关系属性的分类
每张表都有不同的属性,但是这些属性在表格中的地位不同。同时通过笛卡尔积形成的新表格之间的联系也体现在属性之间的交融,所以更加深入地研究关系模型表格中的属性是非常有必要的。
一、超码(superkey)
是一个或多个属性的集合,这些属性能够唯一确定一个元组
二、候选码(candidate key)
是一个或多个属性的集合,这些属性都是超码,但是其任意真子集都不是超码
三、主码(primary key)
候选码中可以选择一个作为主码,用来当作表中元组的唯一标识
四、外码(Foreign key)
关系R中的一个属性,它和关系S的主码相对应,那么就称这个属性为R的外码(R和S可以是同一关系)
图中班长属性与学号属性相对应,而学号属性又是同一张表的元组。所以也可以称班长为外码。
完整性约束
目的:
完整性约束目的是为了保护数据库本身的安全,防止用户在使用数据库时向数据库中添加了非法数据
分类:
实体完整性、参照完整性、用户完整性
实体完整性
意义
现实世界中的每一个实体都是相互可区分的(世界上没有两片完全相同的树叶),所以在数据库中每一个元组也都必须是相互可以区分的。
实现
关系的主码属性值不能为空值
空值
不知道或无意义的值。和0或空字符串不相同
课堂小练
结果为:null、null、false、true、null、null、true、false
参照完整性
意义
参照属性在另一个关系中属于主码,表示两个关系之间存在联系。如果在参照关系中其参照属性不是被参照关系中的值,那么代表参照关系参照了一个并不存在的实体,这在现实世界中是不允许的(例如一名学生选了一个并不存在的课程,这是不合理的)
实现
参照属性在另一个关系中属于主码,表示两个关系之间存在联系。所以在参照关系中,其参照的对象(被参照关系)必须是被参照关系中的值(两个元组存在关系)或者空值(该元组并未实际链接上关系)
特别注意点
一、如果外码由多个属性组成,参照时一定要一一对应,而不是分别对应(看成一个整体对应)
二、参照关系、被参照关系可以是同一个关系(外码和其对应的主码可以在同一个关系中)
用户完整性
定义
用户根据应用的实际情况对数据具体设置的限制
例子
如gender要求取值为“1”或“2”,考试成绩在0-100之间
课堂小练习
结果为:Y、N、N、Y、N、Y、N
模式图
可视化体现数据库表以及表之间关系的一种方式
特点:
一、有下划线的属性表示主码
二、箭头表示参照关系与被参照关系(箭头指向被参照关系的被参照属性)
总结
本文的所有知识点、图片均来自《数据库系统概念》(黑宝书)、山东大学李晖老师PPT。不可用于商业用途转发。
本来想讲完关系代数的,但是篇幅实在太长啦~~本篇已经码了两个多小时了
如果能帮助到大家,大家可以点点赞、收收藏呀~