关系模型
一个关系就是一个table
关系模型就是处理table的,它是由三部分组成
描述DB各种数据的基本结构形式
描述table与table之间所肯发生的各种操作(关系运算)
描述这些操作所应遵循的约束一傲剑(约束完整性)
三要素:
数据结构:relation/table
数据操作:
基本的:∪、—、×(广义积)、Π(投影)、δ (选择)
扩展的:∩、 (连接)、÷
[以上是数据语言]
完整性约束:实体完整性、参照完整性、用户自定义完整性
关系运算:关系代数和关系演算
关系演算:元组演算和域演算
关系代数示例:基于集合的运算,操作对象和结果都是集合,是一次一集合的操作,而非关系型的数据操作通常是一次一记录的操作
基于关系代数设计的数据库语言(ISBL):用计算机可识别的符号表征关系代数的运算符号(计算机语言)
R:F :表选择,F表条件
R%表示投影运算
元组演算示例:基于逻辑的运算
基于元组演算设计的数据库语言(Ingres系统的QUEL):用计算机可识别的符号表征元组演算的运算符号
域演算示例:基于示例的演算
基于域演算设计的数据库语言(QBE:Query By Example)
严格定义表:(从数学角度)
域:在表中,列的值的取值范围;一组值的集合,这组值具有相同的数据类型;
集合中元素的个数称为域的基数;
元组及所有可能合成的元组:笛卡尔积
一组域(D1,D2,D3,D4......Dn)的笛卡尔积为:
D1×D2×D3×D4×...×Dn={(d1,d2,d3....,dn)|di∈Di,i=1,2,...,n}
笛卡尔积(d1,d2,d3,...,dn)称为一个n-元组
元组(d1,d2,d3,...,dn)每一个值di叫做一个分量
元组(d1,d2,d3,...,dn)是从每一个域任取一个值所形成的一种组合,笛卡尔积是所有这张可能组合的集合,即:笛卡尔积是由n个域形成的所有可能的n-元组集合
若D1的基数mi,则笛卡尔积的基数(元组的个数)为m1×m2×m3×...×mn
在表中,列的值为域的值
由于笛卡尔积中的元组并不是都有意义,因此我们要找出有某种意义的元组,某种意义的元组形成的组合称为关系。某种意义可以由表的名字去表达(描述);
即关系是一组域的笛卡尔积的子集,笛卡尔积中具有某一方面意义的那些元组被称为·一个关系;在关系中,由于关系的不同列可能来自同一个域,为了区分,需要为每一个列起一个名字,即为属性名(列名)
关系可用R(A1:D1,A2:D2,...,An:Dn)表示,可简记为R(A1,A2,...,An),这种描述又被称为关系模式或表标题
R是关系的名字,Ai是属性,Di是属性所对应的域,n是关系的度或者是目,关系中元组的数目称为关系的基数
关系模式R(A1:D1,A2:D2,...,An:Dn)中属性项域的映像在很多DBMS中一般直接说明为属性的长度、类型等
关系模式与关系:
同一关系模式下,有很多关系
关系模式是关系的结构,关系是关系模式在某一时刻的数据
关系模式是稳定的,而关系是某一时刻的值,是随时间可能变化的
关系的特性:
- 列是同质的:即每一列中的分量来自同一域,是同一类型的数据;
- 不同的列可以来自同一个域,称其中的每一个列为一个属性,不同的属性要给予不同的属性名
关系模式R(A1:D1,A2:D2,...,An:Dn)中Ai必须不同,Di可以相同 - 列位置互换性:区分哪一列是靠列名 列位置的变换不影响
- 行位置互换性:区分哪一行是靠某一或者某几列的的值(关键字/键码/码字)
- 关系是以内容(名字/值)来区分的,而不是属性在关系的位置来区分的
- 理论上,关系的任意两个元组不能完全相同(关系是一个集合,集合要求:集合内不能有重复的元素),但现实应用中,表(table)可能并不完全遵循此特性,故说表和关系有相同性,也有细微的差别 元组相同是指元组的每个分量均相同
- 属性不可再分性:符合第一范式(不能存在复合属性和多值属性)
关系中的一些重要概念:
候选码/候选键 :关系中的一个属性/属性组,其值能唯一标识一个元组,若从该属性组中去掉任意一个属性,它就不具备这一性质了,这样的属性/属性组称为候选码
尽量不要改变候选码
有时候关系中有多个候选码(这时候就要定一个作为主键)
主码/主键 :
当有多个候选码时候选定一个作为主码
DBMS以主码为主要线索管理关系中的各个元组
主属性和非主属性 :
包含在任何一个侯选码中的属性被称为主属性,而其它属性被称为非主属性
最简单:候选码为一个属性
最极端:所有属性构成这一个候选码,称为全码
外码/外键:
关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键
两个关系通常是靠外码连接起来的,即两个关系的元组,靠着外码可以连接城一个大的元组
完整性约束
实体完整性(对主码而言的):
关系的主码中属性值不能为空
空置 无意义/不知道/不存在的值 在关系模型中用”?“来表征
意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不允许的
有空值时候需要特殊处理。
参照完整性(外码):
外码可以取空值,取空值意味着没有/还未,若为非空值,则值必须是从它在另一个作为主码的表中取值
外码关系到数据的一致性,连接的正确性
用户自定义完整性:
用户针对具体的应用环境定义的完整性约束条件
比如学号:必须是十位整型数字,前四位必须是年度,当前年度与他们的查必须在4以内
DBMS对关系完整性的支持:
对于用户自定义完整性(属性和属性组合):它使用户可以自行定义有关的完整性条件
当有更新操作发生时,DBMS会自动按照完整性约束条件检验更新操作的正确性,即是否符合用户自定义完整性
实体完整性和参照完整性由DBMS系统自动支持