当前位置:课程学习>>第六章 属性数据管理>>电子教案>>知识点二


知识点二:数据库设计的四种类型、关系数据库实例、规范化以及关系类型


2.3 关系类型

关系数据库的表格之间(cardinalities)(更精确地说,是表格中的记录之间)通常包括四种关系类型:一对一、一对多、多对一和多对多(图6.6)。“一对多”关系是指目标表中的一条记录可以与源表中的多条记录关联。例如,一个公寓综合楼的街道地址可能包括很多住户。“多对一”关系正好与一对多相反,目标表中两个以上的记录与源表中的一个记录关联。例如,公寓综合楼的很多住户将会共享同一个街道地址。“多对多”关系是指目标表中的多条记录可以与源表中的多条记录关联。例如,一个林地可以有很多树种,一个树种又可以在多个树林中生长。

图6.6关系数据库表格之间的四种数据关系类型:一对一、一对多、多对一和多对多。

说明及这些关系,尤其是“一对多”和“多对多”的关系,基表的设计很有帮助。例如,如果要把费空间表的属性数据关联到一个要素属性表中,则这个要素属性表就是基表,其他表格就是被关联的目标表(图6.7)。要素属性表有主关键字,其他表有外部关键字。通常,基表的设计取决于数据的存储和信息的查询。下面用两个例子来说明。

图6.7由共同关键字提供右边的表格与左边的要素属性表的链接。

第一个例子涉及图6.5规范化得到的4个表:地块、业主、地址和分区。假设问题是要查找选定地块的业主。为了回答这个问题,您可以把地块表作为基表,把业主表作为被关联的表。则两表之间的关系为“一对多”:地块表中的一条记录可以对应于业主表一条以上的记录。

假设问题改为查找选定业主所拥有的地块。这时,合适的设计应把业主表作为基表,地块表作为被关联的表。其关系就变成了“多对一”:业主表中的一条以上的记录可能对应着地块表中的一条记录。地块表与分区表的关系也是如此。如果问题是查找一个选定地块的分区代码,这是一个“多对一”的关系。如果问题是查找商业区的地块,则是“一对多”的关系。

第二个例子涉及SSURGO数据库。在使用数据库之前,最好将表格之间的关系进行分类。例如,因为不同的推荐树种可能和相同的土壤组分相关联,则树种组成管理表(cotreestomng)和组分表(component)的关系就是“多对一”的关系(图6.8)。另外,因为一个地图单元可能和多个土壤组分相关联,地图单元表(mapunit)和组分表则为“一对多”的关系(图6.9)。

除了连接表格的作用外,关系类型还影响到数据的显示。假设要显示地块的业主。如果地块和业主表是“一对一”关系,每一地块都可以用唯一的符号来显示。如果关系是“多对一”的,则每一符号代表一个或多个地块。但是,如果关系是“一对多”的,数据显示就会出问题了,因为一个地块可能有一个以上的业主,用业主列表中的第一个业主来代替地块的多个业主就不对了(此时,可以对多业主地块类别设计不同符号来解决该问题)。

图6.8 SSURGO数据库中“多对一”关系的例子:把在cotreestomng中的三种树种与在component的相同土壤组分关联起来。

图6.9 SSURGO数据库中“一对多”关系的例子:把在mapunit中的土壤的地图单元与在component中的两种土壤组分关联起来。

进入知识点三