在数据库系统中针对不同的使用对象和应用目的,采用不同的数据模型。根据模型的应用的不同目的,可以将这些模型划分为两类:
说白了,就是你想咋 “动” 这些数据
下面我们会分别,就概念数据模型和基本数据类型两者进行较为详细的介绍
概念模型是从现实世界中抽取出对于一个目标应用系统来说最有用的事物、事物特征以及事物之间的联系,通过各种概念精确地加以描述
简单的说就是:概念模型,就是按照用户的观点来对信息进行建模
客观存在并可相互区别的客观事物或抽象事件称为实体
属性是指实体所具有的某一方面的特性
属性值:属性所取的具体值称作属性值
一个属性可能取的所有属性值的范围称为该属性的域
由此可见,每个属性都是个变量,属性值就是变量所取的值,而域则是变量的变化范围
因此,属性是表征实体的最基本的信息
惟一标识实体的属性集称为码
具有相同属性的实体必然具有共同的特性和性质,用实体名及其属性名集合来抽象和刻画同类实体,称为实体型
同一类型实体的集合。例如,某一学校中的学生具有相同的属性,他们就构成了实体集 “学生”
现实世界中事物彼此的联系在概念模型中反映为实体间的联系
如上图,常见的联系有这么几种
定义就不给了,很繁琐枯燥,举几个例子很容易理解:
学校里,实体集班级与实体集班长之间的就具有1:1联系
例如,实体集班级与实体集学生就是一对多联系
实体集课程与实体集学生之间的联系是多对多联系(m:n)
实体型之间的这种一对一、一对多、多对多联系不仅存在于两个实体型之间,也存在于两个以上的实体型之间。
目前常用的数据模型有三种:
其中层次模型和网状模型统称为非关系模型
层次模型(Hierarchical Model) 网状模型(Network Model) 关系模型(Relational Model) 半结构化数据模型(Semistructured-data Model) 面向对象模型(Object Oriented Model) 对象关系模型(Object Relational Model)
用树型结构来表示实体之间联系的模型称为层次模型
构成层次模型的树是由结点和连线组成的,结点表示实体集(文件或记录型),连线表示相连两个实体之间的联系
这种联系只能是一对一,一对多的!!!
通常把表示“一”的实体放在上方,称为父结点,而把表示“多”的实体放在下方,称为子结点
根据树结构的特点,建立数据的层次模型需要满足下列两个条件:
就如上图就是一个层次模型的例子
层次模型的一个基本的特点是,任何一个给定的记录值只有按其路径查看时,才能现出它的全部意义,无一个子女记录值能够脱离双亲记录值而独立存在
层次模型最明显的特点是层次清楚、构造简单以及易于实现,它可以很方便地表示出一对一和一对多这两种实体之间的联系。
网状模型和层次模型在本质上是一样的,简单对比分析一下:
网状模型去掉了层次模型的两个限制(下面的 ① ② 点),所以它是一种比层次模型更具普遍性的结构,
在数据库中,把满足以下条件的基本层次联系集合称为网状模型:
网状模型可以直接表示实体之间多对多的联系
关系模型是现在非常流行的一种数据模型
关系模型是用表格数据来表示实体本身及其相互之间的联系的
在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系
关系表中的每一列称为属性,相当于记录中的一个数据项,对属性的命名称为属性名
表中的一行称为一个元组,相当于记录值。
对于表示关系的二维表,其最基本的要求是,表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表,如下图
半结构数据是“无模式”的,数据是自描述(self describing)的
数据携带了关于其模式的信息,模式可以随着时间在单一数据库内任意改变,易于修改和变化
它是一种适于数据库集成(integration)的数据模型,适于描述包含在两个或多个数据库(这些数据库含有不同模式的相似数据)中的数据。
它也是一种标记服务的基础模型,适于在Web上共享信息
半结构化数据类似树或图
XML 适合存储半结构化数据,关于XML 在我之前的文章中可以看到一篇具体的介绍,这里就不做过多的介绍
面向对象数据模型(object-oriented data model,简称OO data model) 吸收了概念数据模型和知识表示模型的一些基本概念,同时又借鉴了面向对象程序设计语言和抽象数据类型的一些思想,是一种可扩充的数据模型。 面向对象数据模型的基本概念是对象和类。
面向对象数据模型,吸收了概念数据模型和知识表示模型的一些基本概念,同时又借鉴了面向对象程序设计语言和抽象数据类型的一些思想,是一种可扩充的数据模型。 面向对象数据模型的基本概念是对象和类。
现实世界的任意实体都是对象
一个对象可以包含多个属性,用来描述对象的状态、组成和特性
对象还包括若干方法,用以描述对象的行为特性,通过方法可以改变对象的状态,对对象进行各种数据库操作
对象是封装的,对象之间的通信是通过消息传递来实现的,即消息从外部传递给对象,存取和调用对象中的属性和方法,在内部执行要求的操作,操作的结果仍以消息的形式返回
共享同一属性集合和方法集合的所有对象组合在一起构成了一个对象类(简称为类),一个对象是某一类的一个实例。 例如,学生是一个类,具体的某个学生,例如张山是学生类中的一个对象 在数据库系统中有“型”和“值”的概念,而在面向对象数据模型中,“型”就是类,对象是某个类的“值”
类属性的定义域可以为基本类,如字符串、整数、布尔型,也可以为一般类,即包括属性和方法的类一个类的属性也可以定义为这个类自身
面向对象数据模型中,类的子集称为该类的子类,该类称为子类的超类。子类还可以有子类,也就是类可以有嵌套结构
系统中所有的类组成了一个有根的有向无环图,称为类层次
一个类可以从类层次的直接或间接祖先那里继承所有的属性和方法,用这个方法实现了软件的可重用性