【小白说】数据库系统概念 4

域是提前规定好某一列的数据类型和取值范围。
假设有两个域:

域1:姓名,可取值为 {张三, 李四}

域2:课程,可取值为 {数学, 语文}

这两个域的笛卡尔积,就是取这两个集合的所有可能组合,结果是一个包含四个元素的集合:

{(张三, 数学), (张三, 语文), (李四, 数学), (李四, 语文)}
笛卡尔积这个名字来源于法国数学家笛卡尔。他在研究解析几何时,提出用两个集合中元素的所有可能配对来描述平面上的点。比如x轴集合和y轴集合的所有可能配对,就构成了平面上的所有点坐标。后来数学上就把这种两个集合所有可能组合的运算叫做笛卡尔积。
在向量和矩阵里,笛卡尔积不像矩阵乘法那样有直接对应的运算,但它可以通过以下方式体现:

在向量中,两个向量的笛卡尔积在概念上等同于创建一个新空间,其中每个元素是两个原始向量中元素的配对。比如向量 a = [1,2] 和 b = [3,4] 的笛卡尔积,结果是所有可能的有序对 (1,3), (1,4), (2,3), (2,4),这相当于在二维平面上生成一个网格。

在矩阵中,如果把两个有限集合看作行和列的标签,它们的笛卡尔积可以表示为一个矩阵的所有行列组合。比如集合 A 作为行索引,集合 B 作为列索引,A 和 B 的笛卡尔积就对应了矩阵中每个单元格的位置。
笛卡尔积在关系模型中,用来生成一张表中所有可能存在的元组组合。
在笛卡尔积的定义里,之所以说可以允许有相同的域,是因为笛卡尔积运算本身对参与运算的集合没有排他性要求。数学上它只关心顺序和配对,即使两个域在结构或取值上一模一样,它们依然是两个独立的位置。
第一个域代表学生选修的第一门课,第二个域代表学生选修的第二门课。这两个域虽然取值集合完全一样,但它们在笛卡尔积中是两个独立的位置。(数学, 数学),(数学, 语文),(语文, 数学),(语文, 语文)
分量元组里某一个具体列的值。
基数是指一个集合中元素的个数。比如域有5个值,基数是5。笛卡尔积的基数是每个域基数的乘积。
基数是用来衡量一个域或一个集合的规模大小,它告诉这个域里有多少个可用的值。
笛卡尔积的基数公式 D1 × D2 × ... × Dn 的基数等于各域基数的乘积,这个公式的含义是:有 n 个域,每个域提供一定数量的可能取值时,它们所有可能的组合总数是各域取值数的连乘积。
基数是表示一共有多少种可能的元组情况。
关系的目,也叫关系的度,是指关系(也就是一张表)中所包含的属性(也就是列)的个数。比如一张学生表如果有学号、姓名、年龄三列,那么这个关系的度就是3。
关系就是一张数据表,关系的度就是这张表的列数。
关系中的元组通常用小写字母 t 来表示 ...tuple 的首字母。
全码是指整个关系模式的所有属性组合在一起构成的候选码
候选码里的每一个属性都叫主属性,是因为它们都属于构成候选码的一部分,是主要的、关键性的属性,用来区别于那些不在任何候选码里的非主属性。
基本关系,也叫基本表,就是数据库中实际存在的、真实存储数据的那些表。它是数据的逻辑表示,在数据库里看到的就是这些表。
同质的意思是具有相同的性质或结构。在数据库里,就是指同一列的数据必须来自同一个域,具有相同的数据类型和取值范围。
原子值的意思就是每一个格子里的数据都必须是不可再分的最小单元,不能再拆成更小的独立部分。比如一个格子里不能同时写两个电话号码。
关系模式就是对关系的描述,它定义了关系的名字、包含哪些属性、每个属性来自哪个域、属性与域之间的映射,以及完整性约束规则。
元组集合的结构,就是指组成一张表的每一行数据所遵循的框架。它规定了每一行由哪些属性构成、每个属性的数据类型和取值范围。
属性构成是指一张表里有哪些列,比如学号、姓名这些。属性来自的域是指每一列的数据必须符合哪个取值范围,比如性别列必须来自{男,女}这个域。
属性和域之间的映像关系,就是指为每个属性指定它来自哪个域。比如在学生表里,规定姓名这个属性来自人名域,年龄这个属性来自整数域。
元组的语义是指每一行数据在现实世界中所代表的具体含义,比如一行数据代表一个具体的学生。完整性约束条件是指对数据施加的限制规则,比如年龄不能为负数,学号必须唯一。
属性间的数据依赖关系集合,是指关系中各个属性之间存在的相互制约关系。比如学号决定姓名,知道了学号就能唯一确定对应的姓名,这就是一种依赖关系。
学生(U, D, DOM, F)

其中各个部分分别对应:

U是属性名的集合,比如 {学号, 姓名, 专业}。

D是域名的集合,比如 {学号域, 姓名域, 专业域}。

DOM是属性到域的映射,比如规定学号属性来自学号域,姓名属性来自姓名域。

F是属性间数据依赖关系的集合,比如学号决定姓名。
U 对应 Attribute Set(属性集合)

D 对应 Domain Set(域集合)

DOM 对应 Attribute to Domain Mapping(属性到域的映射)

F 对应 Data Dependency Set(数据依赖关系集合)

在设计数据库时,通常不会把域单独抽象出来定义,而是直接在定义属性时就指定它的类型和长度。比如定义学生表的学号字段时,直接说它是长度为12的字符串。这个类型和长度的具体规定,其实就是隐含了它来自哪个域以及映像关系。
在设计学生表时,不会先单独定义一个"学号域",再把它映射过来。而是直接在表里写:学号 CHAR(12)。这里的CHAR(12)就直接说明了属性的类型是字符串、长度是12,这就相当于同时完成了域的定义和属性到域的映像。
关系数据库模式,就是对一个关系数据库里所有关系模式的集合的统称。它包含了这个数据库里全部的表的结构定义,比如有哪些表、每张表叫什么、有哪些字段、字段类型是什么、表与表之间有什么关系等。
选择,就是从表中选出满足条件的某些行。比如从学生表里选出所有专业是计算机的学生。
投影,就是从表中选出指定的某些列。比如从学生表里只列出姓名和专业这两列,不显示其他列。
连接,是把两张表按某个条件拼成一张新表。比如把学生表和成绩表按学号拼在一起,得到每个学生的各科成绩。
除,是同时满足所有条件的查询。比如找出选修了全部课程的学生。
并,是把两张结构相同的表合并在一起。比如把一班学生和二班学生合并成一个名单。
交,是找出两张表里都有的数据。比如同时选修了数学和语文课的学生名单。
差,是找出在一张表里有但在另一张表里没有的数据。比如选修了数学但没有选修语文的学生名单。
除和选择的区别在于:选择是横向的,从行里挑出满足条件的记录;除是纵向的,用于找出满足所有关联条件的记录,比如找出选修了全部课程的学生。
选择,是在一张表里直接加条件筛选。比如有一张学生表,要找所有专业是计算机的学生。这个操作就是选择,它只涉及一张表,条件简单直接。
除,通常涉及两张表,用来解决包含关系的问题。比如有两张表:一张是学生选课表,记录了所有学生选了什么课;另一张是课程表,列出了所有课程。现在要找出选修了所有课程的学生,这个查询用选择就做不了,因为选择没法判断一个人选的课是不是覆盖了全部课程。这种找出满足所有关联条件的操作,就是除。必须指定某一列来做匹配。比如用学生选课表里的全部课程值,去匹配所有课程表里的全部课程,找出那些选了全部课程的学生。
数据的更新(插入、删除、修改)和查询的表达能力是数据库最重要的部分,是因为用户使用数据库的核心目的就是管理和使用数据。没有这些操作,数据库就只是一个只能看不能用的空壳。查询让用户能从海量数据里快速找到需要的信息,更新则保证了数据能随着现实世界的变化而同步改变。
关系代数语言就是用对表的运算来表达查询要求。它把查询看作是对一个或多个表进行的一系列操作,比如做选择、投影、连接这些运算,最终得到想要的结果表。
ISBL 是一种具体的关系代数语言的名字,它是 Information System Base Language(信息系统基础语言)的缩写 。是关系代数语言的一个典型代表 。
谓词就是用来描述某个东西具有什么性质或者几个东西之间有什么关系的一种陈述。比如是一个学生、大于、等于都属于谓词。在关系演算里,就是通过这类陈述来定义想要什么样的数据。
元组关系演算语言是一种查询语言,它用元组变量和谓词公式来描述想要的数据。查询时只需要说明想要什么样的元组,而不需要指定如何得到这些元组。
用元组关系演算语言来表达查询,比如要找所有年龄大于18岁的学生,可以写成:{ t | Student(t) AND t.age > 18 }。这个表达式的意思是,找出所有这样的元组t,t是学生表中的元组,并且t的年龄属性大于18。
域关系演算语言是一种查询语言,它用域变量和谓词公式来描述想要的数据。查询时通过指定列的值应该满足什么条件,而不是像元组演算那样指定整行记录。
用域关系演算语言来表达查询,比如要找所有年龄大于18岁的学生的姓名和专业,可以写成:{ <姓名,专业> | 学生(<学号,姓名,专业,年龄>) AND 年龄 > 18 }。这个表达式的意思是,找出所有这样的姓名和专业组合,这些组合来自学生表中的某个记录,并且这条记录的年龄属性大于18。
实体完整性是指关系数据库中,每个表都必须定义主码,且主码的值不能重复也不能为空,用来保证每一条记录都是唯一可识别的。
参照完整性是指表与表之间的数据必须保持一致。它要求一张表里的某个字段值,必须在另一张表的主码字段里存在。比如成绩表里的学号,必须在学生表的学号里找得到,不能出现有成绩但找不到对应学生的情况。
关系系统是指支持关系数据模型的数据库管理系统。它需要自动支持实体完整性和参照完整性,是因为这些是关系模型的核心规则,不能依赖用户自觉遵守。如果靠人来保证,很容易出现漏网之鱼或操作失误。由系统自动强制检查,每次插入、修改或删除数据时,系统都会先验证是否满足这些规则,不满足就直接拒绝操作,这样才能从根本上保证数据库里所有数据的正确性和一致性。这里的系统指的 数据库管理系统。
意思是,在关系R(比如成绩表)中,有一个或一组属性F(比如学号),它本身不是R的主码,但它对应了另一个关系S(比如学生表)的主码(学生表的学号)。那么,这个F就叫做关系R的外码。它用来建立两张表之间的联系。
这个属性在当前表里不是主属性,但在另一张表里是主属性,它就可以作为外码来连接这两张表。
在一对具有外码关联的表中,有外码的那个表(比如成绩表)称为参照关系,它去参照别人。外码所指向的那个表(比如学生表)称为被参照关系,它是被别人参照的。
有外码(非主属性)的那个表是参照关系,它去参照别人;外码指向的那个表是被参照关系,它被别人参照。
假设有两张表。学生表(学号,姓名,专业号)和专业表(专业号,专业名)。其中学生表里的专业号是外码,它指向专业表的主码专业号。

