1.2 数据库模型
数据模型是数据库系统的核心和基础,在各种型号的计算机上实现的DBMS都是基于某种数据模型的。
在现实生活中,模型的例子随处可见,一张地图、一座楼的设计图都是具体的模型。这些模型都能很容易使人联想到现实生活中的事物。
人们在对数据库的理论和实践进行研究的基础上提出了各种模型。由于计算机不能直接处理现实世界中的具体事物,所以人们必须事先把具体事物转换成计算机能够处理的数据。
数据库系统的主要功能是处理和表示对象和对象之间的联系。这种联系用模型表示就是数据库模型,它是人们对现实世界的认识和理解,也是对客观现实的近似描述。在不同的数据库管理系统中,应使用不同的数据库模型,但不管采用什么样的模型,都要满足以下基本要求:
● 能按照人们的要求真实地表示和模拟现实世界;
● 容易被人们理解;
● 容易在计算机上实现。
数据库模型更多地强调数据库的框架和数据结构形式,而不关心具体数据。
不同的数据库模型实际上是提供模型化数据和信息的不同工具,根据模型应用的不同目的,可以将这些数据库模型划分为两类,它们分别属于不同的层次。
第一类模型是概念模型。它是按用户的观点来对数据和信息建模,主要用于数据库设计。
第二类模型是数据模型,主要包括网状模型、层次模型、关系模型等。它是按计算机系统的观点对数据建模,主要用于DBMS的实现。
1.2.1 概念模型
如果直接将现实世界按具体数据模型进行组织,则需要考虑很多因素,设计工作非常复杂,并且效果也不理想,因此需要一种方法,对现实世界的信息进行描述。人们需要通过这种方法把现实世界抽象为信息世界,然后再通过相应的DBMS将信息世界转化为机器世界。在把现实世界抽象为信息世界的过程中,只抽取需要的元素及其关联,这时所形成的模型就是概念模型。在抽象出概念模型后,再把概念模型转换为计算机上某一DBMS支持的数据模型。概念模型不涉及数据组织,也不依赖于数据的组织结构,它只是现实世界到机器世界的一个中间描述形式。
目前,描述概念模型最常用的方法是实体-联系方法(即E-R方法),它是P.P.s.chen于1976年提出的。这种方法由于简单、实用,得到了非常普遍的应用。这种方法使用的工具称作E-R图,也把这种描述结果称为E-R模型。
1.实体(Entity)
在E-R图中用矩形表示一个实体,给一类实体取一个名字,叫作实体名(如学生)。在E-R图中,实体名写在矩形框内,如图1-8所示,“学生”就是一个实体。
图1-8 学生作为一个实体
2.属性(Attribute)
E-R图中实体的属性用椭圆框表示(见图1-8),框内是属性名,并用连线连到相应的实体。一个实体可以具有若干个属性。例如,学生可以有姓名、学号、年龄、性别等属性,不同的属性值可以确定具体的学生。在图1-9中,学号为2003001,年龄为20岁,男性的学生是李勇。
图1-9 实体的码
与属性相关的概念有以下几个。
(1)码(Key)
唯一标识实体的属性集称为码。例如,学生的学号就是一个码(当然也可以是其他的属性或属性集)。对不同的学生实体,码值一定是唯一的,不允许出现多个实体具有相同的码值的情况。图1-9中的学号就是学生实体的码。由于存在重名现象,所以通常姓名不被选为码。如图1-9中,姓名为王敏的学生有两名。
(2)域(Domain)
实体属性的取值一般受某个条件的约束,如果取值不满足约束条件,则认为是一种非法的值,这个约束条件确定的取值范围称为该属性的域。
例如,学生的性别的域是{“男”,“女”},而成绩的取值范围通常会是{0,1,2,…,100}。
(3)实体型(Entity Type)
一类实体的实体名及其属性名集合就构成了实体型。在一个数据库中,同一类实体的实体型是相同的,即它们的实体名及实体的属性名都是一样的。为了方便起见,我们认为这些属性的排列顺序也是一致的。
例如,学生(学号,姓名,性别,年龄)就是表示学生实体的实体型。
(4)关系模式(Relation Schema)
对关系的描述称为关系模式,一般表示为:
关系名(属性1,属性2,……,属性n)
例如,学生(学号,姓名,年龄,性别,系别,年级)就是描述学生的关系模式。
(5)实体集(Entity Set)
具有相同实体型的实体组成的集合称为实体集。
例如,在一个学籍管理系统中,一个学校的全体学生具有相同的实体型,这些学生实体的集合就是一个实体集。
3.联系
在现实世界中,事物内部和事物之间是有联系的,这些联系在信息世界中包括实体内部的联系和实体之间的联系。实体内部的联系通常指组成实体的各属性之间的联系,实体之间的联系通常指不同实体集之间的联系。
实体之间的联系可以分为以下3类。
(1)一对一联系(1:1)
如果对于实体集A中的每个实体,实体集B中至多有1个(也可以没有)实体与之相联系,反之亦然,则称实体集A与实体集B之间具有一对一的联系,记为1:1。
例如,在学校里,一个班只有一个班长,而一个班长只能是一个班的班长,所以班级和班长之间就是一对一的联系。
(2)一对多联系(1:n)
如果对于实体集A中的每个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每个实体,实体集A中至多有1个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n。
例如,班级与学生之间的联系。一个班级有若干名学生,而每个学生只在一个班中学习,则班级与学生之间就是一对多的联系。
(3)多对多联系(m:n)
如果对于实体集A中的每个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多的联系,记为m:n。
例如,课程与学生之间的联系就是多对多的联系。一门课程同时有若干个学生选修,一个学生可以同时选修多门课程。
一般在E-R图中,用菱形表示联系,内部写上联系的名称,两端分别用连线连接发生联系的实体,并分别标上联系的类型。
图1-10所示为实体之间的联系的3种不同的类型。
图1-10 实体联系类型
一般来说,两个以上的实体之间也可以存在一对一、一对多和多对多的联系。
如对于课程、教师和学生这3个实体,如果一门课程可以有若干老师讲授,而每名老师可以讲授多门课程,每名学生可以学习多门课程,则老师和学生之间是n:p的联系,老师和课程之间是n:m的联系,而学生和课程之间是p:m的关系,如图1-11所示。
图1-11 多个实体之间的联系
1.2.2 数据模型
数据模型通常由数据结构、数据操作和完整性约束3部分组成。
1.数据结构
数据结构是所研究的对象类型及其相互关联的集合,它用来描述系统数据集合的结构,可分为语义结构和组织结构两类,是对系统静态特性的描述。
语义结构是指应用实体、应用语义之间的关联,它是与数据类型、内容、性质有关的对象。
组织结构是指用来表达实体及关联的数据的记录和字段结构,它是与数据之间联系有关的对象。
在数据库系统中通常按照数据结构的类型来命名数据模型。例如,层次结构、网状结构和关系结构的模型分别叫作层次模型、网状模型和关系模型。
2.数据操作
数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作及这些操作规则的集合。数据操作用来描述系统的信息变化,是对系统动态特性的描述。
数据操作的种类有以下两种。
① 引用类:不改变数据组织结构与值,如查询。
② 更新类:对数据组织结构与值进行修改,如增、删、改。
3.完整性约束
数据的完整性约束条件是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及状态的变化,以保证数据的正确性、有效性和相容性。
例如,在学校的管理信息数据库中规定学生入学成绩不能低于550分,学生毕业的学分必须达到120分等。
1.2.3 常用数据模型
1.层次模型(Tree type Model)
层次模型也称树型模型。它是以记录为结点,以记录之间的联系为边的有向树。在层次模型中,最高层只有一个记录,该记录称为根记录,根记录以下的记录称为从属记录。一般来说,根记录可以有多个从属记录,每个从属记录又可以有任意多个低一层的从属记录。由此可见,层次模型中的实体联系是一对多的对应关系。
图1-12所示为一个简单的层次模型。
图1-12 层次模型的示例
从图1-12 中可以看出,层次模型具有两个突出的问题。首先,在层次模型中具有一定的存取路径,它仅允许自顶向下的查询。按照图1-12,该模型比较适用于以下查询:查询某课程的情况、查询讲授某课程的教师的情况、查询选修某课程的学生的情况。但在查询某教师所教授的学生情况时,因为教师和学生之间没有自顶向下的路径,所以无法查询。这时需要把查询分成两个子查询,先查询某教师讲授的课程,当得到所讲授的课程时,再查询选修这些课程的学生情况。因此,在设计层次模型时,要仔细考虑存取路径的问题,因为路径一经确定就不能改变。由于路径的问题,给用户带来了不必要的麻烦,尤其是用户要花费时间和精力去解决那些由层次结构产生的问题。层次结构中引入的记录越多,层次变得越复杂,问题会变得越糟糕,从而使应用程序变得比问题要求的还要复杂,其结果是程序员在编写、调试和维护程序时花费的时间将比查询本身需要的时间还多。
另外,层次模型比较适合于表示数据记录之间一对多的联系,而表示多对多和多对一的联系,则非常不方便。
2.网状模型(Network Model)
为了克服层次模型的局限性,美国数据系统语言协会CODASYL的数据库任务小组(DBTG)在其发表的报告中首先提出了网状模型。在网状模型中用结点表示实体,用系表示两个实体之间的联系。网状模型是一种较通用的模型,从图论的观点看,它是一个不加任何条件的无向图。网状模型与层次模型的根本区别如下:
● 一个子结点可以有很多的父结点;
● 在两个结点之间可以有两个或多种联系。
显然层次模型是网状模型的特殊形式。网状模型是层次模型的一般形式。
图1-13 所示为学生选课系统数据库的网状模型的数值化后的实例。为了简化,图中只取000913、000914、000915三名学生和C1、C2、C3三门课程。从图1-13中可以看出,所有的实体记录都具有一个以其为始点和终点的循环链表,而每个系都处于两个链表中,一个是课程链,一个是学生链。从而根据学生查找课程和根据课程查找学生都非常方便。这种以两个结点和一个系构成的结构是网状模型的基本结构,一个结点可以处于几个基本结构中,这样就形成了网状结构。
图1-13 学生选课数据库的网状模型的数值化图示
网状模型在结构上比层次模型复杂,因而它在查询方式上要比层次模型优越。在网状模型中,对数据的查询可以使用两种方式:
● 从网络中任一个结点开始查询;
● 沿着网络中的路径按任一个方向查询。
从网状结构中可以看出,这是一种对称结构。对于根据学生查课程和根据课程查学生这种对称的查询,在网状模型中所使用的查询语句格式是相同的。尽管网状模型比层次模型具有对称性,也不能使其查询变得简单,因为它支持的数据结构种类较多,这就势必造成操作的复杂性。因此,网状模型的主要缺点是数据结构本身及其相应的数据操作语言都极为复杂。一般来说,结构越复杂,功能就越强,所要处理的操作也越复杂,因此相应的数据操作语言也变得更为复杂。而且由于其结构的复杂,给数据库的设计带来了很大困难。
3.关系模型(Relational Model)
在现实生活中,经常用到数据表格,如学生的成绩单、老师的工资表等。如果在DB中也能够以表格的形式来表达和管理信息,会使用户感到更方便。1970年IBM公司的E. F. Codd提出了关系模型,开创了数据库系统的新纪元。
关系模型是以关系代数为理论基础,以集合为操作对象的数据模型,其表现形式正好是在现实生活中经常用到数据表格——二维表。对一些非常复杂的表格,通常在关系模型中可以用多个二维表来表示。这些二维表通常有一定的联系,人们从不同的二维表中抽取有用的信息,构建新的表格来表达这些联系。
表1-2、表1-3和表1-4所示为关于学生成绩和教师授课的表。
表1-2 学生成绩单
表1-3 教师数据表
表1-4 学生和任课老师联系表
在关系模型中,通常把二维表称为关系。表中的每一行称为元组,相当于通常所说的记录,每一列称为属性,相当于记录中的一个数据项。一个关系若有k个属性则称为k元关系。
一个关系有如下性质:
● 没有两个元组在所有属性上的值是完全相同的;
● 行的次序无关;
● 列的次序无关。
关系模型具有以下特点。
① 描述的一致性。无论实体还是实体之间的联系都用关系来描述,这就保证了数据操作语言相应的一致性。对于每一种基本操作功能(插入、删除、查询等),都只需要一种操作运算。
② 利用公共属性连接。关系模型中各关系之间都是通过公共属性发生联系的。例如学生关系和选课关系是通过公共属性学号实现连接的,而选课关系与课程关系可以通过课程号连接。
③ 结构简单直观。采用表结构,用户容易理解,更接近于一般用户的习惯,并且在计算机中实现也比较方便。
④ 有严格的理论基础。关系的数学基础是关系代数,对关系进行的数据操作相当于关系代数中的关系运算。这样,在关系模型中的定义与操作均建立在严格的数学理论基础之上。
⑤ 语言表达简练。在进行数据库查询时,不必像前两种模型那样需要事先规定路径,而是用严密的关系运算表达式来描述查询,从而使查询语句的表达非常简单直观。
关系模型的缺点是在查询时,需要执行一系列的查表、拆表和并表操作,故执行时间较长。不过,目前的关系数据库系统大都采用查询优化技术,使得查询操作基本克服了速度慢的缺陷。