1.2.1 关系模型
关系模型由一组关系组成。每个关系的数据结构就是一张规范化的二维表。图1.2给出了一张Access中的学生表,这就是一个关系。图1.3是一张选课成绩表,这也是一个关系。这两张表中都有同样的属性“学生编号”,根据学生编号将两个关系关联起来。
图1.2 学生表
图1.3 选课成绩表
1.基本术语
(1)关系(Relation)
一个关系就是一张二维表,每个关系都有一个相对应的关系名。在Access中,一张数据表就是一个关系,表的名字就是关系名。
关系模式:对关系的描述。
关系模式的格式为:
关系名(属性名1,属性名2,…,属性名n)
在Access中,关系模式表现为表的结构:
表名(列名1,列名2,…,列名n)
例如:学生(学生编号,姓名,性别,年龄,入校日期,团员否,住址,照片)
选课成绩(选课ID,学生编号,课程编号,成绩)
(2)元组(Tuple)
在一个二维表中,一行即为一个元组,也称为一条记录。元组在Access表中对应一条具体的记录。例如,学生表和选课成绩表中都包含了多条记录,每一行即为一条记录。
(3)属性(Attribute)
在一个二维表中,一列即为一个属性,也称为字段。给每个属性起一个名称即属性名(或称字段名)。例如,学生表有8列,对应8个属性(学生编号,姓名,性别,年龄,入校日期,团员否,住址,照片)。
(4)域(Domain)
域就是属性的取值范围。例如,“性别”属性取值范围为“男”“女”两个汉字,“团员否”属性取值范围只能从逻辑真或逻辑假两个值中取值(Yes或No)。
(5)分量(Component)
分量就是元组中的一个属性值。例如,“121032101”是一个学生的学生编号。
(6)码(也称关键字或键,Key)
表中的某个属性或属性组,其值可以唯一确定一个元组。例如,学生表中的学生编号可以唯一确定一个学生,也就成为学生关系的码。姓名字段中,有可能两个学生的姓名是一样的,因此,姓名不能作为唯一确定一个元组的关键字。假如学生表中还有一个身份证号属性,因为每个人的身份证号均不相同,它也能唯一确定一个学生,因此,它可作为候选键。在一张表中,可以有多个候选键,选择其中一个可以作为此表中的主关键字(主键)。在Access中,主键就起到了唯一标识一条记录的作用。例如,学生编号即为学生表中的主键,选课ID是选课成绩表中的主键。
(7)外关键字(Foreign Key)
如果表中的一个关键字不是本表的主关键字,而是另外一个表的主关键字或者候选关键字,则这个属性就称为外关键字(外键)。
例如,选课成绩表中,学生编号不能唯一确定表中的一条记录,它不是本表中的主键,但它是学生表中的主键,则学生编号就是选课成绩表中的外键。外键可以把两张有联系的表关联起来。学生表和选课成绩表通过学生编号这个字段建立了联系。
2.关系的性质
(1)关系的每一个属性值必须是不可再分的元素。
关系模型要求关系必须是规范化的,即关系必须满足一定的规范条件。其中最基本的条件就是,关系的每一个分量必须是一个不可分的数据项,也就是说,表中不能再含有表。
(2)每一列中的数值是同类型的数据,来自同一个域。
(3)不同的列应给予不同的属性名。
在同一个关系中不能出现相同的属性名。在Access中,同一张表中不能有相同的字段名。
(4)任意两个元组不能完全相同。
在Access中,同一张表中不能有两条完全相同的记录。
(5)行列的次序可以任意交换。
在一个关系中,行的次序无关紧要,列的次序也无关紧要。任意交换两行或两列的位置不影响数据实际的意义。例如,在学生表中,学生编号为“121032101”的学生记录与学生编号为“121032102”的学生记录次序可以交换,学生编号和姓名两列次序可以交换,均不会影响学生的信息。
表1.1给出了关系术语和一般表格术语的对比。
表1.1 术语对比