数据库的体系结构
DBMS系统种类很多,他们支持的数据模式不尽相同,使用不同的语言,建立在不同的OS上,数据的存储结构也各不相同,但他们在体系结构上通常具有相同的特征,即采用三级模式结构并提供两层映射功能。
数据库模式
为了保障数据与程序之间的独立性,使用户能以简单的逻辑结构操作数据而无须考虑数据的物理结构,简化应用程序的编制和程序员的负担,增强系统的可靠性。所以通常DBMS将数据库的体系结构分为三级模式。
数据库三级模式
数据库三级模式分别是外模式,概念模式,内模式。
外模式
外模式也称用户模式或子模式,是用户与数据库系统的接口。也就是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
外模式通常是概念模式的子集。一个数据库可以用很多外模式。同一个外模式可以给某个用户的多个应用系统所使用,但一个应用系统只能使用一个外模式。
外模式是保证数据库安全性的一个有力措施。每个用户只能看到和访问所对应的外模式中的数据,数据库中的其余数据是不可见的,这样可以屏蔽大量无关信息且有利于数据的保护。
在一般的DBMS中都提供有相关的外模式描述语言(外模式DDL)。
++理解下面的文字++:
外模式是以视图的形式展现给用户,这里的视图不是UI,而是数据库中的视图,又叫虚表,是相对于基本表而言。基本表就是我们平常在数据库中创建的那些表,而视图是对这些基本表中的数据的某种展现形式,是这些数据的一个子集,但不限于某张表的数据的子集,也可以是多张表联合起来进行显示的一组数据。比如学校的教务系统,每个学生只能看到自己的成绩,而教师可以看到学生们的成绩,辅导员可以看到系里所有学生的成绩等等。那么可以基于所有学生的成绩数据,针对不同权限的用户选取不同的子集,这个子集就是所谓的视图。注意:视图本身并不是实际存放数据,而是对于如何选取数据的一种描述,也就是虚。并且当全局数据改变时,视图中的数据也会随着改变。
通过外模式,可以让不同用户看到他们可以看到的。
概念模式
概念模式也称为模式或者逻辑模式。是数据库中全体数据的逻辑结构和特性的描述,是所有用户的公共数据视图。看上图,它是在外模式和内模式之间,即不涉及数据的物理存储细节和硬件环境,也与具体的应用程序,开发工具以及高级程序设计语言无关。
一个数据库只有一个模式。 实际工作中,模式就等同于程序员创建一个具体的数据库的全部操作。比如这是一个MySQL数据库,有n张表,每张表的名称,表中的字段,字段类型,主键等等。
DBMS提供模式描述语言(模式DDL)来严格地定义模式。
内模式
内模式也称存储模式。一个数据库只有一个内模式。
它是数据库物理结构和存储方式的描述,是数据在数据库内部的表达方式。比如:记录的存储方式是堆存储,还是按照某些属性值的升(降)存储;索引按照什么方式组织,是B+树索引,还是Hash索引等。
DBMS提供内模式描述语言(内模式DDL/存储模式DDL)来严格定义内模式。
三级模式在关系型数据库的对应关系
1.三级模式是数据库系统通常采用的结构,但这并不意味着你必须按照三级模式结构设想的那样来编程。这是因为,各种类型数据库(层次、网状、关系)和各个具体数据库对三级模式的提供的支持是不完善和不一致的。
2.三级模式都是以DDL(Data Definition Language)定义的,那么在RDBMS(关系型)中三种模式的定义都包含在可以使用的DDL语句中:
- 外模式(DDL中的Subschema DLL部分),在RDBMS中就只有一个视图支持。视图提供的也只是一定程度的数据逻辑独立性。因为对于视图的更新是有条件的,因此当应用程序有需要修改数据的语句时,仍然不得不去操作基本表。所以如果基本表改变了,那么应用程序还是要变的。
- 模式(DDL中的Schema DDL部分),模式就是基本表。除了视图和索引组织方式等等之外都是模式的范围,比如表、字段、索引、存储过程、触发器等等。
- 内模式(DDL中的Storage DDL部分),内模式是存储文件。但存储文件的存储方式和结构可以被定义,这一部分能操作的情况比较少,举一个例子如MySQL中创建table并且制定使用MEMORY引擎、使用hash索引
两层映射
为了能够实现在这3个抽象层次之间的联系和转换,数据库管理系统在三级模式中提供了两层映射,分别为 外模式/模式映射 和 模式/内模式映射。
1.外模式/模式映射
对于同一个模式可以有任意多个外模式。对于每一个外模式,数据库系统都有一个外模式/模式映射。当模式被改变时,数据库管理员对各个外模式/模式映射做相应的改变,可以使外模式保持不变。这样,依据数据外模式编写的应用程序就不用修改,保证了数据与程序的逻辑独立性。
总结:外模式/模式映射保证了当模式改变时,外模式不用变,即逻辑独立性。
2.模式/内模式映射
数据库中只有一个模式和一个内模式,所以模式/内模式的映射是唯一的,它定义了数据库的全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构被改变时,数据库管理员对模式/内模式映射做相应的改变,可以使模式保持不变,应用程序相应地也不做变动。这样,保证了数据与程序的物理独立性。
总结:模式/内模式映射保证了当内模式改变时,模式不用变,即物理独立性。
两层映射只是在系统设计层面上,在每一个模式上保证了它底层模式(地基)的稳定性。两层映射仅仅是也只能是在系统理论设计层面上的保证,如果你应用需求本身发生变化了那可能什么都需要改变。
参考: