-
Notifications
You must be signed in to change notification settings - Fork 32
/
1、结构与模型.md
93 lines (48 loc) · 4.72 KB
/
1、结构与模型.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#### 标准结构
三级模式两层映像
* 三级模式(三级视图)
* External Schema ---- (External) View
某一用户能够看到与处理的数据的结构描述
* (Conceptual) Schema ---- Conceptual View
从全局角度理解/管理的数据的结构描述, 含相应的关联约束体现在数据之间的内在本质联系
* Internal Schema ---- Internal View
存储在介质上的数据的结构描述,含存储路径、存储方式 、索引方式等
* 两层映像
* E-C Mapping:External Schema-Conceptual Schema Mapping
将外模式映射为概念模式,从而支持实现数据概念视图向外部视图的转换,便于用户观察和使用
* C-I Mapping:Conceptual Schema-Internal Schema Mapping
将概念模式映射为内模式,从而支持实现数据概念视图向内部视图的转换,便于计算机进行存储和处理
* 举例
* 假如有 user(id,name,....),但是只想让外部看到 user.id 和 user.name ,那么 create view user_view(user.id,user.name) 。这种情况下 user_view 称为外模式,user 称为概念模式,user 的物理存储称为内模式
目的:两个独立性
* 逻辑数据独立性
当概念模式变化时,可以不改变外部模式(只需改变E-C Mapping),从而无需改变应用程序
* 物理数据独立性
当内部模式变化时,可以不改变概念模式(只需改变C-I Mapping) ,从而不改变外部模式
#### 数据模型
数据模型是对模式本身结构的抽象,模式是对数据本身结构形式的抽象
* 即模式只是一条记录,但是这条记录的结构由数据模型决定
三大经典数据模型
* 层次模型: **树**的形式组织数据
通过图来组织数据,即一条完整的数据由多个实体型组成,每个实体型有一个父指针,多个子指针,通过指针来串联起一条完整的记录。非常适合 xml 的结构。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201126235101573.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70#pic_center)
* 网状模型: **图**的形式组织数据
通过图来组织数据,即一条完整的数据由多个实体型组成,但每个实体型有多个父指针,多个子指针,通过指针来串联起一条完整的记录。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201126235118341.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70#pic_center)
* 示例:假设一条数据由 S1、C1 、A 三个实体型关联构成
* 可以看出如果要把两条数据关联到一起是通过指针来直接关联
* 数据的遍历检索也是通过指针
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201126235137401.png#pic_center)
* 关系模型: **表**的形式组织数据
通过表来组织数据,表实际上就是关系模式,代表的关系的结构,里面包含了属性和域的映射,如果不定义这个映射就有了笛卡尔积个元组,即一条记录由多个不同属性组成。对于一条完整的记录,如果需要关联,那么通过属性值判断是否可以连接。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201126235152785.png#pic_center)
重要发展:由层次模型数据库、网状模型数据库到关系数据库(因为是由文件系统发展来的,而文件系统主要是以指针来维系不同关系的连接,还有通过属性连接最差要产生笛卡尔积个连接结果,从而导致连接爆炸,所以当时不被看好)
* 层次模型与网状模型数据库
* 数据之间的关联关系由复杂的指针系统来维系,结构描述复杂
* 数据检索操作依赖于由指针系统指示的路径
* 逐一记录的操作,不能有效支持记录集合的操作
* 关系模型数据库
* 数据之间的**关联关系由Table中属性的值来表征**,如果指定的属性值相等就可以关联这两条记录,结构描述简单: Table/relation
* 数据**检索操作不依赖于路径信息或过程信息,支持非过程化的数据操作**,文件系统因为每条记录通过指针连接所以检索路径基本固定,关系数据库每条记录之间不关联,在表索引中把行记录与数据块映射,数据块的块头包含了块头、表目录和行目录,然后就可以直接查询到目标记录在数据块中位置。
* 有效**支持记录集合的操作**,文件系统因为记录的拼接已经通过指针确定了,所以不可能再有集合操作
* 较为完善的理论基础