2.1关系模型基本概念
2.1.1关系模型概述
1.关系模型的组成?
①关系数据结构;
②关系操作集合;
③关系完整性约束。
2.关系数据结构有哪些?
tips:1.有意义:现实咋样就咋样(一个人不会属于学院A又属于学院B)。
2.一切皆集合
3.当关系作为关系数据库的数据结构时,需要对其进行限定,使其满足:
①无限关系在数据库中是无意义的
②通过为关系的每个列附加一个属性名的方法取消关系属性的有序性,即
本课程中提到的关系是被限定的“关系”。
2.1.2.4关系的性质
1.列是同质的——每一列中的分量来自同一域,是同一类型的数据。
2.不同的列可以来自同一个域,每列必须有不同的属性名。
3.列的次序可以任意交换:
5.每一分量必须是不可再分的数据。满足这一条件的关系称作满足第一范式(1NF)的
比如底下的这种就不行(费用底下还有好多其他的):
2.2关系模式
什么是关系模式?
关系也可以记作R(A1 , A2 ,…, An ) ;
属性向域的映象一般直接说明为属性的类型、长度等;
某一时刻对应某个关系模式的内容(元组的集合)称作关系;
关系模式是型,是稳定的。
2.2.1三类关系
1.基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示。
2.查询表:查询结果对应的表。
3.视图(又分为底下两类:
视图:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
物化视图:由基本表或其他视图表导出的表,存储数据。
2.3超码、候选码、主码、外部码
1.超码——是一个或多个属性的集合,这些属性的集合可以在一个关系中唯一地标识一个元组。(不唯一)
2.如关系S中关系中属性的集合,其值能唯一标识一个元组,其任意真子集均不是超码,这样的属性集合称作候选码。(不唯一)
候选码是最小的超码。
3.进行数据库设计时,从一个关系的多个候选码中选定一个作为主码。(唯一)
实体完整性规则规定基本关系的主码中的所有属性都不能取空值!
主码可以由多个属性组成!(毕竟 万物皆集合)
大部分主码由多个属性组成(比如 俩属性构成了主码,这俩属性就不能为null了)
4.外部码——关系R中的一个属性组,它不是R的主码,但它与关系S的主码相对应,则称这个属性组为R的外部码(R和S可以是同一关系)。
2.4数据库完整性
数据库完整性主要作用:
①防止合法用户使用数据库时向数据库中添加不合语义的数据;
②利用基于DBMS的完整性控制机制来实现业务规则,易于定义,容易理解,而且可以降低应用程序的复杂性,提高应用程序的运行效率;
③在应用软件的功能测试中,完善的数据库完整性有助于尽早发现应用软件的错误。
2.4.1实体完整性和参照完整性:
①是关系模型必须满足的完整性约束条件;
②称为关系的两个不变性,由关系系统自动支持。
2.4.2用户定义的完整性:
①应用领域需要遵循的约束条件,体现了具体领域中的语义约束;
②用户定义后,由关系系统自动支持。
2.4.3null
空值:不知道或无意义
注意:
数据库中所有的数据类型取值均可为null
空值不是0或者空字符串
在数据库中,=不是赋值,就是比较
10=null → null
2.4.4参照完整性
在关系模型中实体及实体间的联系都是用关系来描的,因此可能存在着关系与关系间的引用。
参照关系和被参照关系可以是同一个关系
2.5关系数据语言描述
关系数据语言的特点
1.一体化
一般关系系统的数据语言都同时具有数据定义、数据操纵和数据控制语言,而不是分为几个语言。对象单一,都是关系,因此操作符也单一。
2.非过程化
用户只需提出“做什么”,无须说明“怎么做”,存取路径的选择和操作过程由系统自动完成。
3.面向集合的存取方式
操作对象是一个或多个关系,结果是一个新的关系(一次一关系)。非关系系统是一次一记录的方式。
正常来说,运算结果的命名是:
关系名.属性名
(关系名不能有重复!)
2.6.5附加运算——θ连接
放俩例子,怕忘了:
2.6.6附加运算——自然连接
Example:
2.6.7基本运算——并运算
Example:
2.6.7基本运算——差运算
Example:
注意表与表之间的内容差异,免得写逻辑表达式的时候掉坑里QAQ
比如,查询未选修c1课程的学生学号,不能从SC表里面查,应该从学生大名单S中找:
这个分配律什么的,得多练练才会记得住QAQ
2.6.9基本运算——更名运算
关系被看作一个最小的关系代数表达式,可以将更名运算施加到关系上,得到具有不同名字的同一关系。这样一个关系在同一个表达式中出现多次时是必须的。
举个例子:
再来一个例子:
除运算:
给定关系R (X,Y) 和S (Y),其中X,Y为属性集合。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域。R与S的除运算得到一个新的关系P(X),P是R中
满足下列条件的元组在X属性集合上的投影:
这个属于就很有韵味(bushi),看不懂就看底下这个例子:
思路:因为这个属于,就是S这个集合要属于R中A列各个元素的象集,然后看a1-a4的象集表,发现只有a1才有可能让S属于(因为a2-a4象集内元素都小于等于3),发现a1的象集正好是S,那就符合了除运算的条件,所以就是{a1}了。
当然,这个是根据单元素A的,也可以是多个元素……
R÷S=?
分析:发现S是C和D两列,那么就去A列和B列找元组(也许能这么说),发现有{(a,b),(b,c),(e,d)}三组,然后列出这三个元组的象集:
(a,b)的象集:{(c,d),(e,f),(d,e)}
(b,c)的象集:{(e,f)}
(e,d)的象集:{(c,d),(e,f)}
然后和S比较,发现(a,b)和(e,d)都满足要求,那么答案就是:
{(a,b),(e,d)}
接下来是更加抽象的东西:
我觉得就是,一个元组t属于R÷S得到的结果,就得属于R(X,Y)中的X,而且还得包含与t的象集(如果我的理解没错,就是把定义变个样叙述出来)
如何查询选修了全部课程的学生学号呢?
思路:定位→全部课程,那么C就是子表,那么和SC表中出现的就是cno这个属性,那么就从SC中选择出sno和cno这俩属性,然后除以即可。
其他的一些除的定义:
要记应该记最后一个比较好
当查询查询至少选修了c1和c2号课程的学生学号时,得选上面那个:
方案二为什么不行??
因为SC直接除以后面那些的话,把(sno,score)作为X,而这也就会让结果较少!
2.6.11附加运算——外连接
为避免自然连接时因失配而发生的信息丢失,可以假定在参与连接的一方关系中附加一个取值全为空值的元组,它和参与连接的另一方关系中的任何一个未匹配上的元组都能匹配,称之为外连接。
这个定义我是没看懂……
反正 就:
外连接 = 自然连接 + 失配的元组
聚集函数中的null
1、多重集中忽略null
2、聚集函数作用于空集合:
count(Φ)=0;
其它聚集函数作用于空集合,结果为null
有习题的,我整理清楚后单独拎一个专题吧QAQ
END