第三章第四讲数据库逻辑结构及物理结构设计内容目录3.4逻辑结构设计一、E-R图到关系模式的转换二、逻辑模式的规范化、调整和实现三、外模式的设计3.5数据库的物理设计一、数据库的物理设计的内容和方法二、关系模式存取方法选择三、确定数据库的存储结构四、物理结构评价3.6数据库的实施和维护一、数据的载入和应用程序的调试二、数据库的试运行三、数据库的运行和维护一、E-R图到关系模式的转换1、命名和属性域的处理2、非原子属性的处理3、弱实体的处理4、联系的转换5、概括/特殊化层次的转换6、范畴的转换1、命名和属性域的处理关系模式命名规则既可采用E-R图中原来的命名,亦可另行命名;命名应有助于对数据的理解和记忆;避免重名;属性域的处理若DBMS不支持E-R图中某些属性的域,则应做相应的修改或利用应用程序进行转换。2、非原子属性的处理集合型处理方法:对集合属性纵向展开。元组型处理方法:对元组属性横向展开。集合属性的展开学号姓名系别选修课程学号姓名系别课程名学号姓名系别选修课程9501曙光CS数学物理英语学号姓名系别课程名9501曙光CS数学9501曙光CS物理9501曙光CS英语元组属性的展开职工名部门住址省市街道号邮编职工名部门省市街道号邮编3、弱实体的处理职工号姓名职工号职工-家属职工家属姓名性别年龄与职工关系E-R图职工号姓名性别年龄与职工关系图:弱实体“家属”的关系模式4、联系的转换I.1:1联系II.1:N联系III.M:N联系IV.多元联系V.自联系二元联系I1:1联系KAE1RE2HBS11解决方案与某一实体(完全参与)合并R1(K,A,H,S)R2(H,B)单独形成关系模式R1(K,A)R2(H,B)R3(K,H,S)优缺点?示例职工号姓名性别年龄职工职工号性别姓名年龄经理任期部门号部门名称地点11部门号名称地点职工号任期II1:N联系KAE1RE2HBS1N若E2完全参与,则有:R1(K,A)R2(H,B,K,S)若E2部分参与,则有:R1(K,A)R2(H,B)R3(H,K,S)解决方案示例系名地点电话号码系系名地点电话号码系籍学号学生姓名年级1N性别学号年级姓名性别系名IIIM:N联系KAE1RE2HBSMNK,H能否单独作为作为联系R的主码?解决方案R1(K,A)R2(H,B)R3(K,H,S)示例课程课程号学分教师选课学号学生姓名年级MN性别成绩思考:此E-R图的关系模式如何?IV多元联系KAE1RE2HBSMNE3JCP解决方案一般情况(当M,N,P1时)R1(K,A)R2(H,B)R3(J,C)R4(K,H,J,S)特殊情况(当M,N,P中只有其一大于1时)?示例思考?工程号工程供应关系零件公司零件号公司名供应量NMPV自联系SPOUSE(HUSBANDNO,WIFENO)职工妻子丈夫(1)1:1联系配偶职工(2)一对多联系职工领导属下EMP(ENO,ENAME,DEPT,MANAGERNO)领导(3)M:N联系零件COMPONENT(SUB,SUPER)母零件子零件构成5、概括/特殊化层次的转换CSiSm……属性集:(K,a1…an)属性集:Attr(Si)解决方案(1)∏k(Ri)∏k(R)R(K,a1,…,an)Ri(K,Attr(Si))i[1..m]不相交与全特殊化情况Ri(K,a1,…an,Attr(Si))i[1..m]解决方案(2)解决方案(3)不相交特殊化情况R(K,a1,…,an,∪Attr(Si),t)i=1mt=0,实体不属于任何子实体集。t=i0,实体属于子实体集Si。∪Attr(Si)中的各属性为NULLi=1m除Attr(Si)外,∪Attr(Si)中的其余属性为NULL。i=1m解决方案(4)重叠特殊化R(K,a1,…,an,∪Attr(Si),t1,…ti,…tm)i=1m若实体属于Si,则ti=1,否则ti=0。若ti=0,则Attr(Si)中的各属性取NULL。6、范畴的转换单位名身份证号码车主标识车主标识单位个人负责人姓名住址住址车主U牌照号码购买日期替身键解决方案R1(单位名,负责人,地址,车主标识)R2(身份证号码,住址,姓名,车主标识)R3(车主标识,购买日期,牌照号码)二、逻辑模式的规范化、调整和实现从E-R图转换而来的关系模式只是逻辑模式的雏形,尚需进行下列处理:规范化适应DBMS限制条件的修改用DBMS提供的DDL定义逻辑模式满足性能、存储空间等要求的调整1、改善数据库性能的调整减少连接运算使用逆规范化操作减小关系的大小和数据量使用水平分割和垂直分割尽可能使用快照节省每个属性所占用的空间用编码代替实际属性值,用缩写名代替全称。采用假属性减少重复数据所占存储空间AB中B取值少但所占空间大的情况。AB’B’B2、节省存储空间的调整三、外模式的设计设计外模式时,可以参照局部E-R图,因为局部E-R图本身即是用户对数据需求的反映。由于用户外模式与模式是独立的,因此在定义用户外模式时应该更注重考虑用户的习惯与方便。(1)使用更符合用户习惯的别名(2)针对不同级别的用户定义不同的外模式,满足系统对安全性的要求。(3)简化用户对系统的使用数据库的物理设计数据库最终是要存储在物理设备上的。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。物理结构依赖于给定的DBMS和和硬件系统,因此设计人员必须充分了解所用DBMS的内部特征,特别是存储结构和存取方法;充分了解应用环境,特别是应用的处理频率和响应时间要求;以及充分了解外存设备的特性。数据库的物理设计步骤:确定数据库的物理结构(存取方法和存储结构);对物理结构进行评价,评价的重点是时间和空间效率。一、确定数据库的物理结构⒈确定数据的存储结构确定数据库存储结构时要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。这三个方面常常是相互矛盾的,例如消除一切冗余数据虽然能够节约存储空间,但往往会导致检索代价的增加,因此必须进行权衡,选择一个折中方案。许多关系型DBMS都提供了聚簇功能,即为了提高某个属性(或属性组)的查询速度,把在这个或这些属性上有相同值的元组集中存放在一个物理块中,如果存放不下,可以存放到预留的空白区或链接多个物理块。聚簇功能可以大大提高按聚簇码进行查询的效率。例如假设学生关系按所在系建有索引,现在要查询信息系的所有学生名单,设信息系有120名学生,在极端情况下,这120名学生所对应的元组分布在120个不同的物理块上,由于每访问一个物理块需要执行一次I/O操作,因此该查询即使不考虑访问索引的I/O次数,也要执行120次I/O操作。如果将同一系的学生元组集中存放,则每读一个物理块可得到多个满足查询条件的元组,从而显著地减少了访问磁盘的次数。聚簇以后,聚簇码相同的元组集中在一起了,因而聚簇码值不必在每个元组中重复存储,只要在一组中存一次就行了,因此可以节省一些存储空间。聚簇功能不但适用于单个关系,也适用于多个关系。假设用户经常要按系别查询学生成绩单,这一查询涉及学生关系和课程关系的连接操作,即需要按学号连接这两个关系,为提高连接操作的效率,可以把具有相同学号值的学生元组和课程元组在物理上聚簇在一起。注意:聚簇只能提高某些特定应用的性能,而且建立与维护聚簇的开销是相当大的。对已有关系建立聚簇,将导致关系中元组移动其物理存储位置,并使此关系上原有的索引无效,必须重建。当一个元组的聚簇码改变时,该元组的存储位置也要做相应移动。因此只有在用户应用满足下列条件时才考虑建立聚簇,否则很可能会事得其反。⒉设计数据的存取路径在关系数据库中,选择存取路径主要是指确定如何建立索引。例如,应把哪些域作为次码建立次索引,建立单码索引还是组合索引,建立多少个为合适,是否建立聚集索引等。⒊确定数据的存放位置为了提高系统性能,数据应该根据应用情况将易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放。例如,数据库数据备份、日志文件备份等由于只在故障恢复时才使用,而且数据量很大,可以考虑存放在磁带上。目前许多计算机都有多个磁盘,因此进行物理设计时可以考虑将表和索引分别放在不同的磁盘上,在查询时,由于两个磁盘驱动器分别在工作,因而可以保证物理读写速度比较快。也可以将比较大的表分别放在两个磁盘上,以加快存取速度,这在多用户环境下特别有效。此外还可以将日志文件与数据库对象(表、索引等)放在不同的磁盘以改进系统的性能。⒋确定系统配置DBMS产品一般都提供了一些存储分配参数,供设计人员和DBA对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的缺省值。但是这些值不一定适合每一种应用环境,在进行物理设计时,需要重新对这些变量赋值以改善系统的性能。通常情况下,这些配置变量包括:同时使用数据库的用户数,同时打开的数据库对象数,使用的缓冲区长度、个数,时间片大小、数据库的大小,装填因子,锁的数目等等,这些参数值影响存取时间和存储空间的分配,在物理设计时就要根据应用环境确定这些参数值,以使系统性能最优。在物理设计时对系统配置变量的调整只是初步的,在系统运行时还要根据系统实际运行情况做进一步的调整,以期切实改进系统性能。二、评价物理结构评价物理数据库的方法完全依赖于所选用的DBMS,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的合理的物理结构。如果该结构不符合用户需求,则需要修改设计。数据库的实施数据库实施主要包括以下工作:用DDL定义数据库结构组织数据入库编制与调试应用程序数据库试运行一、定义数据库结构确定了数据库的逻辑结构与物理结构后,就可以用所选用的DBMS提供的数据定义语言(DDL)来严格描述数据库结构。二、数据装载数据库结构建立好后,就可以向数据库中装载数据了。组织数据入库是数据库实施阶段最主要的工作。对于数据量不是很大的小型系统,可以用人式方法完成数据的入库,其步骤为:1.筛选数据需要装入数据库中的数据通常都分散在各个部门的数据文件或原始凭证中,所以首先必须把需要入库的数据筛选出来。2.转换数据格式筛选出来的需要入库的数据,其格式往往不符合数据库要求,还需要进行转换。这种转换有时可能很复杂。3.输入数据将转换好的数据输入计算机中。4.校验数据检查输入的数据是否有误。对于中大型系统,由于数据量极大,用人工方式组织数据入库将会耗费大量人力物力,而且很难保证数据的正确性。因此应该设计一个数据输入子系统由计算机辅助数据的入库工作。三、编制与调试应用程序数据库应用程序的设计应该与数据设计并行进行。在数据库实施阶段,当数据库结构建立好后,就可以开始编制与调试数据库的应用程序,也就是说,编制与调试应用程序是与组织数据入库同步进行的。调试应用程序时由于数据入库尚未完成,可先使用模拟数据。四、数据库试运行应用程序调试完成,并且已有一小部分数据入库后,就可以开始数据库的试运行。数据库试运行也称为联合调试,其主要工作包括:功能测试:即实际运行应用程序,执行对数据库的各种操作,测试应用程序的各种功能。性能测试:即测量系统的性能指标,分析是否符合设计目标。数据库运行与维护在数据库运行阶段,对数据库经常性的维护工作主要是由DBA完成的,它包括:⒈数据库的转储和恢复定期对数据库和日志文件进行备份,以保证一旦发生故障,能利用数据库备份及日志文件备份,尽快将数据库恢复到某种一致性状态,并尽可能减少对数据库的破坏。⒉数据库的安全性、完整性控制DBA必须对数据库安全性和完整性控制负起责任。根据用户的实际需要授予不同的操作权限。另外,由于应用环境的变化,数据库的完整性约束条件也会变化,也需要DBA不断修正,以满足用户要求。⒊数据库性能的监督、分析和改进目前许多DBMS产品都提供了监测系统性能参数的工具,DBA可以利用这些工具方便地得到系统运行过程中一系列性能参数的值。DBA应该仔细分析这些数据,通过调整某些参数来进一步改进数据库性能。数据库的重组织不会改变原设