关系数据模型
关系数据模型
0x00 关系数据库三要素
关系数据模型:关系数据结构+关系完整性约束
关系代数
关系演算
0x01 关系数据结构
关系:现实世界中的实体和实体之间的联系均可以用关系来表示
定义
若干个属性构成了关系的模式 属性的值构成了一个实体
域(domain) 笛卡尔积 域的乘法运算,所有域的任意多元素的自由组合构成一个笛卡尔积
关系:D1XD2XD3…XDN(若干个域的笛卡尔集)的子集叫做域d1 d2 d3..dn上的关系
上述子集中的一个值就是元组(tuple)
关系中的不同的列称为属性(attribute)
码 (key)关系中某一属性的值能够唯一地标识一个元组,则称为该属性为码
如果关系是定义在n个属性上的,那称该关系为n元关系
性质
1列是同质的(homogeneous同种类的)
2不同的列可以出自同一个域
3列的顺序无所谓,列的次序可以任意交换
4任意两个元组的候选码(candidate key)不能相同
5行的顺序也无所谓
6分量(属性)必需取原子值(即某一个属性不能是多个属性拼起来的)
关系必须是每个属性的域的笛卡尔积的子集,全集是所有排列组合都列出来,没有任何意义
关系模式
关系模式和关系之间的关系是 型和值的关系
一个关系模式可以如下表示
关系是关系模型在某一个时刻的具体值,关系模型是关系的结构
0x02 关系完整性约束
分三类
实体完整性约束
参照完整性约束
用户定义的完整性约束
前两个约束必须满足
实体完整性
实体是客观存在的,且必须要可区分,所以反应实体的元组必须要可以区分
具体来说:关系的主属性不能取空值(空值实际上不是一种值,是一个状态,表示还没有值)
参照完整性
关系与关系之间的联系
我们知道关系是可以描述实体内部的关系,也可以描述实体与实体之间的关系,参照即是一种实体与实体之间的关系
学生是一个实体,专业也是一个实体,两者之间有对应关系
而我们的参照完整性约束就是对两者关系的一种约束
比如 我们在图片的例子中,要求学生实体中的专业号的取值是在专业实体范围之中,这个要求即是一个参照完整性
外码 即一个关系的属性r是另一个关系s的主码,称r是参照关系,s是被参照关系,这个时候r中的外码要满足参照关系