1.4 数据模型
1.4.1 数据模型的概念
模型是现实世界特征的模拟与抽象,比如日常生活中所见到的汽车模型、航空模型等都是具体的模型,人们见到这些模型就联想到真实的事物。数据模型(Data Model)也是一种模型,它是数据特征的抽象。数据模型是数据库系统的核心与基础,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供了一个抽象的框架。数据模型所描述的内容有三部分:数据结构、数据操作和数据的约束条件。
(1)数据结构:主要描述数据的类型、内容、性质以及数据间的联系等,是对系统静态特征的描述。数据结构是数据模型的基础,数据操作和约束都是建立在数据结构上的,不同的数据结构具有不同的操作和约束。通常按照数据结构的类型来命名数据模型,例如层次结构、网状结构和关系结构的数据模型分别被命名为层次模型、网状模型和关系模型。
(2)数据操作:主要描述在相应的数据结构上进行的操作类型和操作方式,是对系统动态特征的描述。
(3)数据的约束条件:主要描述数据结构内数据间的语法、词义联系、制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。它是一组完整性规则的集合,用以限定符合数据模型的数据库状态及其变化。
1.4.2 数据模型的分类
现有的数据库系统都是建立在某种数据模型之上的。数据模型应满足三个要求:一是能比较真实地模拟现实世界,二是容易让人理解,三是在计算机中比较容易实现。一种数据模型要同时满足这三个要求会比较困难,因此在数据库系统中针对不同的使用对象和应用目的会分别采用不同的数据模型。不同的数据模型实际上也是提供给我们模型化数据和信息的不同工具。根据应用的不同目的,目前广泛使用的数据模型有两类,它们分别属于两个不同的层次。
(1)概念模型:也称为信息模型,是一种面向用户、面向客观世界的模型,主要用来描述世界的概念化结构。它按用户的观点对数据和信息建模,帮助数据库的设计人员在设计的初始阶段,摆脱计算机系统及数据库管理系统的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据库管理系统无关。概念模型是现实世界到信息世界的第一次抽象,用于信息世界的建模,是数据库设计人员的有力工具,也是数据库设计人员与用户之间交流的语言。
(2)数据模型:它直接面向数据库的逻辑结构,是对现实世界的第二次抽象。它按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。目前最常用的数据模型主要包括层次模型、网状模型、关系模型。
现实世界转换为计算机世界的过程如图1-5所示。
图1-5 现实世界转换为计算机世界的过程
1.4.3 概念模型的表示方法
1. 信息世界的基本概念
(1)实体(Entity):是指客观世界中存在并且可以相互区分的事物,可以是具体的人、事、物等实际对象,也可以是抽象的概念和联系。一个学生、一个部门、一门课、一次选课、部门与职工的关系等都是实体。
(2)属性(Attribute):是指实体所具有的某一特性,一个实体包含若干属性。例如,职工实体可以由职工号、姓名、性别、年龄、学历、部门等属性描述。(1001,张三丰,男,33,研究生,技术部)这个属性组合用来描述一个职工实体。
(3)码(Key):是指唯一标识实体的属性或属性集。例如,职工号是职工实体的码。
(4)域(Domain):是指属性的取值范围。例如,职工号的域为4位整数。
(5)实体型(Entity Type):具有相同属性的实体必然具有共同的特征和性质,可以用实体名及其属性名集合来抽象刻画这些实体。例如,职工(职工号,姓名,性别,年龄,学历,部门)就是一个实体型。
(6)实体集(Entity Set):同类实体的集合称为实体集。例如,全体职工就是一个实体集。
(7)联系(Relationship):在客观世界中,事物内部及事物之间是普遍存在联系的,这些联系在信息世界中表现为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指组成实体的各属性之间的联系。实体之间的联系通常是指不同实体型之间的联系。
2. 概念模型的表示方法
概念模型的表示方法有很多,最常用的表示方法为实体-联系方法(Entity-Relationship Approach),简称E-R方法,该方法使用E-R图(Entity-Relationship Diagram,实体-联系图)来描述现实世界的概念模型。E-R方法也称为E-R模型(Entity-Relationship Model)。
(1)实体型用矩形表示,在矩形框内写实体名。
(2)属性用椭圆形表示,在椭圆框内写属性名,并用无向边将其与相应的实体连接起来。例如:学生实体具有学号、姓名、性别、年龄、班级等属性。用E-R图表示如图1-6所示。
图1-6 学生实体及属性
(3)联系用菱形表示,在菱形框内写联系名,并用无向边分别与有关实体连接起来,同时在无向边旁边标注联系的类型。两个实体型之间的联系通常有3种。
一对一联系(1:1):在该联系中,对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,记为1:1。其联系如图1-7所示。例如,一个职工只能有一个工作证,一个工作证只能属于一个职工,则职工和职工证之间就是一对一的联系。
一对多联系(1:n):在该联系中,对于实体集A中的每一个实体,实体集B中有n(n≥0)个实体与之联系。反之,对于实体集B中的每一个实体,实体集A中至多有一个实体与之联系,记为1:n。其联系如图1-8所示。例如,一个职工可以有多个手机号码,但一个手机号码只能实名认证给一个职工,职工与手机号码之间的联系就是一对多的联系。
多对多联系(m:n):在该联系中,对于实体集A中的每一个实体,实体集B中有n(n≥0)个实体与之联系。反之,对于实体集B中的每一个实体,实体集A中也有m(m≥0)个实体与之联系,记为m:n。其联系如图1-9所示。例如,一个项目可以有多个职工参加,而一个职工也可以参加多个项目,则项目和职工之间的联系是多对多的联系。
实际上,一对一联系是一对多联系的特例,而一对多联系又是多对多联系的特例。
图1-7 1:1联系
图1-8 1:n联系
图1-9 m:n联系
通常,两个以上的实体型之间也存在着一对一、一对多、多对多联系。例如,对于课程、教师与参考书三个实体集来说,一门课程可以由若干个老师讲授,使用若干本参考书,每一个老师只讲授一门课程,每一本参考书只供一门课程使用,则课程、教师与参考书三者之间的联系是一对多的,如图1-10所示。
再如,对于供货商、工程、材料三个实体集来说,一个供货商可以供给多个工程多种材料,而每个工程可以使用多个供货商提供的材料,每种材料又可以由不同的供货商提供,则供货商、工程、材料三者之间的联系是多对多的,如图1-11所示。
图1-10 三个实体集之间一对多的联系
图1-11 三个实体集之间多对多的联系
同一个实体集内的各实体之间也存在一对一、一对多、多对多的联系。例如职工实体集内部具有领导与被领导的联系,即某一职工(干部)“领导”若干名职工,而一个职工仅被另外一个职工直接领导,因此这是同一实体集内一对多的联系,如图1-12所示。
图1-12 同一实体集内1:n联系
注意,如果联系也具有属性,则这些属性也要用无向边与该联系连接起来。例如学生与课程之间存在学习的联系,学习就有“成绩”这一属性。学生与课程的E-R图如图1-13所示。
图1-13 学生与课程的E-R图