现在学校新录取了一名新生,已经分配了学号,但专业暂时还没定下来。那么插入这条学生记录时,专业号这个外码字段就可以先填NULL,表示他目前专业待定,这是允许的。

一旦他确定了专业,专业号字段就必须填一个在专业表里真实存在的专业号,比如必须填01或02,不能填一个根本不存在的99。
用户定义完整性,就是用户根据具体业务需求自己设定的约束条件。关系模型确实应当提供定义和检验这类完整性的机制,并且用统一的方式去处理,不需要用户为每个约束单独写程序来检查。

END

相关推荐
专注&突破2 小时前
DeepAgents 的 Backend详解
数据库
星火开发设计2 小时前
序列式容器:list 双向链表的特性与用法
开发语言·前端·数据结构·数据库·c++·链表·list
Zzz 小生2 小时前
LangChain Messages:消息使用完全指南
数据库·windows·microsoft
寂寞旅行11 小时前
向量数据库Milvus的使用
数据库·milvus
闻哥11 小时前
Redis事务详解
java·数据库·spring boot·redis·缓存·面试
道亦无名11 小时前
aiPbMgrSendAck
java·网络·数据库
面向对象World14 小时前
正点原子Mini Linux 4.3寸800x480触摸屏gt115x驱动
linux·服务器·数据库
dinga1985102615 小时前
mysql之联合索引
数据库·mysql
微风中的麦穗15 小时前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
大数据·数据库·sqlserver·云计算·个人开发·运维必备·sqlserver2019