数据模型是对现实世界数据特征的抽象,是现实世界的模拟
数据模型是用来描述数据、组织数据和对数据进行操作的
数据模型应满足三方面要求:
1 能比较真实地模拟现实世界
2 容易为人所理解
3 便于在计算机上实现
数据模型是数据库系统的核心和基础
数据建模:把现实世界中的具体事物抽象、组织为某一数据库管理系统 支持的数据模型
数据建模过程---两步抽象
现实世界中的客观对象抽象为概念模型
将现实世界抽象为信息世界
把概念模型转换为某一数据库管理系统支持的数据模型
将信息世界转换为机器世界
概念模型的用途:
1 是现实世界到机器世界的一个中间层次
2 用于信息世界的建模
3 现实世界到信息世界的第一层抽象
4 数据库设计的有力工具
5 数据库设计人员和用户之间进行交流的语言
对概念模型的基本要求:
1 较强的语义表达能力
1 简单、清晰、易于用户理解
(1)实体(entity):客观存在并可相互区别的事物称为实体 ,可以是具体的人、事、物、抽象的概念或联系。
(2)属性(attribute):实体所具有的某一特性称为属性, 一个实体可以由若干个属性来刻画。
(3)码(key):唯一标识实体的属性集称为码。
(4)实体型(entity type):用实体名及其属性名集合来抽象和刻画同类实体称为实体型。
(5)实体集(entity set):同一类型实体的集合称为实体集。
(6)联系(relationship): 现实世界中事物内部以及事物之间的联系在信息世界 中反映为实体(型)内部的联系和实体(型)之间的联系。 实体内部的联系通常是指组成实体的各属性之间的联系 。实体之间的联系通常是指不同实体集之间的联系 。实体之间的联系有一对一、一对多和多对多等多种类型。
实体-联系方法(Entity-Relationship Approach) :用E-R图来描述现实世界的概念模型 ,E-R方法或E-R模型。
1. 数据结构
2. 数据操纵
3. 完整性约束
数据结构:描述数据库的组成对象以及对象之间的联系。
描述的内容 :与对象的类型、内容、性质有关 ,与数据之间联系有关。
数据结构是对系统静态特性的描述。
数据操纵:对数据库中各种对象(型)的实例(值)允许执行的 操作的集合,包括操作及有关的操作规则。
数据库主要操作:查询 ,更新(包括插入、删除、修改)。
数据模型必须定义:
1 操作的确切含义
2 操作符号
3 操作规则(如优先级)
4实现操作的语言
数据操纵是对系统动态特性的描述
完整性约束:一组完整性规则 。
完整性规则:给定的数据模型中数据及其联系所具有的制约和依存规则 ,限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、 有效和相容。
数据模型对完整性约束条件的定义 :反映和规定必须遵守的基本的和通用的完整性约束 ,例如,在关系模型中,任何关系必须满足实体完整性和参照完整性,数据模型都是逻辑上的。
物理模型:数据模型以一定的组织方式存储在数据库管理系统中, 是数据模型在数据库管理系统内部的物理存储结构 ,描述数据在数据库管理系统内部的数据组织和存取方法的实现,包括存储结构和索引结构的物理实现。
层次模型:实体用记录表示 ,实体的属性对应记录的数据项(或字段) ,实体之间的联系转换成记录之间的两两联系 ,数据结构的单位是基本层次联系 ,是指两个记录以及它们之间的一对多(包括一对一)的联系。
层次模型是数据库系统中最早出现的数据模型。
层次数据库系统的典型代表是IBM公司的IMS(Information Management System。
层次模型用树形结构来表示各类实体以及实体间的联系。
满足下面两个条件的基本层次联系的集合为层次模型:
1. 有且只有一个结点没有双亲结点,这个结点称为根结点。
2. 根以外的其它结点有且只有一个双亲结点 。
层次模型中的几个术语 :根结点,双亲结点,兄弟结点,叶结点。
层次模型的特点: n
1 结点的双亲是唯一的 。
2 只能直接处理一对多的实体联系 。
3 每个结点表示一个记录类型,记录类型之间的联系用结点之间的连线(有向边)表示 。
4 各个记录类型、同一记录类型中各个字段不能同名 。
5 每个记录类型可以定义一个排序字段,也称为码字段 。
6 任何记录值只有按其路径查看,没有一个子女记录值能够脱离双亲记录值而独立存在。
层次模型的数据操纵: 查询,插入,删除,更新。
层次模型的完整性约束:
1 无相应的双亲结点值就不能插入子女结点值。
2 如果删除双亲结点值,则相应的子女结点值也被同时删除。
3 更新操作时,应更新所有相应记录,以保证数据的一致性。
层次模型优点
层次模型的数据结构比较简单清晰。
查询效率高 ,层次模型中记录之间的联系用有向边表示,就是记录之间的存取路径。
层次数据模型提供了良好的完整性约束支持。
层次模型缺点
很多联系是非层次性,不适合用层次模型表示。
一个结点具有多个双亲结点,只能通过冗余数据(易产生不 一致性)或创建非自然的数据结构(虚拟结点)来解决。
对插入和删除操作的限制多,应用程序的编写比较复杂。
查询子女结点必须通过双亲结点。
层次命令趋于程序化。