一、引言
如何基于具体的DBMS产品,为数据库逻辑结构设计的结果,即关系数据库模式,制定适合应用要求的物理结构
1、在设计数据库物理结构前,数据库设计人员首先
- 要充分了解所用的DBMS产品的功能、性能和特点,包括提供的物理环境、存储结构、存取方法和可利用的工具
- 同时要了解应用需求,对数据库的操作方式和处理频率、时间响应方面的要求
- 了解数据库存储设备的特性,如磁盘存储区的划分原则,磁盘块的大小以及I/O特性等
2、数据库的物理结构包括数据库的存储结构和存取方法
- 数据库存储结构设计
在磁盘上,数据以文件的形式组织,文件又是由记录组成,用一个记录表示一个数据对象,比如一个元组在磁盘块中的连续字节存放
数据库存储结构的设计,就是要解决数据文件中记录的存储问题,使得应用所要访问的记录尽量存储在同一磁盘块上,数据操作所需的磁盘I/O操作最少
- 数据库存取方法设计
数据库存取方法的设计,就是要解决如何尽快找到所需记录,找到记录所在磁盘块的磁盘I/O操作次数最少
3、数据库的存储管理,主要由DBMS来完成,数据库管理人员所要做的,主要是如何利用好DBMS提供的功能
4、在物理结构设计阶段,数据库设计人员用SQL语言描述关系数据库的三级模式结构,通过定义数据库及数据库中的表以及表上的索引等,来确定数据库的文件组织结构、文件存储结构和文件存取方法,并在创建数据库时制定数据库的存储策略
二、定义数据库的模式结构
数据库的三级模式结构定义,需要确定逻辑结构设计阶段得到的关系数据库模式在DBMS中存储的逻辑结构
- 包括数据库名称、库文件名称
- 库中表的名称、表中各属性的名称及其数据类型
- 确定用户视图名称及其属性名称
- 以及索引名称等
(1)名称的定义要符合标识符的命名规则,为便于对数据库进行操作和维护,一般用英文单词来代替表名和属性名
(2)数据类型一般从DBMS中提供的数据类型中选择
(3)对字符类型,还要确定是CHAR类型还是VARCHAR类型以及字符的最大长度
二、定义概念模式
对学校信息管理系统案例的逻辑设计所得的关系数据库模式
1、首先用SQL的表定义语句来定义各基本关系表,即数据库的概念模式
(1)定义的学生表student,若表中所有字符串类型都是CHAR类型,则存储的学生记录为定长记录。若考虑到少数民族的姓名的存储,将姓名属性SNAME的类型改为VARCHAR类型,则存储的学生记录为变长记录,数据文件中不同记录的长度大小不同,这就是文件组织结构问题
数据库设计人员应根据需求分析的结果,确定关系表采用定长记录存储,还是变长记录存储
同理其他关系表,如课程表lesson、班级表class、教师表teacher等
(2)在定义基本关系表时,还要定义表中的完整性约束,包括外键及其参照表
(3)有时还需定义外键的更新策略,而不采用DBMS的默认策略。比如,定义一个学生的子实体集研究生表postgraduate时,主键为学号,同时定义学号是关系的外键,还可以定义外键的更新策略为当对学生表student的主键学号SNO进行删除或修改时,研究生表的学号SNO要做级联的删除和修改,来体现研究生实体与学生实体之间的ISA联系。
(4)通过定义完整性约束以及外键的更新策略等,可以保证数据库中存储的数据的一致性和有效性。
三、定义用户外模式
用户外模式的定义主要是定义视图,以适应不同用户对数据的需求,更便于对数据的操作。
比如,为了让用户认为研究生是一个独立的关系,可单独对其进行操作,则可以定义一个视图,来体现研究生关系与学生关系间的继承性,可创建视图s_postgraduate
包含学生表student和研究生表postgraduate进行连接后的所有属性,这样,用户就可以直接在对研究生的所有信息进行查询和更新操作了。在DBMS中,数据存储在学生表和研究生表中,同时存储视图的定义
四、定义内模式
- 索引是DBMS采取的主要存取方法,DBMS可基于索引制定优化查询计划,提高数据查询的效率。
- 而且通过创建索引可确定数据文件的存储结构。所以,索引的设计属于内模式的设计内容
比如,在创建学生成绩GRADE表的同时,基于主键创建聚集索引,可生成一个顺序存储文件,文件记录在磁盘上按学号SNO和课程号LNO属性的值顺序存储在磁盘上,实现了学号SNO相同的元组,按课程号连续存储,从而可高效完成按主键进行的查询,当然也可以在经常用于查询的其他属性列上创建聚集索引。在创建表时,一般DBMS默认按主键创建聚集索引。
而如果在创建学生成绩GRADE表的同时基于主键创建非聚集索引,可生成一个堆存储文件,文件记录在磁盘上按元组插入的顺序进行存储,学号相同的元组可能分散在不同的磁盘块中,虽然不能按主键进行高效的范围查询等,但仍可以利用索引,对某一主键值的元组进行快速访问。在已创建了聚集索引的情况下,仍可在关系表上基于经常做查询的属性列创建非聚集索引。
这里提到的顺序存储文件和堆存储文件就是文件的两种存储结构。对于教学信息管理系统,根据数据查询需求和索引的创建原则,可默认基于主键创建聚集索引。同时,由于经常利用课程名来进行查询,所以还可以在课程关系上基于课程名使用CREATE INDEX语句定义非聚集索引
五、定义数据库
定义完数据库的三级模式结构,可预估各关系表的大小、索引所需的空间等来估算数据库的大小,然后就可以定义数据库,确定存储该数据库的数据文件和日志文件大小以及在DBMS中的逻辑文件名和磁盘上的物理文件名
比如我们要创建的教学信息管理系统数据库需作为一个整体对应至少两个磁盘文件,一个数据文件(.mdf)和一个日志文件(.ldf),数据文件包含数据对象例如表、索引和视图等,日志文件包含恢复数据库中事务所需的信息,还可以定义次要文件(.ndf)来存储用户数据,可为数据库的磁盘文件指定存储的磁盘目录
创建数据库时还可利用DBMS产品提供的存储管理技术,如在SQL Server上,可利用其提供的文件组技术,把特定数据存储到指定的物理文件中。
比如可定义教学信息管理系统数据库TMS,数据库包含一个PRIMARY主文件组和两个用户定义文件组TMS_FG1和TMS_FG2,主文件组和TMS_FG1文件组分别只对应一个磁盘文件TMS_FG2用户文件组对应两个文件。主文件组包含主数据文件,用户文件组包含次要数据文件。
我们可将经常做连接查询的学生表student和学生成绩GRADE表创建到TMS_FG1中,实现两个表中的数据在同一文件中的聚集存储,还可以将存储大量班级选课信息的election表创建到文件组TMS_FG2,将同一表中数据存储在两个磁盘的不同物理文件中,可实现数据的并发操作,提高数据的存取效率
为了更好地进行数据库物理结构的设计,数据库设计者有必要了解所用的DBMS的存储管理技术
六、物理结构设计策略
为了提高系统的性能,数据库的物理结构设计应该根据应用系统查询处理要求生成顺序存储文件、堆存储文件或聚集文件等
- 通过改变存储结构提高存取效率。利用DBMS提供的存储管理技术将数据的易变部分与稳定部分、经常存取部分和存取频率较低的部分分开存放。比如对于数据备份和日志文件备份,由于数据量很大且只在故障恢复时才使用,可以考虑存放在容量大、访问速度较慢的三级存储介质上
- 通过完善数据布局,减少访问磁盘的I/O操作的次数。将日志文件与与数据库对象放在不同的磁盘上,将表和索引放在不同的磁盘上,将较大的表放在两个磁盘上
- 有效利用驱动器的并发存取能力,加快存取数据的速度,改进系统的性能
七、小结
完成数据库的物理结构设计后,就可以在选定的DBMS上进行数据库的实施了
1、实施前,数据库设计人员可能还需要对DBMS提供的一些影响存取时间和存储空间分配的系统配置变量、存储分配参数等根据应用环境进行优化配置
2、然后再建立数据库的三级模式,即先创建数据库、库中的基本表,再基于库中的表,创建视图和索引等
八、总结
在装入数据后,就可为应用系统提供数据支持,应用系统通过DBMS来实现对磁盘中数据库中的数据进行查询和更新。
至此,完成了满足数据库应用系统需求的底层数据库的设计与实现
通过数据库原理到应用的学习,我们应该要具备基于数据库技术的数据抽象与建模能力,有能力对获取的数据进行正确地组织、存储和管理