数据库理论1.关系模型与术语定义
时间:2020-5-13 13:32 作者:林立 分类: 作品
关系模型本身被视为数学的一个细微分支,但它本身又是在随着新证明定理和新发现而不断进化。
原始的关系模型有3个主要组件——结构、完整性、操作。
数据模型:
数据模型是对数据结构与数据操作的一种抽象,当说到关系模型时,数据结构是关系,数据操作是投影、连接等关系操作。也有人认为数据模型仅仅是一个逻辑上的数据库设计。
实际上,就相当于编程语言与编程语言编写的特定程序,使用对数据模型的理论认知来对指导对数据模型的设计。
元组
元组的数学定义为:设T1,T2,…,Tn(n≥0)为可以同名的类型名称。与每个类型Ti对应,存在相互区别的属性名Ai;形成的n个属性名/类型名组合均为属性(attribute)。对应于每个属性,存在类型为Ti的属性值vi与其关联;产生的n个属性/值组合均为一个分量(component)。则,依此定义的所有n个分量的集合(设为t),即是涵盖属性A1,A2,…,An的一个元组值(或简称为元组)。值n为t的度;度为1的元组为一元元组(unary),度为2的元组为二元元组(binary),度为3的元组为三元元组(ternary),…。更一般的,度为n的元组为n元元组(n-ary)。由所有n个属性构成的集合为t的标题。
说人话就是,元组就是,在某张数据库表中,选定一列一行那就是一元元组,选定两列一行那就是某个二元元组,假设以下是一张表t:
TABLE t {
{ CHAR row1,CHAR row2,CHAR row3,FLOAT row4 }
{ 'a1', 'b1', 35, 4.5 },
{ 'a2', 'b2', 32, 4.0 }
}
可以看出这个表t当前最大为4行,我们可取的最大元组为4元元组,假设我们获取最后一行中的后三列值并将其类型命名为TUPLE:
TUPLE {row2 'b2',row3 32,row4 4.0 }
以上就是一个元组,一个元组就是一个值,你可以认为是一组类型(列名、值类型的组合,比如{ CHAR row1,CHAR row2 })与值的集合。元组可以是数据库表中的一整行,也可以是该整行的一部分,但是不能为空列,也就是没有0元元组。
关系:
关系的数学定义为:设{H}为元组标题,t1,t2,…,tm(m>=0)为标题均是{H}的不重复元组。 [1] 那么,{H}和元组集合{t1,t2,…,tm}的组合(设为r)即为涵盖属性A1,A2,…,An的关系值(relation value)(简记为关系)。其中,A1,A2,…,An均为{H}中的属性。关系r的标题为{H};r和该标题具有相同的属性(当然也有相同的属性名称及类型)和度。元组集合{t1,t2,…,tm}是r的主体(body)。m的值为r的基数(cardinality)。
说下人话就是:类型相同但值互不相同的一组元组的集合。上述定义在数据库中体现为m行n列的一张数据库表,而元组标题{H}实际上就是表头,A1,A2,…,An就是列值。
关系体现在数据库中就是一张数据库表
关系变量与关系值:
关系变量与关系可以用以下代码解释:
CREATE TABLE t d(...);
这样看的话,实际上t就是一个变量,而(...)就是该变量的初始值,随着后续语句的到来与执行,t的值不断发生变化,比如多一列、少一行、多一种关联关系...
所以我们可以说t是一个关系变量,而t的某个时间点的值,就是其关系值。某个特定时间的关系体现在数据库中就是该时刻的数据库表。
键:
键是关系中的列标识符,可能是一列,可能是多列。
每个关系至少有一个候选键,候选键就是唯一标识符;
主键是从多个候选键中选取出来作为主要唯一标识符的键。比如标识一个员工的候选键有身份证/工号
“外键”是某关系r2中的一个属性组合(或集合)FK,且要求FK的每个取值都与另一关系r1中某个键K的某个取值相等(r1和r2不必是不同的关系)
完整性约束
以下是两个通用的约束规则。
实体完整性规则:主键属性不允许为null。
参照完整性规则:不能存在任何不匹配的外键取值,即候选键中没有与外键取值相等的取值。
关系模型操作
关系模型操作分为关系代数与关系模型操作符。
关系代数指的是用于关系的运算符的集合(例如差或MINUS)。
关系赋值运算符,运算符允许将关系表达式的值赋给关系。任意多个运算符都符合“输入一个或多个关系,只输出一个关系”的简单定义。
限制:返回一个关系,其中包含特定关系中满足特定条件的所有元组。比如可以限制A关系得到其中k值为v的那些元组。
投影:返回一个关系,其中包含特定关系移除特定属性后的所有(子)元组。比如可以限制A关系中仅包含k值与M值的子元组。
积:返回一个关系,其中包含所有的可能由两个元组组合形成的元组,进行组合的两个元组分别来自于两个指定的关系。这个运算符也称笛卡尔积、交叉积、交叉连接或笛卡尔连接。
交:返回一个关系,其中包含同时在两个指定关系中都出现的所有元组
并:返回一个关系,其中包含在两个指定关系中出现过的所有元组。
差:返回一个关系,其中包含在第一个指定关系中出现但在第二个指定关系中没有出现的所有元组。
连接:返回一个关系,其中包含的元组是由分别来自两个指定关系的元组组合而成的,并且进行组合的元组之间在两个关系的同名属性上具有相同的取值(而且,在结果元组中,相同取值只出现一次而非两次)。