转自:https://blog.csdn.net/u010297957/article/details/50846279
考察数据库的结构可以有多种不同的层次或角度。(这里说的数据库不局限于关系型数据库)
1. 如果从DBMS角度来看,数据库通常采用三级模式结构,也就是说DBMS内部的系统结构是三级模式结构
2. 如果从数据库最终用户角度来看,数据库系统的结构可分为:单用户结构、主从式结构、分布式结构、客户/服务器、浏览器/应用服务器/数据库服务器多层结构等。这是数据库系统外部体系结构。
1. 数据库系统的模式(Schema)
数据模型中有“型”和“值”的概念,如:学生(学号,性别,班级)是“型”,而:张三(20160310001,1,3年2班)是“值”。
模式(Schema)是数据库中全体数据的逻辑结构和特征的描述,它仅仅描述型,而并不包括值。模式的值称为模式的一个实例(Instance),同一个模式可以有多个实例。
虽然实际的DBMS系统种类很多,他们支持的数据模式不尽相同,使用不同的语言,建立在不同的OS上,数据的存储结构也各不相同,但他们在体系结构上通常具有相同的特征,即采用三级模式结构并提供两级影像功能
2. 三级模式
数据库的三级模式结构是指:数据库系统是由外模式、模式和内模式三级构成,如图:
2.1 模式(Schema)
模式也称为:逻辑模式,它是DB中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式层是数据库模式结构的中间层,既不涉及到数据的物理存储细节和硬件环境,也与具体的应用程序、应用开发工具以及高级程序设计语言无关(C、C++、JAVA等)。
模式就是数据库数据在逻辑上的视图,且一个数据库只有一个模式。实际工作中,模式就等同于程序员创建一个具体的数据库的全部操作,如:这是一个MySQL数据库,有2张表,每个表的名字,属性的名字、类型、取值范围,主键,外键,索引,其他完整性约束等等。
DBMS提供模式描述语言(模式DDL)来严格地定义模式。
2.2 外模式
外模式也称为:子模式(subschema)/用户模式,它是数据库用户(应用程序员、最终用户)能够看到的使用的局部数据的逻辑结构和特征的描述,是数据库的数据视图,是与某一个应用有关的数据的逻辑表示。
外模式通常是模式的子集。一个数据库可以有多个外模式。同一个外模式可以为某一用户的多个应用系统所使用,但一个应用系统只能使用一个外模式。
外模式是保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。
DBMS提供子模式描述语言(子模式DDL)来严格地定义子模式。
2.3 内模式
内模式也称为:存储模式(Storage schema),一个数据库只有一个内模式。它是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。如:记录的存储方式是堆存储,还是按照某些属性值的升(降)存储,还是按照属性值聚簇(cluster)存储;索引按照什么方式组织,是B+树索引,还是hash索引等等。
DBMS提供内模式描述语言(内模式DDL/存储模式DDL)来严格定义内模式。
三级模式在关系型数据库的对应实现
三级模式是数据库系统通常采用的结构,但这并不意味着你必须按照三级模式结构设想的那样来编程。这是因为,各种类型数据库(层次、网状、关系)和各个具体数据库对三级模式的提供的支持是不完善和不一致的。
可以看到三级模式都是DDL(Data Definition language)来定义的,那么在RDBMS中三种模式的定义都包含在可以使用的DDL语句中:
外模式(DDL中的Subschema DDL部分)
在RDBMS中就只有一个视图(View)来支持
当然视图提供的也只是一定程度的数据逻辑独立性。因为对于视图的更新是有条件的,因此当应用程序有需要修改数据的语句时,仍然不得不去操作基本表。所以如果基本表改变了,那么应用程序还是要变…
模式(DDL中的Schema DDL部分)
模式就是基本表,但我觉得除了视图和索引组织方式等等之外都是模式的范围。表、字段、索引、存储过程、触发器等等
内模式(DDL中的Storage DDL部分)
内模式是存储文件,但存储文件的存储方式和结构可以被定义,这一部分能操作的情况比较少,举一个例子如MySQL中创建table并且制定使用MEMORY引擎、使用hash索引
CREATE TABLE testhash (
fname VARCHAR(50) NOT NULL,
lname VARCHAR(50) NOT NULL,
KEY USING HASH(fname)
) ENGINE=MEMORY;
3. 二级映像功能和数据的独立性
数据库的3级模式是对数据的3个抽象级别。它使得用户能够逻辑地抽象地处理数据,而不必再去关心数据在计算机中的具体表示方式与存储方式。实际上,为了能够实现在这3个抽象层次之间的联系和转换,DBMS在这三级模式之间设计了两层映像:
外模式/模式映像
模式/内模式映像
这两层映像保证了数据库中的数据能够具有较高的逻辑独立性和物理独立性。
3.1 外模式/模式映像
由上可知:一个DB只有一个模式,但可以有多个外模式。
所以,对于每一个外模式,数据库系统都有一个外模式/模式映像,它定义了这个外模式与模式的对应关系。外模式的描述中通常包含了这些映像的定义。
当模式改变时(增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式映像作相应的改变,可以使得外模式保持不变。而又由于应用程序应该是依据外模式编写的,从而应用程序不必修改,这就保证了数据与程序的逻辑独立性。
总结:外模式/模式映像保证了当模式改变时,外模式不用变 — 逻辑独立性。
3.2 模式/内模式映像
由上可知:一个DB只有一个模式,也只有一个内模式,所有模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。
当数据库的存储结构改变时(例如选用了另一个存储结构),由数据库管理员对模式/内模式映像作出相应的改变,可以使得模式保持不变,从而应用程序也不必改变。这就保证了数据和程序的物理独立性。
总结:模式/内模式映像保证了当内模式改变时,模式不用变 — 物理独立性。
TIPS
两级映像只是在系统设计层面上,在每一个模式上保证了它底层模式(地基)的稳定性。就如描述的那样:模式变了外模式不用变,内模式变了模式不用变。
但是,一定要记住两级映像仅仅是也只能是在系统理论设计层面上的保证,如果你应用需求本身发生变化了那可能什么都需要改变。