1.1数据模型
数据库技术是沿着数据模型的主线推进的。数据模型data motel,是对现实世界数据特征的抽象,用来描述数据、组织数据、操作数据,是数据库系统的核心和基础。
1.1.1两类数据模型
数据模型有三方面要求:
(1)能比较真实地模拟现实世界。
(2)容易为人所理解。
(3)便于在计算机上实现。
不同的数据模型:
(1)概念模型:也称信息模型,根据用户的观点对数据和信息建模,主要用于数据库设计。
(2)逻辑模型和物理模型:逻辑模型主要包括层次模型、网状模型、关系模型、面向对象数据模型和对象关系数据模型、半结构化数据模型等,按照计算机系统的观点对数据进行建模,主要用于数据库管理系统的实现。物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方法和存取方法,是面向计算机系统的。
两步抽象:首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。
1.1.2概念模型
概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象。
实体entity:客观存在并可相互区别的事物称为实体。
属性attribute:实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
码key:唯一标识实体的属性集称为码。
实体型entity type:具有相同属性的实体必然具有共同的特性和性质。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
联系relationship:实体内部的联系通常是指组成实体的各属性之间的联系,实体之间的联系通常是指不同实体集之间的联系。实体之间的联系有一对一、一对多和多对多等多种类型。
概念模型的表示方法很多,最为常用是实体-联系方法,该方法用E-R图来描述现实世界的概念模型,E-R方法也称E-R模型。
1.1.3数据模型的组成要素
数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成。
数据结构描述数据库的组成对象以及对象之间的联系,是对 系统静态特性的描述。
数据操作是指对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则,是对系统动态特性的描述。
数据的完整性约束条件是一组完整性规则。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定复合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。
1.1.4常用的数据模型
常用的数据模型有层次模型,网状模型,关系模型,面向对象数据模型,对象关系数据模型,半结构化数据模型。
层次模型和网状模型统称为格式化模型,格式化模型中数据结构的单位是基本层次联系。所谓基本层次联系是指两个记录以及它们之间的一对多(包括一对一)的联系。
1.1.5层次模型
满足下面两个条件的基本层次联系的集合称为层次模型:
(1)有且只有一个结点,没有双亲结点,这个结点称为根节点。
(2)根以外的其他结点有且只有一个双亲结点。
层次模型中,每个结点表示一个记录类型,每个记录类型可包含若干字段,这里记录类型描述的是实体,字段描述的是实体的属性。记录类型之间的联系用结点之间的连线(有向边)表示。
层次模型将一颗倒立的树,结点的双亲是唯一的。
层次模型进行删除操作时,删除双亲结点值,相应的子女节点值也会被删除。
层次模型的优点:数据结构比较简单清晰,查询效率高,提供了良好的完整性支持。
层次模型的缺点:现实世界很多联系是非层次的,就不可以抽象使用层次模型了,或者处理会很麻烦。查询子女结点必须通过双亲结点。层次命令趋于程序化。
1.1.6网状模型
满足下面两个条件的基本层次联系集合称为网状模型:
(1)允许一个以上的结点无双亲。
(2)一个结点可以有多于一个的双亲。
网状模型子女结点与双亲结点的联系可以不唯一,允许结点有多个双亲结点,更直接地去描述现实世界。
网状模型的优点:子女结点与双亲结点的联系可以不唯一,更直接地描述现实世界。具有良好的性能,存取效率高。
网状模型的缺点:结构复杂,在应用环境庞大的时候,不利于用户掌握。网状模型的DDL、DML复杂,不容易使用。用户需了解系统结构的细节,加重了编写应用程序的负担。
1.1.7关系模型
关系relation:一个关系对应一个表。
元组tuple:表中的一行即为一个元组。
属性attribute:表中的一列即为一个属性。
码key:表中的某个属性组,可以唯一确定一个元组。
域domain:域是一组具有相同数据类型的值的集合,属性的取值来自某个域。
分量:元组中的一个属性值。
关系模式:对关系的描述。
关系模型要求关系必须是规范化的,关系的每一个分量必须是一个不可分的数据项。
关系模型中的数据操作是集合操作,操作对象和操作结果都是关系。关系模型把存取路径向用户隐蔽起来,用户只要指出“干什么”或“找什么”,不需要说明“怎么干”或“怎么找”。
关系模型的优点:建立在严格的数学概念的基础上,概念单一,数据结构简单、清晰、易使用,关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
关系模型也有缺点,例如存储路径是隐蔽的,查询效率往往不如格式化模型。