【重点与难点】
最早由 E.F.Codd 在1970年提出;
形象地说,一个关系(relation)就是一个 Table。
关系模型就是处理 Table 的,它由三个部分组成:
就是要学习: Table 如何描述,有哪些操作、结果是什么、有哪些约束 等。
表的严格定义? 关系!
先回顾一下表的基本构成要素:
首先定义 “列” 的取值范围 “域(Domain)”;
域(Domain):
- 如整数的集合、字符串的集合、全体学生的集合;
- 再如, 由8位数字组成的数字串的集合,由0到100组成的整数集合;
再定义 “元组”及所有可能组合成的元组:笛卡尔积;
笛卡尔积(Cartesian Product):
若 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 笛卡尔积中的所有元组并不都是有意义的,因此…
关系(Relation):
例如下图的关系为一3目关系,描述为:
家庭(丈夫:男人,妻子:女人, 子女:儿童) 或 家庭(丈夫,妻子, 子女)
例如:
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) )
例如,下面的这个关系模式:
Student(S# char(8), Sname char(10), Ssex char(2), Sage integer, D# char(2), Sclass char(6))
可能有以下的关系:
下面举个例子,出现列不同质的现象:
这句话的意思是:关系模式 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,因此需要不同的属性名“丈夫”、“妻子”、“子女”以示区分。
关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分。
如下面两个关系是完全相同的关系(只是把“子女”和“妻子”两列换了位置):
理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有相同的两个元素);
现实应用中,表(Table)可能并不完全遵守此特性。
元组相同是指两个元组的每个分量都相同。
关系中的一个 属性组,其值能 唯一标识一个元组,若从该属性组中 去掉任何一个属性,它 就不具有这一性质 了,这样的属性组称作 候选码。
- 例如:
学生(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
也是候选码。
当 有多个候选码时,可以选定一个作为主码。
DBMS 以主码为主要线索管理关系中的各个元组。
例如,
- 可选定属性
S#
作为 “学生” 表的主码,也可以选定属性组(Sname, Saddress)
作为 “学生” 表的主码;- 可选定
EmpID
为Employee
表的主码,也可以选定 Mobile 为Employee
表的主码。通常情况下,如果候选码中含有
××ID
(××编号),则选择××ID
作为主码。
包含在 任何一个候选码 中的属性被称作 主属性,而其他属性被称作非主属性。
如 “选课” 中的 S#
, C#
为主属性,而 Sname
, Cname
, Grade
则为非主属性;
比如:关系 “教师授课”
(T#,C#)
中的候选码,(T#,C#)
就是全码。
关系 R R R 中的一个属性组,它 不是 R R R 的候选码,但它 与另一个关系 S S S 的候选码相对应 ,则称这个属性组为 R R R 的外码或外键。
两个关系通常是靠外码连接起来的。
例如 “合同” 关系中的客户号不是候选码,但却是外码。因它与 “客户” 关系中的候选码“客户号” 相对应。
关系的 主码中的属性值不能为空值。
意义:关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。
空值:不知道、不存在或无意义的值。
- 在进行关系操作时,有时关系中的 某属性值在当前是填不上 的,比如档案中有“生日不详”、“下落不明”、“日程尚待公布”等,这时就需要空值来代表这种情况。关系模型中用
?
表征。- 数据库中有了空值,会影响许多方面,如影响聚集函数运算的正确
性,不能参与算术、比较或逻辑运算等。
例如,一个班有30名同学,如所有同学都有成绩,则可求出平均成绩;如果有一个同学没有成绩,怎样参与平均成绩的计算呢,是当作 0,还是当作100呢?还是不考虑他呢?- 有空值的时候是需要特殊处理的,要特别注意。
如果关系 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#
值,表示该学生不可能分到一个不存在的系中。用户 针对 具体的应用环境 定义的 完整性约束条件。
如 S#
要求是10位整数,其中前四位为年度,当前年度与他们的差必须在4以内。
再如:
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
则关系 S S S 中违反完整性规则的元组是________
A. < 3, 3>
B. <1, 2>
C. <2,null>
D. <4, 1>
正确答案: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.
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
A. 关系(或者表)、关系运算和完整性约束
B. 关系(或者表)和关系运算
C. 关系(或者表)和完整性约束
D. 其他选项都不对
正确答案:A
A. 实体完整性规则
B. 参照完整性规则
C. 用户自定义完整性规则
D. 属性的值域限定规则
正确答案:A
A. 不允许空值
B. 可以有多个
C. 不能成为另一个关系的外键
D. 可以取空值
正确答案:A
A. 实体的主码中的属性值不能为空值
B. 实体不允许是空实体
C. 实体的外键值不允许是空值
D. 实体的属性值不能是空值
正确答案:A
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