学生关系就是一个二元关系。这个四行八列的表格的每一列称为一个字段(即属性),字段名相当于标题栏中的标题(属性名称);表的每一行是包含了八个属性(学号、姓名、性别、出生年月、入学时间、专业、电话、地址)的一个八元组,即一个人的记录。这个表格清晰地反映出学生的基本情况。
表中每一行表示一个记录值,每一列表示一个属性(即字段或数据项)。该表一共有m 个记录,每个记录包含n 个属性。
作为一个关系的二维表,必须满足以下条件:
(1)表中每一列必须是基本数据项(即不可再分解);
(2)表中每一列必须具有相同的数据类型(例如字符型或数值型);
(3)表中每一列的名字必须是惟一的;
(4)表中不应有内容完全相同的行;
(5)行的顺序与列的顺序不影响表格中所表示的信息的含义。
在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。
7.2.4数据库相关术语
数据库中最常用的术语有字段、记录、表和联系等,以及对数据库关系表中信息的基本操作:选择、投影和连接。
1.字段(Field)
在学生基本情况表中,包含了学生的学号、姓名、性别、出生年月、电话等内容。
在数据库表中,每一项称为一个字段,即表中的一列(属性)。字段由字段名和字段值组成。
2.记录(Record)
在学生基本情况表中,详细记录了一个学生具体内容的一组信息称为一个记录,即表中的一行(元组)。一个记录由若干个字段(列)组成。
3.表(Table)
存放了一组相似记录的集合(记录集)称为一个表(关系)。数据表由若干组结构相同的记录(行)组成。
6.数据库(DataBase)
一个数据库由若干个有关联的数据表组成。数据库作为信息管理的软件集成环境,为数据库中的表以及表与表之间的数据管理提供了一整套的操作规则与便捷工具。
4.关键字(KeyWord)
每一个表应该包含一个或一组字段,这些字段是表中所保存的每一条记录的惟一标识,此信息称作表的主关键字或称主键。主键一般用于建立表对象中数据的索引和建立表对象之间的关系。如“学生”表中的学号字段,“课程”表中的课程号字段,而“成绩”表中的学号和课程号字段作为一组来惟一标识表对象中的每一条记录。
5.联系(Relationship)
数据库中不仅要存放数据信息,而且必须保存能反映数据之间联系的信息。联系体现数据库中表与表之间的关联。通常表与表之间的联系有一对一(1:1)、一对多(1:m)和多对多(n :m)。
在“学籍管理”数据库中的“学生”与“成绩”表之间就是一对多联系(1:m),一个学生可以选多门课,可以有多门课程的成绩;但某一个特定课程的特定成绩只能属于某一个学生。
“课程”与“成绩”表之间也是一对多的联系(1:m),一门课可以被多个学生选,一门课程可以有多个学生的成绩;但某一个特定学生的特定成绩只能对应某一门课程。
“专业”与“学生”表之间依然是一种一对多的联系(1:m),一个专业可以被多个学生选,但一个学生只能属于一种专业。
而“学生”与“课程”表之间就是多对多的联系(m:n),一个学生可以选多门课,一门课程可有多个学生选。
“学籍管理”数据库中的4个表对象(“学生”、“课程”、“成绩”和“专业”)以及它们之间的关联方式;“学生”表和“成绩”表的联系通过“学号”字段来匹配,“课程”表与“成绩”表之间的联系由“课程号”决定;而“学生”表和“专业”表的联系则通过“编号”字段来作为查阅向导索引。
6.完整性
数据库的完整性是指数据库中各个表及表之间的数据的有效性、一致性和兼容性。
数据库的完整性包括实体完整性、参照完整性和用户自定义完整性三部分。
(1)实体完整性:指一个表中主关键字的取值必须是确定的、惟一的,不允许为空值。
例如,对“学生”表中的记录,主键“学号”字段的取值必须是惟一的、且不能为空值。这就要求在“学生”表中存储的记录必须满足这一条件,而且在输入新记录、修改已有记录时也要遵守这一条件。
(2)参照完整性:指表与表之间的数据一致性和兼容性。例如,在“学生”表(父表)与“成绩”表(子表)之间的参照完整性要求:在“成绩”表中,字段“学号”的取值必须是“学生”表中“学号”字段取值当中已经存在的一个值。类似地,在“课程”表(父表)与“成绩”表(子表)之间也必须遵守类似的参照完整性的规则。
(3)用户自定义完整性:是由实际应用环境当中的用户需求决定的。通常为某个字段的取值限制、多个字段之间取值的条件约束等。例如,在“成绩”表中,“成绩”字段的取值必须为0~100。
7.关系操作
选择、投影和连接是关系的三种基本操作。
(1)选择:按照一定条件在给定关系中选取若干记录(即选取若干行)。
(2)投影:在给定关系中选取确定的若干字段(即选取若干列)。
(3)连接:按照一定条件将多个关系的记录连接(即连接多张表)。
“成绩查询”记录集的选择操作(在“成绩查询”所有记录中选择某个学生的记录,筛选若干行)。
7.3创建数据库
数据库应用的主要事务有三类,即数据编辑存储、数据查询检索和数据报表输出。
要实现数据库的基本事务处理工作,首先要建立数据库,但建立数据库的第一步是根据实际应用问题的需要对所涉及的数据进行分析、组织、设计,进而构架数据库。
7.3.1设计数据库及表
构架数据库是一项关键而复杂的工作,这需要有经验的系统分析和系统设计人员对应用任务的整体考量与全盘分析。合理周密的设计是创建能够有效、准确、及时地完成所需功能的数据库的基础。虽然限于篇幅,这部分知识不能全面展开介绍,但是设计一个数据库的大致步骤基本是固定的,对于比较简单的数据库设计还是容易做到的。这需要决定:
把相关联的数据有效地组织和存储在数据库中的几个表对象中?
每个表对象应该包含哪些类型的数据(字段与记录)?
各个表对象之间如何建立联系(主键与关联)?
1.分析数据需求确定概念模型元素
基于对象的数据模型又称为概念模型,使用了实体、属性和联系等概念。
实体是数据库中描述的组织中独立的对象(人、事件、概念、事务和地点等);属性描述对象的某个需要进行记录的特征或性质;联系是实体之间的关联。基于对象的概念模型之实体联系模型是数据库设计的重要技术,也是最常用最基础的概念模型。
根据学籍信息管理系统的实际功能和数据体现,分析数据需求初步确定概念模型元素。首先,需要确定符合应用需要的主题(实体),这里包括了学生基本情况、课程相关信息和对应课程的学生成绩信息等。其次,需要确定与各个主题相关的并且是应用需要体现的特征属性(字段)以及便于实现运算和存储处理的数据类型(字段类型)。接着,需要确定可以惟一标识每一条记录的主键。最后,需要合理地调配数据的归属,确定各个主题之间的关联,保证数据的最小冗余度和最大共享性。
2.用E‐R图表示概念模型
E‐R(Entity‐Relationship)图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
构成E‐R图的基本要素是实体型、属性和联系,其表示方法为:
(1)实体型:用矩形表示,矩形框内写明实体名;(2)属性:用椭圆形表示,并用无向边将其与相应的实体连接起来,带下划线的属性为主键;(3)联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1,1:n 或m :n)。
3.构架关系数据库表
根据“学籍管理”的实体联系(E‐R)模型图,进一步构架“学籍管理”关系数据库表对象及其相关元素。
4.确定字段的数据类型
“学籍管理”数据库中包含的4个表对象“学生”、“课程”、“成绩”和“专业”的结构列表样本,其中罗列了每个表对象中相关字段的数据类型设置情况。
“学籍管理”数据库中4个表对象“学生”、“课程”、“成绩”和“专业”的结构列表表总结了在Microsoft Access 中常用的字段数据类型及它们的用法和存储空间的大小。
7.3.2创建数据库及表
创建数据库包括创建空数据库“学籍管理”(扩展名为.MDB)、在数据库中建立表(确定主键)以及建立表与表之间的关联等操作。
1.创建数据库
启动Microsoft Access,按照界面提示新建空数据库,取名“学籍管理”。
2.向数据库添加表并定义表结构
在数据库窗口中,选择“表”对象,并双击“使用设计器创建表”;在表的设计视图中,“学籍管理”数据库中的4个表对象“学生”、“课程”、“成绩”和“专业”的结构列表样本,输入数据表中各字段的名称、数据类型以及字段大小等。
特别值得注意的是,“学生”表中的“专业”字段的数据类型要选择“查询向导”,然后按照界面提示与“专业”表建立列表联系(“专业”表要先建立)。“成绩”表中的“学号”和“课程号”字段也可以在“查阅”页分别设置为与“学生”表和“课程”表相对应的列表显示,以便于输入和查询。
另外,还需要设置表的主键(在添加“成绩”表时,可以不设主关键字,尤其不要将“成绩”表中的字段“学号”设为主键,因为在该表的多个记录中“学号”字段值并不是惟一的)。
最后,按照提示在“表名称”中输入表的名称。至此,完成了建立包括4个表的数据库“学籍管理.mdb”。
3.设置字段属性
在创建数据表结构时常用的字段属性设置说明如下:
(1)字段大小:在字段中所能输入的最大字符数或数字的大小及类型。例如,当设定一个字符型的字段大小为8时,最多只能在该字段中输入8个字符或4个汉字。
(2)格式:字段的显示格式。可以在提供的格式列表中改变字段的显示格式。
(3)输入掩码:字段的数据输入模式。例如,可以让用户按“YYYY‐MM‐DD”格式输入日期。
(4)标题:显示给用户的字段说明标题。例如,将字段学号的标题设置为“学生编号”的话,在显示表格时,该字段的标题是“学生编号”。
(5)有效性规则:对该字段中所能输入的数据的约束条件。例如,对于“成绩”表的“分数”,有效性规则为“<=100And>=0”,表示该字段不接受超出0~100的数据。
(6)有效性文本:当输入不符合有效性规则的数据时,系统显示警告或提示字符串。
(7)必填字段:当前字段是否可以是NULL(空值)。NULL 是一种特殊的数据类型,可以简单地理解为“空”或“什么也没有”,如果某个变量或字段的值为NULL,则说明该变量或字段中不包含有效的数据。NULL 不等同于空字符串“”(空字符串是一个字符串,只不过长度为零),也不等同于数字0。
(8)索引:是否用当前字段为表建立索引(逻辑排序)。
(9)主键:数据表的各字段中,只有一个字段可以选为数据表的主键,用来惟一标识表中的一条记录。在“学生”表中,“学号”应为表的主键,因为每个学生的学号都不同,学号惟一地标识了一个学生。在“学号”字段上右击,在弹出的快捷菜单中单击“主键”。
7.3.3编辑数据库及表
1.向表中输入数据
在数据库窗口中,双击“学生”表后,会出现“学生”数据表的编辑窗口,可以向表中输入数据,“专业”字段不需要输入,只需要在下拉列表中选择对应的专业名就可以了(“专业”表应该先完成数据输入)。而“照片”字段的输入则需要点击鼠标右键,在快捷菜单中选择“插入对象”,再按照界面引导选择已经存在的.bmp 的图片文件。
输入结束,关闭相应窗口。用同样方法完成“课程”和“成绩”表的数据输入工作。
2.编辑数据库中的数据
建立好的数据库以及其包含的多个表对象,除了初始的部分数据录入工作外,对数据库中数据的日常编辑维护工作自然是必不可少的,诸如:追加、修改、删除和查询信息等操作。
简单的编辑工作可以直接在Access 环境中的可视化操作界面上进行(输入数据界面配合菜单操作)。当然,也可以通过后续将介绍的窗体界面或是结构化查询语言SQL用代码的方式实现。
7.3.4建立表之间的关联
前面建立完成的数据库以及其中添加的3个表对象“学生”、“课程”和“成绩”之间并没有关联关系,其中“学生”与“专业”表的关联,在建立“学生”表的结构时,设置“专业”字段的数据类型为“查询向导”时,系统自动建立了两个表的关联。
为了将多个表中的数据有效地联系起来,同时保证数据库中各个表中数据的参照完整性,必须建立表之间的关联,这样才能在后续的查询和报表中充分有效地访问和利用表中的数据,完成实际问题所需的操作。