第二章 数据模型(data model)
2.1 层次数据模型
2.1.1 基本思路:
现实世界中很多事物之间本就存在层次关系,该模型尝试用树状结构描述这种关系。
2.1.2 基本概念:
记录record:现实世界一个实体(Entity)表示为一条记录;
域field:一个记录由若干域表示(属性??)
PCR(Parent-Child Relation):表达1:N关系
2.1.3 层次数据模式
一个层次模型由多个PCRs构成
每个PCR关系表示1:N关系
每个记录只有一个父节点
2.1.4 虚记录
解决问题:现实世界中常有非层次关系的数据,很难用PCR来表示。例如:
贡献:(1)引入指针,虚记录指向真实记录,避免数据冗余;(2)保持树状结构
2.2 网状数据模型
2.2.1 基本思路:
使用set(形如链表)表示现实世界中的1:N关系。一个记录可以为一个set的主记录,也可以为其他多个set的属记录。
2.2.2基本概念:
记录record:表示现实实体
data item:一个记录由若干item表示。与域相似,但域/属性必须是原子的,item可以是向量(复合类型)。
LINK记录类型:可以表示自连接关系、M:N关系、多元关系
e.g.:
【例1】定义LINK记录为员工的“替身”
员工(雇主)与LINK记录类型系型为1:1的系s1;
LINK记录类型与员工(雇员)建立系型为1:N的系s2。
使用s1、s2可以表示员工集合中的实体与实体间的自连接。
【例2】表示M:N关系。定义LINK记录为学生-课程匹配“替身”(实际并包含如图所示信息)
使用LINK记录将M:N分解成1:N关系。
注:由于LINK并不包含如上图所示信息,在查询“学生S1选了哪些课程”时,遍历链表LS1:第一条记录L1,在链表LC1上遍历直至找到C1;第二条记录L2,在链表LC2上遍历直至找到C2。
而不能在遍历LS1找到L1时直接确定C1。
2.3 关系数据模型
2.3.1相比于层次、网状的区别:
1.使用表作为数据结构,具有更高的抽象级别,屏蔽了计算机底层实现的细节(树、链表、指针)。
2.概念简单易于理解。建立新的代数系统——关系代数,使用数学中集合论方法研究数据库模型。
3.定义非过程化的查询语言SQL。(层次:遍历树、网状:遍历链表)。
4.软连接:关系型数据库中表达实体间联系的方法。(层次、网状数据库中的连接称为硬连接)
e.g.:关系型数据库处理多对多关系时,重建一张表。实现了实体间的联系,但没有用到指针。
2.3.2 基本术语和概念:
属性attribute:一个列称为一个属性。(每一个属性必须是原子的)
域domain:每一个属性的取值范围。
关系relation:一个表。现实中的一个实体,实体间的联系,在数据库中用关系表达。
元组tuple:表中的一行(一个关系的实例是m个元组的集合)。
主键primary key:
候选键candidate key:满足:①这个关系中任意两个元组这组属性的值都不同;②这组属性的任意一个子集没有特性①。
超键super key:只满足①。
候选键可能有多个,可以人工选择一个作为主键primary key,其余的称之为候补键alternate key。
如果主键由关系中所有属性组成,则主键称之为全键all key。
外键foreign key:一张表中,有一组属性用来引用另一张表内的元组,且该组属性必须是另一张表的主键。
完整性约束:
引用完整性约束:外键指向的不能为空,(即外键必须指向一个元组)
域完整性约束:每条元组每个属性的值必须符合域的范围。
实体完整性约束:主键不允许为空。
2.3.3 关系代数
2.3.3.1 基本操作
并( ∪ \cup ∪):在关系1和关系2中的元组。
并、交、差操作需要两个关系满足 并兼容条件:两个关系模式相同。
差(
−
-
−):在关系1且不在关系2中的元组。
笛卡尔积(
×
\times
×):关系1和关系2中所有元组集合的拼接。
e.g.:假设集合A={a, b},集合B={0, 1, 2},
两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
选择Selection(
σ
\sigma
σ):从关系中选择出符合条件的元组。
投影Projection(
π
\pi
π):从关系中选择出某些列。
注:投影后可能导致出现所有属性列完全重复的行,投影自动去掉重复行
2.3.3.2 其他操作
连接Join:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
- 条件连接Condition Join/ θ \theta θ连接: R ⋈ θ = σ θ ( R × S ) R\Join_\theta=\sigma_\theta(R\times S) R⋈θ=σθ(R×S)。从两个关系中分别选择属性a、b,选取a、b满足关系 θ \theta θ(可以为 > 、 < 、 = >、<、= >、<、=等等)的元组。
- 等值连接Equi Join: R ⋈ S 1. s i d < R 1. s i d S R\Join_{S1.sid<R1.sid}S R⋈S1.sid<R1.sidS。 θ \theta θ为=的条件连接,是一种特殊的条件连接。
- 自然连接Natrual Join:两个关系中比较的分量是相同的属性组,并在结果中去掉重复的属性列。是一种特殊的等值连接。
除Division:在关系A中所有与关系B中每一条元组都有联系的关系A中的元组。且结果的每一元组由关系A中有而B中没有的属性列组成。
除法可用基本操作表示为:
π
供
应
商
(
A
)
−
π
供
应
商
(
π
供
应
商
(
A
)
×
B
−
A
)
\pi_{供应商}(A)-\pi_{供应商}(\pi_{供应商}(A)\times B-A)
π供应商(A)−π供应商(π供应商(A)×B−A)
外连接Outer Joins:将自然连接中不匹配的元组保留下来。
- 左外连接: S 1 ∗ ⋈ R 1 S1^*\Join R1 S1∗⋈R1。连接运算符左边的元组全部保留,找不到匹配的依然保留,在右边补空值。
- 右外连接: S 1 ⋈ ∗ R 1 S1\Join^*R1 S1⋈∗R1。右边元组全部保留,左侧不匹配的补空值。
- 全外连接:
S
1
∗
⋈
∗
R
1
S1^*\Join^*R1
S1∗⋈∗R1。能连接的全部连接,左右找不到的元组依然保留,不匹配的地方补空值。
外并Outer Union:不满足并兼容条件的关系强行并。结果的模式与
×
\times
×相同,两种关系中缺失的属性都补零。
2.3.4 关系演算
关系演算以谓词逻辑为基础,是一种非过程化表达。
元组关系演算
域关系演算
2.1-2.3 传统数据模型的评价
优点:适用于OLTP应用,擅长表达以记录为主的结构型数据。
缺点:无法自然地表达实体之间的联系;缺乏语义信息;数据类型少,难以满足应用需求。
2.4 ER数据模型
2.4.1 基本概念
实体Entity:现实世界中可区分的事物都表达为实体。在DB中用一组属性来描述。
联系Relation:两个或多个实体间的关系。联系也可以有属性。
实体集:相似实体的集合。一个实体集中所有实体具有相同的属性集。
每个实体集都有一个key
每个属性都有一个域
允许存在组合或多值属性
联系集:相似关系的集合。
一个n元关系集R关联n个实体;R中每个关系都与n个实体有关
同一实体集可以参与不同的关系集,或同一关系集不同角色
2.4.2 扩展的ER模型
弱实体Weaky entity:不能单独存在。
e.g.:职工 & 职工家属。职工家属是弱实体,不能单独存在。
特殊化与普遍化:类似于面向对象中的继承。
e.g.:学生 & 研究生
聚集Aggregation:允许联系(将联系视为实体)与别的实体再建立联系。
e.g.:医院-医生 & 患者。
医院与医生关联作为一个实体,该实体与患者关联。现实世界中,患者求医永远不会只访问医院或只访问医生,而是同时访问两者。
范畴Category:一个实体集可以包含不同类型的实体。
e.g.:银行账户:包含企业账户、个人账户
2.5 面向对象数据模型
突破了一范式的限制。
2.6 其他数据模型
基于逻辑的数据模型:目的:①扩展DBMS查询能力(e.g.递归查询);②:提升DBMS推理能力(得到在数据库中不直接存储的信息)。e.g.演绎数据库
时态数据模型:在一般模型基础上扩展描述时态信息的机制。
空间数据模型:
XML数据模型:
2.7 总结
1.每个DBMS系统必须实现某中数据模型。/数据模型是DBMS的核心。
2.数据模型是一种在数据库中模拟现实世界的方法。
参考: