关系模型的三要素

基本结构:表(table)/关系(relation)
基本操作:交、并、差、等等等
完整性约束: 实体完整性,操作完整性,用户自定义完整性

“表(table)”的定义

第一步:定义“域”

域

第二步:组成“元组”

表中的一行就是一个“元组”
各个域之间可以自由组合,便形成笛卡尔积

第三步:形成“关系”

笛卡尔积中的每个元组未必是有意义的
比如。名字可以取值:“关公”,性别可以取值“女”,但是未必有一个这样的数据存在
而“关系”是笛卡尔积的子集

一个“域”与表中的“列”不一定一一对应。因此,我们还要定义属性名。
属性名

关系模式

关系可用R(A1:D1, A2:D2, … , An:Dn)表示,可简记为R(A1, A2, … , An),这种描述又被称为关系模式(Schema)或表标题(head)
R是关系的名字, Ai是属性, Di是属性所对应的域, n是关系的度或目(degree), 关系中元组的数目称为关系的基数(Cardinality)
例如下图的关系为一3目关系,描述为家庭(丈夫:男人,妻子:女人, 子女:儿童)或家庭(丈夫,妻子, 子女)

关系

什么是关系

关系的特性:

列是同质:即每一列中的分量来自同一域,是同一类型的数据
不同的列可来自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。

列位置互换性:区分哪一列是靠列名
行位置互换性:区分哪一行是靠某一或某几列的值(关键字/键字/码字)
关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分

理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有相同的两个元素);现实应用中,表(Table)可能并不完全遵守此特性。
元组相同是指两个元组的每个分量都相同

也就是说,“关系”和“表”有细微的差别

关系第一范式:

属性不可再分特性:又被称为关系第一范式
关系第一范式
复合属性和多值属性都不满足关系第一范式

一些概念

候选码/候选键

关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。
例如:“学生(S#, Sname, Sage, Sclass)”,S#就是一个候选码,在此关系中,任何两个元组的S#是一定不同的,而这两个元组的Sname, Sage, Sclass都可能相同(同名、同龄、同班),所以S#是候选码

主码/主键

多个候选码中可以选择一个作为主码

主属性与非主属性

包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性如“选课”中的S# , C#为主属性,而Sname, Cname, Grade则为非主属性;
最简单的,候选码只包含一个属性
最极端的,所有属性构成这个关系的候选码,称为全码(All-Key)。
比如:关系“教师授课”(T#,C#)中的候选码(T#,C#)就是全码

外码(Foreign Key)/外键

关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。

例如“合同”关系中的客户号不是候选码,但却是外码。因它与“客户”关系中的候选码“客户号”相对应。
两个关系通常是靠外码连接起来的

关系模型的完整性

实体完整性

关系的主码中的属性值不能为空值
空值:不知道或无意义的值;
意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的

参照完整性

如果关系R1的外码Fk与关系R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2 中某个元组的Pk值,或者为空值
意义:如果关系R1的某个元组t1参照了关系R2的某个元组t2,则t2必须存在
例如关系Student在D#上的取值有两种可能:
空值,表示该学生尚未分到任何系中
若非空值,则必须是Dept关系中某个元组的D#值,表示该学生不可能分到一个不存在的系中

用户自定义完整性

用户针对具体的应用环境定义的完整性约束条件
如S#要求是10位整数,其中前四位为年度,当前年度与他们的差必须在4以内