数据库原理与应用——引言(二)
一、数据的抽象级别
- 数据的抽象级别:物理模式(physical schema)、逻辑(概念)模式(conceptual, logical schema)、视图(views)
- 物理模式:描述了数据在磁盘上是怎么存的,以关系型数据库为例,学生基本信息表、课程基本信息表、选课信息表,这些表在磁盘上是用堆文件存,还是用哈希文件存?或者存成一个簇集?到底用什么结构存?数据库是建立在操作系统的文件系统之上的,数据库中所有的数据最终是以操作系统的文件的形式存在磁盘上的,磁盘上的存储结构一旦确定,这就形成了物理模式。
- 逻辑(概念)模式:以关系型数据库为例,在关系型数据库中有多少张表,每张表的结构是什么,每张表中每个属性的类型长度是什么。
- 视图:最终给用户看的数据样子
物理模式——概念模式:一一对应,概念模式里有一张表,物理模式里对这张表一定有一种存储结构,在关系型数据库中,将概念模式里的这些表称为基表,基表是用某种结构真正存储在磁盘上的。
概念模式——视图:同一个概念模式给不同用户看会看到不同的数据样子,出于权限和安全控制的需要,如在概念模式中有100张表,但对某个特定用户来说,我只希望他看到其中的10张表,其他的不能看到,此时就可以为该用户做一个模式,从概念模式映射出不同的视图给不同用户来用。
有时我们看到的不一定是数据库真正的全貌,真正的全貌是数据库管理员控制的,他给我们看到的只是映射出的一个结果。
示例:高校数据管理系统
-
概念模式 :
- 学生基本信息表Student(sid:string, name: string, login:string, age:integer, gpa: real)
- 课程基本信息表Course(cid: string, cname: string, credits: integer)
- 选课基本信息表Enrolled(sid: string, cid: string, grade: integer):学生和某门课程之前是否存在选课关系,选了这门课,成绩是多少
-
物理模式:数据库中这三张基表在磁盘上怎么存放
- 以没有排序的堆文件存储
- 在学生基本信息表的学号上建一个索引
这个就描述了数据库的物理存储方式。
-
视图:数据库管理员不希望某用户看到关于选课信息表的详细信息,如教务员,做学生选课情况统计,如这学期到底多少人选《数据库原理》这门课,统计需求,不看到个体信息,做一个视图——Course_info(cid: string, enrollment: integer),在Enrolled(sid: string, cid: string, grade: integer)这张表的基础上计算出来的,这就是映射,由概念模式里的基表算出来。
物理模式——概念模式:存储方法映射
概念模式——视图:计算映射
二、数据独立性
- 应用程序与数据的具体结构和存储方法之间是相互隔离的,不受其影响。这种隔离就称为数据独立性,此独立性就是由于数据库提供三级数据模式,在三级数据模式之间存在两级映射,这两级映射可以带来应用程序相对于数据的逻辑结构和具体存储结构的两级数据独立性。
- 数据的逻辑独立性:在数据库的基础上开发的应用程序可以不受这个数据库的数据逻辑结构变化的影响,对某个用户来讲,应用程序都是基于视图编写的。如Enrolled(sid: string, cid: string, grade: integer)这张表另外增加了一个属性,或者对某个属性的类型做了修改,基于这个表算出一个视图,在这个视图的基础上,开发了很多应用程序,当这张表的结构发生一定变化的时候,由于概念模式与视图模式存在计算映射关系,只要想办法改变这张表和这个视图的映射关系,保证视图不变,还是Course_info(cid: string, enrollment: integer):课程编号与选课人数,在这之上开发的应用程序不受影响,这种独立性称为数据的逻辑独立性。
- 数据的物理独立性:当数据的物理存储结构发生变化的时候,基于这个数据库开发的应用程序不受影响。把三张表都存储为堆文件,在学生基本信息表的学号上建一个索引,一旦系统建成运行的时候,对enrolled的这张表,经常需要按照选课学生的学号sid和被选课程编号cid做查询,如果在sid和cid上没有索引的情况下,效率会非常低,为了提高效率,需要在enrolled表上增加两个索引。因为物理模式和概念模式之间存在存储方法映射关系,每张表的物理存储方式以及建索引虽然发生变化,但并不影响表的逻辑结构,这种独立性称为数据的物理独立性。
用DBMS最重要的好处之一:支持两级模式、两级映射,从而 支持数据的逻辑和物理独立性。