1.4 如何描述数据库

1.4.1 实体与记录

在生活中,我们经常会听到“实体”(Entity)一词,例如,一个部门就可以称为一个实体,又如学生、教师、课程、班级等也可以称为实体。在数据库概念中,实体是所有客观存在的、可以被描述的事物,如计算机、人、课本、桌子等。

在计算机描述这些实体时,采用的方法是针对这些实体所具有的“特征或特性”进行描述,例如,针对学生,可能说明其学号、姓名、性别、年龄、民族等;而针对课程,要描述的应是课程号、课程名称、课程类型、课程学时和学分等。

我们再深入考虑一下,对于不同学生都可以在学号、姓名、性别、年龄等几个方面进行描述,这些描述具有统一格式,但是具体到不同学生的学号、姓名、性别、年龄等是不一样的,因此我们发现,只要是对学生的描述,描述的“格式”都是一样的,在这种格式下,不同的数据体现了不同的实体。

实体与二维表(学生基本情况表)的对应关系如图1.2所示。

图1.2 实体与二维表的对应关系

通过图1.2我们可以看出,现实生活中表格的每一行(Row)对应一个实体,在数据库中我们把每一“行”称为“一条记录”(Record),数学中称为“一个元组”,而把所有记录组成的表格称为数据库的“表”(Table),实体中的每个特征或特性称为“列”(Column)或“字段”、“属性”、“数据项”,“一条记录”中每个“字段”具体的值称为“数据”,如图1.3所示。

图1.3 表中信息表示

1.4.2 数据库与数据库表

从图1.2中我们可以看出,不同的记录组织在一起就形成了数据库的“表”,也可以说,表是实体的集合,可以用来存储具体的数据。

上面我们还提到了课程等实体形成表后存储在数据库中,一个数据库可以包含多个表(实体),简单地说,数据库就是表的集合。

早期一个数据库就是一个表,现在数据库不仅是表的集合,而且还包括各个表之间的联系。因为现实世界中的实体之间是相互联系的,如学生和课程是存在联系的,它们之间的联系用“选课”来表示。表与表之间是互相联系的,我们把表之间的联系称为“关系”(Relationship),也就是说,数据库包括多个表与表之间的“关系”。

这些“关系”后来被人们高度抽象,成为今天统一的概念,通过键、类型、规则、权限、约束、触发器等抽象概念来表示。

随着数据库的发展和需求的增加,数据库管理还产生了其他一些辅助的功能,为了便于查询产生了存储过程、视图和游标等操作数据库中表的对象,这些也成为数据库的一个重要组成部分。

1.4.3 数据冗余和数据完整性

数据冗余(Redundance)是指一种数据存在多个相同的副本,在数据库系统中可以大大减少数据冗余,提高数据的使用效率。

例如,在学生信息管理系统数据库中的学生奖惩情况表中,使用如表1.1所示的奖惩情况表来记录学生的奖惩信息。

表1.1 奖惩情况表

从表1.1中可以看出,前两条记录的“奖惩类型”中出现“奖励”,后两条记录中出现“处分”,奖励形式中也会存在相同的“三好学生”、“记过”等信息,因而存在重复的数据有简化的必要。

减少数据冗余最常见的方法是分类存储。对表1.1可做如下变化,如表1.2~表1.5所示。

表1.2 调整后奖惩情况表

表1.3 奖惩编码表

表1.4 奖励编码表

表1.5 处分编码表

经过处理可以有效地减少数据冗余,但也会增加数据查找的复杂性,查找受奖励的所有学生信息,需要查找3个表,增加了查找的复杂性,降低了查找效率,所以数据库允许有必要的数据冗余。

数据的完整性(Integrity)是指数据的正确性、有效性和相容性,即将数据控制在有效的范围内,或要求数据之间满足一定的关系。

例如,在学生信息管理系统中,如果删除一个学生的基本情况,那么学生的成绩表、奖惩情况表等表中相关的信息也应删除;一个学校中某学生没有报到,在学生成绩表中却相关的选课情况,明显是假的,而且是造假;增加或删除一个学生的基本情况信息,在班级表中该班级的学生人数也该相应的增加或减少。

因而在设计数据库时,应该考虑数据库不要有太多的数据冗余并确保数据的完整性。