- 基本概念
- 关系模型概述
- 关系模型的提出
- 关系模型研究什么
- 关系模型的三要素
- 什么是关系
- 概念引入
- 1. 域
- 2. 笛卡尔积
- 3. 关系
- 关系模式 VS 关系
- 关系的特性
- 1. 列是同质
- 2. R(A:D) 中,A 不可相同,D 可相同
- 3. 行、列位置互换性
- 4. 属性不可再分(关系第一范式)
- 关系上的一些重要概念
- 1. 候选码/候选键
- 2. 主码/主键
- 3. 主属性与非主属性
- 4. 外码/外键
- 关系模型中的完整性约束
- 1. 实体完整性
- 2. 参照完整性
- 3. 用户自定义完整性
- DBMS对关系完整性的支持
- 内容回顾
- 练习
基本概念
【重点与难点】
- 一组概念的区分:围绕关系的相关概念,如域、笛卡尔积,关系,关系模式,关键字/键/码,外码/外键,主码/主键,主属性与非主属性;
- 三个完整性:实体完整性,参照完整性 和 用户自定义完整性;
关系模型概述
关系模型的提出
最早由 E.F.Codd 在1970年提出;
- 是从表(Table)及表的处理方式中抽象出来的, 是在对传统表及其操作进行数学化严格定义基础上,引入 集合理论与逻辑学理论 提出的;
- 是数据库的三大经典数据模型之一, 也是现在大多数商品化数据库系统所仍然使用的数据模型;
- 标准的数据库语言(SQL语言)是建立在关系模型基础之上的, 数据库领域的众多理论也都是建立在关系模型基础之上的。
关系模型研究什么
形象地说,一个关系(relation)就是一个 Table。
关系模型就是处理 Table 的,它由三个部分组成:
- 描述 DB 各种数据的 基本结构形式 (Table/Relation);
- 描述 Table 与 Table 之间所可能发生的各种 操作 (关系运算) ;
- 描述这些操作所应遵循的 约束条件 (完整性约束) ;
就是要学习: Table 如何描述,有哪些操作、结果是什么、有哪些约束 等。
关系模型的三要素
- 基本结构:Relation/Table;
- 基本操作:Relation Operator;
- 完整性约束:实体完整性、参照完整性和用户自定义的完整性。
什么是关系
表的严格定义? 关系!
先回顾一下表的基本构成要素:
概念引入
1. 域
首先定义 “列” 的取值范围 “域(Domain)”;
域(Domain):
- 一组值的 集合,这组值具有 相同的数据类型;
- 如整数的集合、字符串的集合、全体学生的集合;
- 再如, 由8位数字组成的数字串的集合,由0到100组成的整数集合;
- 集合中 元素的个数 称为 域的基数(Cardinality);
2. 笛卡尔积
再定义 “元组”及所有可能组合成的元组:笛卡尔积;
笛卡尔积(Cartesian Product):
- 一组域 D 1 D_1 D1 , D 2 D_2 D2 ,…, D n D_n Dn 的笛卡尔积为: D 1 × D 2 × … × D n = { ( d 1 , d 2 , … , d n ) ∣ d i ∈ D i , i = 1 , … , n } D_1×D_2×…×D_n = \{ (d_1 , d_2 , … , d_n) | d_i∈D_i , i=1,…,n \} D1×D2×…×Dn={(d1,d2,…,dn)∣di∈Di,i=1,…,n}
- 笛卡尔积的每个元素( d 1 d_1 d1 , d 2 d_2 d2 , … , d n d_n dn)称作一个 n-元组(n-tuple);
- 元组( d 1 d_1 d1 , d 2 d_2 d2 , … , d n d_n dn)的每一个值 d i d_i di 叫做一个 分量 (component);
- 元组( d 1 d_1 d1 , d 2 d_2 d2 , … , d n d_n dn)是 从每一个域任取一个值所形成的一种组合,笛卡尔积是所有这种可能组合的集合, 即:笛卡尔积是由 n 个域形成的所有可能的 n-元组 的集合。
若 D i D_i Di 的基数为 m i m_i mi,则 笛卡尔积的基数,即元组个数 为 m 1 × m 2 × … × m n m_1×m_2×…×m_n m1×m2×…×mn。
这就是熟悉的三层 for 循环遍历呀!
for ( D_1 )
for ( D_2 )
for ( D_3 )
...
所以最后笛卡尔积的基数,也就是 n-元组 个数当然就是三个域的基数的乘积喽 ~
But 笛卡尔积中的所有元组并不都是有意义的,因此…
3. 关系
关系(Relation):
- 一组域 D 1 D_1 D1 , D 2 D_2 D2 ,…, D n D_n Dn 的笛卡尔积的 子集;
- 笛卡尔积中具有某一方面意义的那些元组被称作一个关系(Relation);
- 由于关系的不同列可能来自同一个域,为区分,需要为每一列起一个名字,该名字即为 属性名。
- 关系可用 R ( A 1 : D 1 , A 2 : D 2 , … , A n : D n ) R(A_1:D_1 , A_2:D_2 , … , A_n:D_n ) R(A1:D1,A2:D2,…,An:Dn) 表示,可简记为 R ( A 1 , A 2 , … , A n ) R(A_1 , A_2 , … , A_n ) R(A1,A2,…,An),这种描述又被称为 关系模式 (Schema)或表标题(head);
- R R R 是关系的名字, A i A_i Ai 是属性, D i D_i Di 是属性所对应的域, n n n 是关系的度或目(degree), 关系中元组的数目称为 关系的基数(Cardinality);
例如下图的关系为一3目关系,描述为:
家庭(丈夫:男人,妻子:女人, 子女:儿童) 或 家庭(丈夫,妻子, 子女)
- 关系模式 R ( A 1 : D 1 , A 2 : D 2 , … , A n : D n ) R(A_1:D_1 , A_2:D_2 , … , A_n:D_n ) R(A1:D1,A2:D2,…,An:Dn) 中属性向域的映象在很多 DBMS 中一般直接说明为属性的类型、长度等。
例如:
Student( S# char(8), Sname char(10), Ssex char(2), Sage integer, D# char(2), Sclass char(6) )
再如:
Course ( C# char(3), Cname char(12), Chours integer, Credit float(1), T# char(3) )
SC( S# char(8), C# char(3), Grade float(1) )
关系模式 VS 关系
- 同一关系模式下,可有很多的关系;
- 关系模式是关系的结构, 关系是关系模式在某一时刻的数据;
- 关系模式是稳定的,而关系是某一时刻的值,是随时间可能变化的。
例如,下面的这个关系模式:
Student(S# char(8), Sname char(10), Ssex char(2), Sage integer, D# char(2), Sclass char(6))
可能有以下的关系:
关系的特性
1. 列是同质
- 列是同质:即 每一列 中的分量来自同一域,是 同一类型的数据。
下面举个例子,出现列不同质的现象:
2. R(A:D) 中,A 不可相同,D 可相同
- 不同的列可来自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
这句话的意思是:关系模式 R ( A 1 : D 1 , A 2 : D 2 , … , A n : D n ) R(A_1:D_1 , A_2:D_2 , … , A_n:D_n ) R(A1:D1,A2:D2,…,An:Dn) 中, A i ( i = 1 , … , n ) A_i (i = 1,…,n) Ai(i=1,…,n) 必须是不同的, 而 D i ( i = 1 , … , n ) D_i(i = 1,…,n) Di(i=1,…,n) 可以是相同的。
(属性:Attribute)
例,我们定义一个域为:Person = 所有男人、女人和儿童的集合 = {李基,张
鹏,王芳,刘玉,李健,张睿,张峰},则下述“家庭”关系的三个列将来自同一个域 Person,因此需要不同的属性名“丈夫”、“妻子”、“子女”以示区分。
3. 行、列位置互换性
- 列位置互换性:区分哪一列是靠列名。
- 行位置互换性:区分哪一行是靠某一或某几列的值(关键字/键字/码字)。
关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分。
如下面两个关系是完全相同的关系(只是把“子女”和“妻子”两列换了位置):
理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有相同的两个元素);
现实应用中,表(Table)可能并不完全遵守此特性。
元组相同是指两个元组的每个分量都相同。
4. 属性不可再分(关系第一范式)
- 属性不可再分 特性:又被称为 关系第一范式。
关系上的一些重要概念
1. 候选码/候选键
关系中的一个 属性组,其值能 唯一标识一个元组,若从该属性组中 去掉任何一个属性,它 就不具有这一性质 了,这样的属性组称作 候选码。
- 例如:
学生(S#, Sname, Sage, Sclass)
,S#
(表示学生编号,可以唯一确定一名学生)就是一个候选码。
在此关系中,任何两个元组的 S#
是一定不同的,而这两个元组的 Sname
, Sage
, Sclass
都可能相同(同名、同龄、同班),只有学生编号可以唯一确定一名学生(一个元组),所以 S#
是候选码。
- 再如:
选课(S#, C#, Sname, Cname, Grade)
,(S#,C#)
联合起来是一个候选码。
- 其中,
S#
表示学生编号(可以唯一确定一名学生),C#
表示课程编号(可以唯一确定一门课程)。 Sname
,Cname
,Grade
都可能相同(学生同名、课程同名(如不同的老师开同一门课,课程号不同但是课程名相同)、同一分数);- 即使
S#
相同,也可能存在多个元组(S#
相同 但C#
不同),因为一名学生可以选择多门课程。 - 反过来,一门课程可以被多名同学选课,所以相同的
C#
也可能存在多个元组(C#
相同 但S#
不同)。 - 综上,单独的
S#
或 单独的C#
都可能存在多个元组,无法确定唯一的一个元组,只有二者同时相同才能唯一确定一个元组,所以(S#,C#)
联合起来是一个候选码。
有时,关系中有很 多组候选码。
- 例如:
学生(S#, Sname, Sage, Sclass, Saddress)
其中属性
S#
是候选码,属性组(Sname, Saddress)
也是候选码(同名同地址的两个同学是不存在的。
- 再如:
Employee(EmpID, EmpName, Mobile)
每一雇员有唯一的
EmpID
, 也没有两个雇员有相同的手机号Mobile
, 则EmpID
是候选码,Mobile
也是候选码。
2. 主码/主键
-
当 有多个候选码时,可以选定一个作为主码。
-
DBMS 以主码为主要线索管理关系中的各个元组。
例如,
- 可选定属性
S#
作为 “学生” 表的主码,也可以选定属性组(Sname, Saddress)
作为 “学生” 表的主码;- 可选定
EmpID
为Employee
表的主码,也可以选定 Mobile 为Employee
表的主码。通常情况下,如果候选码中含有
××ID
(××编号),则选择××ID
作为主码。
3. 主属性与非主属性
包含在 任何一个候选码 中的属性被称作 主属性,而其他属性被称作非主属性。
如 “选课” 中的 S#
, C#
为主属性,而 Sname
, Cname
, Grade
则为非主属性;
- 最简单的,候选码只包含一个属性;
- 最极端的,所有属性构成这个关系的候选码,称为 全码(All-Key)。
比如:关系 “教师授课”
(T#,C#)
中的候选码,(T#,C#)
就是全码。
4. 外码/外键
关系 R R R 中的一个属性组,它 不是 R R R 的候选码,但它 与另一个关系 S S S 的候选码相对应 ,则称这个属性组为 R R R 的外码或外键。
两个关系通常是靠外码连接起来的。
例如 “合同” 关系中的客户号不是候选码,但却是外码。因它与 “客户” 关系中的候选码“客户号” 相对应。
关系模型中的完整性约束
1. 实体完整性
关系的 主码中的属性值不能为空值。
意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。
空值:不知道、不存在或无意义的值。
- 在进行关系操作时,有时关系中的 某属性值在当前是填不上 的,比如档案中有“生日不详”、“下落不明”、“日程尚待公布”等,这时就需要空值来代表这种情况。关系模型中用
?
表征。- 数据库中有了空值,会影响许多方面,如影响聚集函数运算的正确
性,不能参与算术、比较或逻辑运算等。
例如,一个班有30名同学,如所有同学都有成绩,则可求出平均成绩;如果有一个同学没有成绩,怎样参与平均成绩的计算呢,是当作 0,还是当作100呢?还是不考虑他呢?- 有空值的时候是需要特殊处理的,要特别注意。
2. 参照完整性
如果关系 R 1 R_1 R1 的外码 F k F_k Fk 与关系 R 2 R_2 R2 的主码 P k P_k Pk 相对应,则 R 1 R_1 R1 中的每一个元组的 F k F_k Fk 值 或者等于 R 2 R_2 R2 中某个元组的 P k P_k Pk 值,或者为空值。
意义:如果关系 R 1 R_1 R1 的某个元组 t 1 t_1 t1 参照了关系 R 2 R_2 R2 的某个元组 t 2 t_2 t2,则 t 2 t_2 t2 必须存在。
例如关系 Student
在 D#
上的取值有两种可能:
- 空值,表示该学生尚未分到任何系中;
- 若非空值,则必须是
Dept
关系中某个元组的D#
值,表示该学生不可能分到一个不存在的系中。
3. 用户自定义完整性
用户 针对 具体的应用环境 定义的 完整性约束条件。
如 S#
要求是10位整数,其中前四位为年度,当前年度与他们的差必须在4以内。
再如:
DBMS对关系完整性的支持
- 实体完整性 和 参照完整性 由 DBMS 系统 自动支持;
- DBMS 系统通常提供了如下机制:
(1) 它使用户可以自行定义有关的完整性约束条件;
(2) 当 有更新操作发生 时,DBMS 将自动按照完整性约束条件 检验 更新操作的正确性,即是否符合用户自定义的完整。
内容回顾
练习
- 某关系 R R R 的外键是指______
A. 其它关系的候选键,可以是 R R R 中的主属性或非主属性
B. 该关系除主键之外的另一个候选键
C. 其它关系的候选键,同时作为 R R R 的主属性
D. 其它关系的候选键,同时作为 R R R 的非主属性
正确答案:A
- 关系模型中,下列关于候选键说法正确的是_______
A. 可由其值能惟一标识该关系中任何元组的一个或多个属性组成
B. 可由多个任意属性组成
C. 至多由其值能惟一标识该关系任何元组的一个属性组成
D. 其余都不是
正确答案:A
- 若某属性非该关系的主键,却是另外一个关系的主键,则该属性称为_______
A. 外键
B. 主键
C. 候选键
D. 其余都不是
正确答案:A
- 下列四项中说法正确的是_______
A. 关系的任何属性都是不可再分的
B. R ( A 1 , A 2 , … , A n ) R(A_1 , A_2 , … , A_n ) R(A1,A2,…,An),这种描述又被称为关系模式,其中 A i A_i Ai 是指属性所对应的域
C. 关系模式和关系都是不随时间变化的
D. 同一关系模式下关系是唯一的
正确答案:A
- 假设有关系 R ( A , B , C ) R(A, B, C) R(A,B,C),其主码为 A A A;关系 S ( D , A ) S(D, A) S(D,A),其主码为 D D D,外码为 A A A。如下图示:
则关系
S
S
S 中违反完整性规则的元组是________
A. < 3, 3>
B. <1, 2>
C. <2,null>
D. <4, 1>
正确答案:A
- 有关系 R ( A : i n t , B : i n t , C : i n t ) R(A:int, B:int, C:int) R(A:int,B:int,C:int), 主码为 A A A,没有违反完整性规则的选项是_______
正确答案:D
- 已知三个域:男人={李基,张鹏},女人={王方,刘玉 },子女={李键,张睿,张峰}。这一组域(男人,女人,子女)的笛卡尔积的基数为_______
A. 12
B. 9
C. 7
D. 27
正确答案:A
- 现有如下关系:患者(患者编号,患者姓名,性别,出生日期),医疗(患者编号,患者姓名,医生编号,医生姓名,诊断日期)。其中,“医疗”关系中的外键是_______
A. 患者编号
B. 患者姓名
C. 患者编号和患者姓名
D. 医生编号
正确答案:A
- 已知关系
Member(S#, Name, D#)
和Team(D#, Dname,Leader)
,其Member
的S#
为主键,D#
为外键,且S#
范围为1000000-1100000
。Team = {<’01’,’技术研发’,’赵六’>,<’02’,’产品运营’,’钱琪’>}
。 问:下面哪一个选项中的元组可以是Member
的元组。_______
A. <‘1000101’,null, ‘01’>
B. <‘1000102’,‘张三’,‘05’>
C. <null,‘李四’,‘01’>
D. <‘1101010’,‘王五’,‘02’>
正确答案:A
【解析】考察三个完整性约束。
- 根据主键不能有空值
null
,排除 C;- 根据
Member
中D#
为外键,参照Team
中的D#
值只有'01'
和‘02’
,所以排除 B;- 最后根据用户自定义约束,
$#
的范围,排除 D;- A 选项中
Name
虽为null
,但Name
不是主键所以无妨,可能新来的员工但录入员不记得他的名字了呢~
- “合同”关系和“客户”关系如下表所示,关于这两个表说法正确的是________
A. “合同”关系和“客户”关系的主码分别为“合同号”和“客户号”,“合同”的外码为“客户号”
B. “合同”关系和“客户”关系的主码都为“客户号”,“合同”的外码为“合同签订人”
C. “合同”关系和“客户”关系的主码分别为“合同号”和“客户名称”,“合同”的外码为“合同签订人”
D. “合同”关系和“客户”关系的主码分别为“合同名称”和“客户号”,“合同”的外码为“客户号”
正确答案:A
- 关于关系模型完整性的说法,不正确的是______
A. 外键如果取空值,则违反了参照完整性
B. 数据库中有了空值会影响许多方面,如影响聚集函数运算的正确性等
C. 用户自定义完整性是指用户针对具体的数据库应用所定义的完整性约束条件
D. 实体完整性和参照完整性一般由 DBMS 系统自动支持
正确答案:A
- 关于学生关系,下列哪一个属性适合作为候选码_______
A. 学号
B. 年龄
C. 性别
D. 班级
正确答案:A
- 关于关系模式与关系,说法不正确的是_______
A. 关系模式是稳定的;同一关系模式下,只有一种关系
B. 同一关系模式下,可有很多的关系
C. 关系模式是关系的结构, 关系是关系模式在某一时刻的数据
D. 关系模式是稳定的;而关系是某一时刻的值,是随时间可能变化的
正确答案:A
- 关于关系的特性,说法不正确的是______
A. 关系是以属性在关系的位置来区分的
B. 关系是以内容(名字或值)来区分的
C. 区分哪一列是靠列名
D. 区分哪一行是靠某一或某几列的值
正确答案:A
- 关于关系的特性,说法不正确的是______
A. 关系的任意两列上的值不能完全相同
B. 关系的任意两个元组不能完全相同
C. 元组相同是指两个元组的每个分量都相同
D. 在同一个关系中如存在相同的元组,则仅保留其中的一个
正确答案:A
- 关系模型就是处理 Table 的,它由哪些部分组成_________。
A. 关系(或者表)、关系运算和完整性约束
B. 关系(或者表)和关系运算
C. 关系(或者表)和完整性约束
D. 其他选项都不对
正确答案:A
- 关系数据库中,体现 “实体能够区分并唯一标识元组” 的规则是________。
A. 实体完整性规则
B. 参照完整性规则
C. 用户自定义完整性规则
D. 属性的值域限定规则
正确答案:A
- 根据关系模型的完整性规则,一个关系中的主键________。
A. 不允许空值
B. 可以有多个
C. 不能成为另一个关系的外键
D. 可以取空值
正确答案:A
- 关系模型中,实体完整性是指_________。
A. 实体的主码中的属性值不能为空值
B. 实体不允许是空实体
C. 实体的外键值不允许是空值
D. 实体的属性值不能是空值
正确答案:A
- 若规定工资表中的基本工资不得超过 5000 元,则这个规则属于________。
A. 用户定义完整性约束
B. 其他都不是
C. 实体完整性约束
D. 参照完整性约束
正确答案:A
- 关于“关系”的说法,正确的是________。
A. 关系是一个由行与列组成的、能够表达数据及数据之间联系的二维表
B. 表中某一列的数据可以同时出现字符串与数值
C. 表中某一列的值可以取空值 null
,所谓空值就是空格
D. 表中只能有一列作为主关键字,用来唯一标识一行
正确答案:A
- 下列几个表符合关系约束的是__________。
正确答案:A
- 关于关系的特性,说法不正确的是_________。
A. 表中行的顺序、列的顺序不可以任意交换
B. 表中的每一列均需有一个唯一的名字
C. 表中不允许出现完全相同的两列
D. 表中行的顺序、列的顺序均可以任意交换
正确答案:A
- 关系模型中,实现不同关系之间的联系是通过________。
A. 外键
B. 关系
C. 表
D. 候选码
正确答案:A
- 参照完整性规则是指表的__________必须是另一个表主键的有效值,或者是空值。
A. 外键
B. 候选键
C. 主键
D. 主属性
正确答案:A