数据库(DataBase 简称 DB):是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合
数据库管理系统(DataBase Management System 简称 DBMS):是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。比如我们所熟知的 Mysql、SqlServer等就是 DBMS
数据库系统(DataBase System):是由数据库(DB)及其管理软件组成的系统
码:唯一标识实体的属性集称为码,比如实体-学生的属性学号
实体型:简而言之对实体更为详细的描述,包括实体的具体属性描述。如 学生(学号,姓名,性别,班级)是实体型,汽车(品牌、价格、产地)也是实体型等等
实体集就是同一类型实体的集合。(中国人、美国人、英国人)就是一个实体集。注意:我们不能把{中国人、美国人、英国人、鱼}归为一个集合,因为 鱼 和 人不是一个类型
域:一组具有相同数据类型的值的集合。是属性的取值范围。比如性别属性的域就是{男、女},男 和 女 就是一组相同数据类型,它们构成了性别的 域
数据库系统的三级模式结构
作者:mayiwoaini
转载:https://www.jianshu.com/p/d1f09d3aac35
数据库的三级模式结构是指:数据库系统是由外模式、模式和内模式三级构成
模式也称为:逻辑模式,它是DB中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式层是数据库模式结构的中间层,既不涉及到数据的物理存储细节和硬件环境,也与具体的应用程序、应用开发工具以及高级程序设计语言无关(C、C++、JAVA等)。
模式就是数据库数据在逻辑上的视图,且一个数据库只有一个模式。实际工作中,模式就等同于程序员创建一个具体的数据库的全部操作,如:这是一个MySQL数据库,有2张表,每个表的名字,属性的名字、类型、取值范围,主键,外键,索引,其他完整性约束等等。
DBMS提供模式描述语言(模式DDL)来严格地定义模式。
外模式也称为:子模式(subschema)/用户模式,它是数据库用户(应用程序员、最终用户)能够看到的使用的局部数据的逻辑结构和特征的描述,是数据库的数据视图,是与某一个应用有关的数据的逻辑表示。
外模式通常是模式的子集。一个数据库可以有多个外模式。同一个外模式可以为某一用户的多个应用系统所使用,但一个应用系统只能使用一个外模式。
外模式是保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。
DBMS提供子模式描述语言(子模式DDL)来严格地定义子模式。
内模式也称为:存储模式(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个抽象层次之间的联系和转换,DBMS在这三级模式之间设计了两层映像:
外模式/模式映像
模式/内模式映像
这两层映像保证了数据库中的数据能够具有较高的逻辑独立性和物理独立性。
由上可知:一个DB只有一个模式,但可以有多个外模式。
所以,对于每一个外模式,数据库系统都有一个外模式/模式映像,它定义了这个外模式与模式的对应关系。外模式的描述中通常包含了这些映像的定义。
当模式改变时(增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式映像作相应的改变,可以使得外模式保持不变。而又由于应用程序应该是依据外模式编写的,从而应用程序不必修改,这就保证了数据与程序的逻辑独立性。
总结:外模式/模式映像保证了当模式改变时,外模式不用变 — 逻辑独立性。
由上可知:一个DB只有一个模式,也只有一个内模式,所有模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。
当数据库的存储结构改变时(例如选用了另一个存储结构),由数据库管理员对模式/内模式映像作出相应的改变,可以使得模式保持不变,从而应用程序也不必改变。这就保证了数据和程序的物理独立性。
两级映像只是在系统设计层面上,在每一个模式上保证了它底层模式(地基)的稳定性。就如描述的那样:模式变了外模式不用变,内模式变了模式不用变。
但是,一定要记住两级映像仅仅是也只能是在系统理论设计层面上的保证,如果你应用需求本身发生变化了那可能什么都需要改变。