一:基本概念
1. 数据模型的定义
对现实世界数据特征的抽象
2. 分类
- 概念数据模型:按照用户的观点对数据和信息建模
- 实体-关系模型
- 基本数据模型:按照计算机的观点对数据建模
- 层次模型:使用树型结构表示数据之间的联系
- 网状模型:两个结点之间可以有多种联系
- 关系模型:使用表格表示实体集和联系
- 面向对象模型:以对象为单位,每个对象都具有属性和方法
3. 要素
- 数据结构:研究对象类型的集合,是对系统的静态描述
- 数据操作:对数据库各种对象的实例允许执行操作的集合,是对系统的动态描述
- 数据约束条件:一组完整性规则的集合,保证数据的正确有效和相容
二:概念数据模型——实体-关系模型
1. 基本概念
(1)实体(一般用矩形表示)
客观存在的对象并且可区分
属性(一般用椭圆表示)
每个实体都具有属性
属性域:
属性的取值范围
种类:
- 简单属性:只有一种属性
- 复合属性:多种属性组合(用多个椭圆表示)
- 单值属性:单一的值
- 多值属性:属性对应多个值(用双椭圆表示)
- 基属性:一个基本属性
- 派生属性:一个属性可以由其他属性得到(用虚椭圆表示)
- null属性:属性值未知
特例:
- 超码:唯一标识实体的属性或属性组
- 候选码:是一个最小超码,它的任意真子集都不是超码
- 主属性:包含在任何候选码的属性
- 非码属性:不包含在任何候选码的属性
- 主码:用户明确定义的候选码,用下划线标识
- 外码:当前实体的一个属性是另一个实体集或关系集的主键
- 全码:所有属性组是候选码
实体集
具有相同属性的实体集合,具有相同的性质
弱实体集(一般用双矩形表示)
没有主键的实体集,强烈依赖它的标识实体集
- 部分码:在弱实体集中区分实体的属性集合,用下划虚线标识
- 主码:由强实体集的主码+自身的部分码组成
(2)联系(一般用菱形表示)
多个实体之间的相互关联
属性
联系也可以具有自己的属性
联系集
具有相同属性的联系集合,表示两个或以上的实体集之间的关联
度
参加联系的实体集个数,度为2的联系集成为二元联系集
参与度
实体集参与关联的实体个数
- 弱参与:实体集可以部分实体参与到关联中
- 强参与:实体集必须全部实体参与到关联中
映射基数
通过联系集关联的实体集的实体个数(可以是同一个实体集或多个实体集之间)
- 一对一(1:1):实体集E1的一个实体可与实体集E2的一个实体相关联
- 一对多(1:n):实体集E1的一个实体可与实体集E2的多个实体相关联
- 多对一(n:1):实体集E1的多个实体可与实体集E2的一个实体相关联
- 多对多(n:m):实体集E1的多个实体可与实体集E2的多个实体相关联
标志基数约束和参与约束
第1种:使用箭头和线的个数标志
- “一”个实体:有向箭头或数字1
- “多”个实体:无向直线或数字n
- 实体部分参与到联系中:单线
- 实体必须全部参与到联系中:双线
第2种:下限…上限
- 0 . .:表示可以部分参与
- 1 . .:表示必须全部参与
- . . *:表示“多”个实体
- . . 1:表示“一”个实体
标识性联系集(一般用双菱形表示)
将弱实体集与强实体集相关联(弱实体集对标识实体集是多对一的,参与全部的)
2. E-R图
(1)设计
- 确定实体和对应的属性、主码(弱实体集、部分码)
- 若一个对象只对名称和值感兴趣,则定义为属性
- 若一个对象除了名字,还有其他属性需要描述,则定义为实体
- 若一个实体需要依赖于另一个实体才能存在,则定义为弱实体集
- 如果一个实体的属性信息过于冗余,则可以把部分属性集单独作为实体
- 确定联系和对应的属性、基数标识、参与标识(标志联系集)
- 确定对象之间的动作 ,一般直接定义为联系集
- 若联系集关联强实体集和弱实体集,则定义为标志联系集
- 如果对象间的联系是多对多的,则需要额外定义一个实体集,再分别定义联系集
- 如果有多个对象发生关联,可以转换为多个二元关系
- 确定对象之间的动作 ,一般直接定义为联系集
(2)特性
非二元关系的转换
- 创建新的实体集E, 为E创建标识属性。或者从所有实体集中分离出一个实体集E
- 把R的所有属性加给E
- 分离关系R为RA,RB,RC…
- 将E分别与A、B、C…关联——RA、RB、RC…
特化与概化
高层实体集:具有公共性质的实体集
低层实体集:实体集的一个具有特殊属性或者参与特殊联系的子集
特化:在高层实体集中确定一个具有特殊性质的实体集
- 全特化:全部低层实体集属于一个高层实体集
- 部分特化:部分特殊实体集可以不属于高层实体集
概化:将若干个共享相同特性的实体集组合为高层实体集
- 不相交:只属于一个低层实体集
- 重叠:属于多个低层实体集
- 全概化:必须属于一个低层实体集
- 部分概化:可以不属于任何低层实体集
表示:
1:圆圈法
- 圆圈
- d:不相交概化
- o:重叠概化
- 高层实体集和圆圈之间
- 单线:部分概化
- 双线:全概化
- 低层实体集(双竖边矩形)
- 低层实体集和圆圈之间
- 有∪:特化
- 无∪:没有特化
2:三角形法
使用倒三角形ISA表示,顶点连接低层实体集,底边连接高层实体集
3:箭头法:
低层实体集用空心箭头指向高层实体集
聚集
为了消除多个重叠联系的冗余,将其中一个多元联系抽象为一个复合实体,从而允许多个联系之间产生联系
三:基本数据模型——关系模型
1. 基本概念
(1)关系模型
由若干关系模式组成的集合
(2)关系模式(类)
相当于一个记录型,由关系名、关系的属性、属性域、映像、函数依赖集组成,主码用下划线标识。
表示为R(A1,A2…AN) Dom(A1)=A2
(3)关系/关系实例(变量)
一张由行和列构成的二维表,表中的每一行称为一个元组。
- 元数:关系中属性的个数
- 基数:关系中元组的个数
类型
- 基本关系:实际存储数据的逻辑表示
- 查询表:查询结果对应的表
- 视图表:虚拟存在的表,只存储定义。
完整性约束
- 实体完整性:主属性不能为空
- 参照完整性:外码的属性值要么为空,要么等于依赖关系的某个主码值
- 自定义完整性
2. E-R模型转换为关系模型
(1)实体集
- 强实体集
- 关系名→表名
- 属性名
- 主键→主键
- 普通属性→直接转换
- 复合属性→为每个组成部分单独创建属性
- 多值属性→为该属性单独创建表
- 弱实体集
- 关系名→表名
- 属性名
- 依赖的属性+部分码→主键
- 属性名→直接转换
(2)联系集
- 联系名→表名
- 主键
- 多对多→两个实体集的主键的组合
- 一对多→“多”实体集的主键
- 一对一→任意一方的主键
- 属性名转换
3. 优化(合并表)
(1)联系表的冗余之“多”
如果一对多或或一对一的联系集在“多”端是完全的,则其联系集的表是冗余的,可以删除。只需要在“多”端的表中加入联系集的属性和“一”端“的外键属性即可
(2)联系表的冗余之“弱”
对于弱实体集的标志联系集的表是冗余的,可以直接删除。
(3)特化表的冗余
- 如果不是全部特化,则为高层实体集创建表。否则没有必要为高层实体集创建表,只需要定义视图
- 时间换空间:为低层实体集创建表,包含高层实体集的主键和自己的特有属性
- 空间换时间:为低层实体集创建表,包含高层实体集的继承属性和自己的特有属性