2.1关系数据库与关系
1. 什么是数据模型?什么是关系数据模型
数据模型是对现实世界物体的一种抽象,是严格定义的一组概念的集合,这些概念精确描述了物体的静态特性,动态特性和完整性约束。
静态特性:数据结构
动态特性:数据操作
完整性约束:数据的完整性约束条件
那么关系数据模型也就是:关系数据结构,关系操作集合,和关系完整性约束条件组成。
2. 关系模型中的关系数据结构是什么?关系是什么?
关系数据结构简单来看,就是一张Table
关系是这张Table的名字 Table=关系
补充开发软件的思维
3. 关系的严格定义
- 域(Domain):列的取值范围。一组相同数据类型的集合比如整数集合,全体学生的集合。集合中元素的个数称为域的基数。
- 笛卡尔积(Cartesian Product):元组及所有可能组合成的元组
元组(d1, d2 , … , dn)的每一个值di叫做一个分量(component)
元组(d1, d2 , … , dn)是从每一个域任取一个值所形成的一种组合,笛卡尔积是所有这种可能组合的集合,即:笛卡尔积是由n个域形成的所有可能的n-元组的集合。
若Di的基数为mi,则笛卡尔积的基数=元组个数为:m1m2m3*…*m_n
- 但是笛卡尔积的元组不一定是有意义的
练习:写出下图的关系模式(表标题)(Schema)
家庭(丈夫:男人,妻子:女人,子女:儿童)或者家庭(丈夫,妻子,子女)
下表中关系的度(degree)是3,基数是3
- 关系模式与关系(简单理解,关系模式就是标题名,关系是还有数据的表)
同一关系模式下,可以有很多个关系
关系模式是关系的结构,关系是关系模式在某一刻的数据
关系模式是稳定的,关系是可能会变化的
Student(S# char(8), Sname char(10), Ssex char(2), Sage integer,
D# char(2), Sclass char(6)
- 练习
有三列,关系模式为家庭(丈夫,妻子,子女),丈夫的domain是李基,张鹏,妻子的domain是王方,刘玉,子女的domian是李健,张锋,张睿。笛卡尔积为各个域的基数相乘223=12。关系中的元组是三列。
4.关系的特性
-
列是同质:即每一列中的分量来自同一域,是同一类型的数据
-
不同的列可来自同一个域,称其中的每一列为一个属性,不同的属性要给予
不同的属性名。
例: 我们定义所有男人、女人和儿童的集合= {李基,张鹏,王芳,刘玉,李健,张睿,张峰},则下述“家庭”关系的三个列将来自同一个域Person, 因此需要不同的属性名“丈夫”“妻子”“子女”以示区分。 -
列位置互换性:区分哪一列是靠列名,不是靠列的位置
-
行位置互换性:区分哪一行是靠某一或某几列的值(关键字/键字/码字)
-
关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分
属于相同关系 -
理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有
相同的两个元素);现实应用中,表(Table)可能并不完全遵守此特性。
-属性不可再分特性:又被称为关系第一范式
5.关系上的一些重要概念—候选码/候选键
候选码与候选键
-
关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉
任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。 -
例如:“学生(S# , Sname, Sage, Sclass)”,S#就是一个候选码,在此
关系中,任何两个元组的S#(学号)是一定不同的,而这两个元组的Sname,
Sage, Sclass都可能相同(同名、同龄、同班),所以S#是候选码。 -
再如:“选课(S#, C#个候选码, Sname, Cname, Grade)”,(S#,C#)(学号和课号)联合起来是一个候选码。
-
有时,关系中有很多组候选码,例如:学生(S#, Sname, Sage, Sclass, Saddress)其中属性S#是候选码,属性组(Sname, Saddress)也是候选码(同名同地址的两个同学是不存在的
主码与主键 -
当有多个候选码时,可以选定一个作为主码。
-
例如可选定属性S# Saddress作为“学生”表的主码,也可以选定属性组(Sname )作为“学生”表的主码。
主属性与非主属性 -
包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性如“选课”中的S# , C#为主属性,而Sname, Cname, Grade则为非主属性
-
最简单的,候选码只包含一个属性
-
最极端的,所有属性构成这个关系的候选码,称为全码(All-Key)。
外码与外键 -
关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选
码相对应,则称这个属性组为R的外码或外键。(我不是这个关系的自己人,我跟别的关系眉来眼去) -
例如“合同”关系中的客户号系中的候选码“客户号不是候选码,但却是外码。因它与“客户”关” 相对应。
-
两个关系通常是靠外码连接起来的。
小结:
6.关系模型中的完整性
1.实体完整性
- 关系的主码中的属性值不能为空值(不知道或没有意义的值)
- 意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。
2.空值及其含义
- 空值:不知道、不存在或无意义的值;
- 在进行关系操作时,有时关系中的某属性值在当前是填不上的,比如档案中有“生日不详”、“下落不明”、“日程尚待公布”等,这时就需要空值来代表这种情况。关系模型中用‘?’表征
- 数据库中有了空值,会影响许多方面,如影响聚集函数运算的正确性,不能参与算术、比较或逻辑运算等。比如3+?
- 再例如,一个班有30名同学,如所有同学都有成绩,则可求出平均成绩;如果有一个同学没有成绩,怎样参与平均成绩的计算呢,是当作0,还是当作100呢?还是不考虑他呢?
3.参照完整性
- 如果关系R1的外码Fk与关系R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2 中某个元组的Pk 值,或者为空值
- 意义:如果关系R1的某个元组t1参照了关系R2的某个元组t2,则t2必须存在
- 例如关系Student在D#上的取值有两种可能:空值,表示该学生尚未分到任何系中,若非空值,则必须是Dept关系中某个元组的D#值,表示该学生不可能分到一个不存在的系中。
简单来说,若两个关系具备参照完整性,那么外码的取值范围只有上述的空和非空两种,其中非空时候取值范围是关系2主码属性值的集合。
4.用户自定义完整性
- 用户针对具体的应用环境定义的完整性约束条件
5.DBMS对关系完整性的支持
- 实体完整性和参照完整性由DBMS系统自动支持
- DBMS系统通常提供了如下机制:
(1)它使用户可以自行定义有关的完整性约束条件
(2)当有更新操作发生时,DBMS将自动按照完整性约束条件检验更新操作的正确性,即是否符合用户自定义的完整性