1.2 一个示例
下面我们来看一个大多数读者可能都很熟悉的简单例子:UNIVERSITY数据库,在此维护了某大学有关学生、课程和成绩的信息。图1.2显示了此数据库的结构以及对应此数据库的一些示例数据。这个数据库组织为5个文件,每个文件都存储同一类型的数据记录②。STUDENT文件存储有关各学生的数据,COURSE文件存储各课程的相关数据,SECTION文件存储各课程单元的数据,GRADE_REPORT文件存储学生在其完成的各课程单元所取得的成绩,PREREQUISITE文件存储了每门课程的先修课程。
要定义这个数据库,必须指定存储在各记录中的数据元素(data element)的不同类型,以确定每个文件的记录结构。在图1.2中,每个STUDENT记录中包括有表示学生Name(姓名)、StudentNumber(学号)、Class(年级:一年级或1、二年级或2……)和Major(专业:数学或MATH、计算机科学或CS……)的数据;每个COURSE记录包括表示CourseName(课程名)、CourseNumber(课程号)、CreditHours(学时)、Department(系:即开设该课程的系)的数据。其他记录也要做类似定义。此外,还必须为记录中的各个数据元素指定一个数据类型(data type)。例如,可以指定STUDENT的Name是字母字符所构成的串,STUDENT的StudentNumber是一个整数,GRADE_REPORT的Grade是{A, B, C, D, F, I}集合中的一个字符。还可以用一种编码机制来表示一个数据项的值。如,在图1.2中,我们将一个STUDENT的Class表示为1(代表一年级)、2(代表二年级)、3(代表三年级)、4(代表四年级)以及5(代表研究生)。
![]() |
| 图1.2 存储学生和课程信息的数据库 |
要构建UNIVERSITY数据库,我们将表示各学生、课程、课程单元、成绩报告和先修课程的数据作为记录存储在相应的文件中。请注意,不同文件中的记录之间可能是相关联的。例如,STUDENT文件中对应“Smith”的记录与GRADE_REPORT文件中的两个记录有关联,这两个记录指定了Smith在两个课程单元的学习成绩。类似地,PREREQUISITE文件中的每一条记录与两个课程记录相关:其中一个记录表示课程;另一个记录表示先修课程。大多数中型和大型数据库都包括许多不同类型的记录,而且记录间都存在许多关系。
数据库操纵包括查询和更新。查询的例子如:“检索Smith的成绩单,即所有课程和成绩的列表”、“列出哪些学生选修了1999年秋季单元的数据库课程,并列出他们在这个课程单元的学习成绩”、“数据库课程的先修课程有哪些”。更新的例子包括:“将Smith的年级改为二年级”、“为本学期的数据库课程创建一个新的课程单元”和“为Smith上一个学期的数据库课程单元输入成绩A”。在处理这些非正式的查询和更新之前,必须用DBMS的查询语言准确地加以指定。
| 回书目 上一节 下一节 |