(一)基本概念
模型是对现实世界特征的模拟和抽象,数据模型是对现实世界数据特征的抽象。
常用的数据模型为:
- 概念数据模型
也称为信息模型,是按用户的观点对数据和信息建模;是现实世界到信息世界的第一层抽象,强调其语义表达功能,易于用户理解;是用户和数据库设计人员交流的语言,主要用于数据库设计。 - 基本数据模型
是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于DBMS
的实现。基本的数据模型有层次模型、网状模型、关系模型和面向对象模型。
(二)数据模型的三要素
数据库结构的基础是数据模型,是用来描述数据的一组概念和定义。
数据模型三要素:
- 数据结构
是所研究的对象类型的集合,是对系统静态特性的描述。 - 数据操作
是对数据库中各种对象的实例允许执行的操作的集合,包括操作及操作规则。 - 数据的约束条件
是一组完整性规则的集合。
(三)E-R模型
用E-R
图(实体-联系方法)来描述现实世界的概念模型。
在设计数据库模型时,一般是先设计一个E-R
模型,然后再把其转换成计算机能接受的数据模型。
1. 实体
在E-R
模型中,实体用矩形表示,通常矩形内写明实体名。
实体是现实世界中可以区别于其他对象的“事件”或“物体”。
2. 联系
在E-R
模型中,联系用菱形表示,通常菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标注上联系的类型(1:1、1:n或m:n
)。
(1)两个不同实体之间的联系
两个不同实体集之间存在以下三种联系类型:
- 一对一(
1:1
)
指实体集E₁
中的一个实体最多与实体集E₂
中的一个实体相联系。 - 一对多(
1:n
)
指实体集E₁
中的一个实体可与实体集E₂
中多个实体相联系。 - 多对多(
m:n
)
指实体集E₁
中的多个实体可与实体集E₂
中的多个实体相联系。
(2)两个以上不同实体集之间的联系
两个以上不同实体集之间存在1:1:1、1:1:n、1:m:n、r:m:n
的联系,如下图所示:
三个实体集之间的多对多联系和三个实体集两两之间的多对多联系的语义是不同的。例如,供应商和项目实体集之间的“合同”联系,表示供应商为哪几个工程签了合同;供应商与零件两个实体集之间的“库存”联系,表示供应商库存零件的数量;项目与零件两个实体集之间的“组成”联系,表示一个项目由哪几种零件组成。
(3)同一实体集内的二元联系
同一实体集的各实体之间也存在1:1、1:n、m:n
的联系,如下图所示:
从图中可知,职工实体集中的领导与被领导的联系是1:n
的。但是,职工实体集中的婚姻联系是1:1
的。
3. 属性
属性是实体某方面的特性。例如,职工实体集具有职工号、姓名、年龄、参加工作时间和通信地址等属性。
属性的分类:
- 简单属性和复合属性
简单属性是原子的、不可再分的。
复合属性可以细分为更小的部分。 - 单值属性和多值属性
定义的属性对于一个特定的实体都只有单独的一个值,这样的属性称为单值属性。
在某些特定情况下,一个属性可能对应一组值,这样的属性称为多值属性。 -
NULL
属性
当实体在某个属性上没有值或属性值未知时,使用NULL
值,表示无意义或不知道。 - 派生属性
派生属性可以从其他属性得来。
4. 实体-联系方法
概念模型中最常用的方法为实体-联系方法,简称E-R
方法。该方法直接从现实世界中抽象出实体和实体间的联系,然后用非常直观的E-R
图来表示数据模型。
5. 扩充的E-R模型
尽管基本的E-R
模型足以对大多数数据库特征建模,但数据库某些情况下的特殊语义仅用基本E-R
模型无法表达清楚。
扩充的E-R
模型,包括:
- 弱实体
一个实体的存在必须以另一个实体为前提,将这类实体称为弱实体。 - 特殊化
- 普遍化
(四)数据模型
常见的数据模型有:
- 层次模型
采用树型结构表示数据与数据间的联系。在层次模型中,每一个结点表示一个记录类型(实体),记录之间的联系用结点之间的连线表示,并且根结点以外的其他结点有且仅有一个双亲结点。 - 网状模型
是层次模型的一个特例。网状模型可以直接地描述现实世界,因为去掉了层次模型的两个限制,允许两个结点之间有多种联系。 - 关系模型
是目前最常用的数据模型之一。关系数据库采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集及实体集之间的联系,其最大特色是描述的一致性。 - 面向对象模型
采用面向对象的方法来设计数据库。面向对象的数据库存储对象是以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。
(五)关系模型
关系模型是目前最常用的数据模型之一。关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的联系,其最大特色是描述的一致性。
关系模型是由若干个关系模式组成的集合。一个关系模式相当于一个记录型,对应于程序设计语言中类型定义的概念。
关系是一个实例,也是一张表,对应于程序设计语言中变量的概念。给定变量的值随时间可能发生变化,类似地,当关系被更新时,关系实例的内容也随时间发生了变化。