2010-09-21数据库设计理论依据:关系数据库遵循原则:设计范式SQLserver特性简介数据库设计实践理论依据:关系数据库建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据数据的逻辑结构是二维表(行-列)操作的对象是数据的集合(记录)表内关系是记录之间的关系表间关系是实体之间的关系遵循原则:设计范式设计范式是数据库设计的基础和准则一般设计满足3NF既可出于对性能和编程方面的的考虑,有时设计并不满足3NF遵循原则:设计范式第一范式1NF数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值第一范式是最起码的要求。不满足第一范式的数据库模式不能称为关系数据库如:职工号、姓名、电话号码设计成一个表,当出现一个人可能有一个办公室电话和一个家里电话号码时,此表设计满足不了1NF遵循原则:设计范式规范成1NF上例规范成满足1NF有三种方法一、重复存储职工号和姓名,关键字只能是电话号码二、职工号为关键字,电话号码分为单位电话和住宅电话两个属性(表增加一个字段)三、职工号为关键字,但强制每条记录只能有一个电话号码第一个方法不可取,第三个方法不满足需求,所以初步使用第二个方法遵循原则:设计范式第二范式2NF所有非关键字段都完全依赖于任意一组候选关键字例:设计选课关系表(学号,课程号,成绩,学分)需要设计关键字为组合关键字(学号,课程号)遵循原则:设计范式第二范式2NF设计存在的如下问题a.数据冗余,同一门课由多个学生选修,学分就重复多次b.更新异常,若调整了某课程的学分,相应的学分值都要更新c.无法单独记录学分(必须要有学生选修时,才能录入学分)遵循原则:设计范式第二范式2NF原因:非关键字属性学分部分依赖组合关键字(学号,课程号)而不是完全依赖解决方法:分成两个设计表,A表(学号,课程号,成绩),B表(课程号,学分)新关系包括两个关系模式,它们之间通过A表中的外关键字课程号相联系,需要时再进行自然联接,恢复了原来的关系遵循原则:设计范式第三范式3NF每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码前面提到的把满足2NF转化成可实际应用的设计后,就满足了3NF3NF的设计也会存在问题遵循原则:设计范式第三范式3NF例:设计学生信息表(学号,姓名,所在系,系名称,系地址),关键字学号决定各个属性。单个关键字,没有部分依赖的问题,满足2NF这种设计关系有大量的冗余,有关学生所在的几个属性系,系名称,系地址将重复存储原因:关系中存在传递依赖造成的即学号-所在系遵循原则:设计范式第三范式3NF例:设计学生信息表(学号,姓名,所在系,系名称,系地址),关键字学号决定各个属性。单个关键字,没有部分依赖的问题,满足2NF这种设计关系有大量的冗余,有关学生所在的几个属性系,系名称,系地址将重复存储原因:关系中存在传递依赖造成的即学号-所在系而所在系-学号却不存在遵循原则:设计范式第三范式3NF解决办法每个关系模式中不能留有传递依赖分为两个表学生信息表(学号,姓名,系号)系信息表(系号,系名,系地址)学生信息表中不能没有外关键字系号,否则两个关系之间失去联系数据库设计SQLserver特性存储结构访问、读取机制SQLserver特性存储结构数据库具有三种类型的文件主数据文件:是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件次要数据文件日志文件:包含着用于恢复数据库的所有日志信息。每个数据库必须至少有一个日志文件,可以有多个SQLserver特性存储结构便于分配和管理,文件分成文件组主文件组:包含主数据文件和任何没有明确分配给其他文件组的其他文件。系统表的所有页均分配在主文件组中用户定义文件组日志文件不包括在文件组内。日志空间与数据空间分开管理SQLserver特性存储结构一个文件不可以是多个文件组的成员表、索引和大型对象数据可以指定存储文件组日志文件不包括在文件组内。日志空间与数据空间分开管理SQLserver特性存储结构SQLserver特性存储结构SQLServer中数据存储的基本单位是页,每一页大小为8K为数据库中的数据文件(.mdf或.ndf)分配的磁盘空间从逻辑上划分成页(从0到n连续编号)磁盘I/O操作在页级执行。也就是说,SQLServer读取或写入所有数据页区是八个物理上连续的页的集合,用来有效地管理页,所有页都存储在区中SQLserver特性存储结构每页的开头是96字节的标头,用于存储有关页的系统信息。此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元ID在数据页上,数据行紧接着标头按顺序放置。页的末尾是行偏移表,对于页中的每一行,每个行偏移表都包含一个条目。每个条目记录对应行的第一个字节与页首的距离。行偏移表中的条目的顺序与页中行的顺序相反SQLserver特性存储结构数据页的存储结构SQLserver特性访问、读取机制SQLServer在内存中生成缓冲池,以保存从磁盘上读取的数据页据库引擎实例的I/O包括逻辑读取和物理读取每次数据库引擎从缓冲区高速缓存请求页时都会发生逻辑读取。如果页当前不在缓冲区高速缓存中,物理读取将首先将页从磁盘复制到缓存中SQLserver特性访问、读取机制数据库引擎支持称为“预读”的性能优化机制。预读首先预测执行查询执行计划所需的数据和索引页,然后在查询实际使用这些页之前将它们读入缓冲区高速缓存。这样可以让计算和I/O重叠进行,从而充分利用CPU和磁盘预读机制允许数据库引擎从一个文件中读取最多64个连续页(512KB)SQLserver特性访问、读取机制有两种类型的预读:一种用于数据页,一种用于索引页SQLServer数据库中的索引分配映射页列出了表或索引使用的区。存储引擎可以读取以生成必须读取的磁盘地址的排序列表存储引擎按键的顺序依次读取索引页数据库设计数据库设计需求分析概念设计(E-R)逻辑设计物理设计什么是数据库设计数据库设计是指对于一个给定的应用环境,构造最优的数据库逻辑模式和物理结构,使之能够有效地存储和管理数据数据库设计需求分析需求分析是设计数据库的起点需求分析是设计过程的基础,复杂、耗时需求分析的结果将直接影响到后面各个阶段的设计数据库设计概念设计通过对需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型(E-R图)是承上启下的一步数据库设计逻辑设计将概念结构转换为具体DBMS所支持的数据模型(关系数据模型)对其进行优化然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式数据库设计逻辑设计主键聚集:与数据存储在一起非聚集:存储在索引页上数据库设计逻辑设计索引聚集:与数据存储在相同的数据页上非聚集:存储在索引数据页上数据库设计逻辑设计索引索引是以B+树的形式进行存储索引在存储的过程中分散在不连续的数据页上,使用rebuild命令,把索引重新组织在连续的索引页上索引已经排好顺序,不需求再次排序数据库设计逻辑设计重复列在表设计完成,如果数据使用后,表内有字段出现大部分的重复或是空值时,需要对这类字段进行重新设计新增表,并且使用关系进行联系数据库设计物理设计为逻辑数据模型选取一个适合应用环境的物理结构(包括存储结构和存取方法)根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式数据库设计物理设计文件组文件数据存储索引存储表分区数据库设计数据库开发触发器存储过程