1.试述关系模型的三个组成部分。
- 数据结构:二维表格结构
- 数据约束:域完整性 (Domain Integrity)、实体完整性 (Entity Integrity)、参照完整性 (Referential Integrity)、用户定义的完整性 (User-defined Integrity)
- 数据操作:基于关系代数和关系演算。
2.简述关系数据语言的特点和分类。
关系代数语言、关系验算语言以及具有关系代数和关系演算双重特点的语言。
3.定义并理解下列术语,说明它们之间的联系与区别
(1)域,笛卡儿积,关系,元组,属性;
- 域(Domain):属性的取值范围。所有可能的取值的集合。
- 笛卡尔积:给定一组域D1,D2,…,Dn(它们可以有相同的元素,即可以完全不同,也可以部分或全部相同),D1,D2,…,Dn的笛卡尔积为D1×D2×……×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}。
- 关系:笛卡尔积D1×D2×…×Dn的任一子集称为定义在域D1,D2,…Dn上的n元关系(Relation),可用R(D1,D2 ……Dn)表示
- 元组:笛卡尔积每一个元素(d1,d2,d3,…,dn)叫做一个n元组(n-tuple),简称元组(Tuple)。
- 属性:实体所具有的某一特性称为属性
(2)主码,候选码,外码:
- 主码:若存在多个候选键,则可以任选一个作为该实体集的主码(primary key)。主键会被数据库登记和使用。
- 候选码(candidate key)是某个超键的最小集
- 外码:设F是关系R的一个或一组属性,但不是关系R的键。如果F与关系S的主键K相对应,则称F是关系R的外码
(3)关系模式,关系,关系数据库。
- 关系的框架(表头)称为关系模式(relation schema)
- 关系是关系模式在某一时刻的数据实例,即具体的表数据。
- 关系数据库系统是支持关系模型的数据库系统
4.举例说明关系模式和关系的区别。
假设我们有一个关系模式用于描述学生的信息,可以表示为:
Student(SID, Name, Age, Gender, Major)
其中
Student是关系名,表示这个关系模式是关于学生的。SID、Name、Age、Gender、Major是属性名,分别表示学生的学号、姓名、年龄、性别和专业。
关系模式定义了表的结构,包括表名和列名,以及每列的数据类型(在这个例子中未明确指出数据类型,但通常会在数据库设计中定义,比如SID可能是整数类型,Name可能是字符串类型等)。
关系: 基于上述关系模式,一个具体的关系(即表中的数据)可能如下所示:
SID | Name | Age | Gender | Major
---------------------------------
1 | Alice | 20 | F | Computer Science
2 | Bob | 22 | M | Mathematics
这里每一行就是一个元组,代表了一个具体的学生记录。例如,第一行表示学号为1的学生Alice,她20岁,是女性,专业是计算机科学。
区别:
- 关系模式是抽象的,它定义了数据的结构,但不包含实际的数据。它相当于数据库中的表结构。
- 关系是具体的,它是关系模式的一个实例,包含了实际的数据。它相当于数据库表中存储的具体行记录。
5.试述关系模型的完整性规则。在参照完整性中,什么情况下外码属性的值可以为空值?
- 域完整性 (Domain Integrity)
属性值应符合域的取值范围
对属性值能否为空(NULL)的检查也是域完整性约束的一部分 - 实体完整性(Entity Integrity)
主属性不能为空
主属性取值唯一 - 参照完整性规则
外键上的取值只能是空值,或等于被参照关系中某个元组的主键值 - 用户定义的完整性( Referential Integrity)
用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
在参照完整性中,什么情况下外码属性的值可以为空值?
当外码字段不是其所在表的主键时,外码字段可以为空。
例如,考虑两个表:一个是学生表(Students),另一个是课程表(Courses)。学生表中有学生ID(SID)作为主键,课程表中有课程ID(CID)作为主键。如果还有一个选课表(Enrollments),其中包含学生ID(SID)和课程ID(CID),那么:
- SID在选课表中是外键,引用学生表的主键。
- CID在选课表中也是外键,引用课程表的主键。
在这种情况下,如果选课表中的SID可以为空,CID不能为空: - SID为空表示没有学生与该选课记录关联,可能是尚未分配学生或者该课程是公开的,不需要学生注册。
- CID为空表示没有课程与该选课记录关联,这是不合理的,因为选课记录应该总是与某个课程相关联。