数据库设计规范化的五个要求_第1页
数据库设计规范化的五个要求_第2页
数据库设计规范化的五个要求_第3页
数据库设计规范化的五个要求_第4页
数据库设计规范化的五个要求_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、WORD格式专业资料整理一是看看是否拥有 则可以说明这个数据库数据库设计规范化的五个要求通常情况下, 可以从两个方面来判断数据库是否设计的比较规范。 大量的窄表, 二是宽表的数量是否足够的少。 若符合这两个条件, 的规 范化水平还是比较高的。 当然这是两个泛泛而谈的指标。 为了达到数据库设计规范化的要 求,一般来说,需要符合以下五个要求。要求一:表中应该避免可为空的列。虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。数据库在处理的时候, 需要进行特殊的处理。 如此的话, 就会增加数据库处理记录的复杂 性。 当表中有比较多的空 字段时,在同等条件下,数据库处理的性能会降低许多。所以,虽然

2、在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免。 若确实需要的话, 我们可以通过一些折中的方 来处理这些空字段, 让其对数据库性能 式, 的 影响降低到最少。一是通过设置默认值的形 来避免空字段的产生。 如在一个人事管理系统中, 有时 式, 候 因为不是每个人都可以记住自己的身份证号 身份证号码字段可能允许为空。 码。 而在员工报 到的时候,可能身份证没有带在身边。所以,身份证号码字段往往不能及时提供。为此,身 份证号码字段可以允许为空,以满足这些特殊情况的需要。但是, 在数据库设计的时候,则可以做一些处理。如当用户没有输入内容的时候,则把这个字段的默认值设置为 0 或者为N

3、/A。以避免空字段的产生。二是若一张表中,允许为空的列比较 而且, 这些列 多, 接近表全部列数的三分之一。 在 大部分情况下, 都是可有可无的。 若数据库管理员遇到这种情将数据存储在两个独立的况, 笔者建议另外建立一张副 表,以保存这些列。 然后通过关键字把主表跟这张副表关联起来 表中使得主表的设计更为简单,同时也能够满足存储空值信息的需要求二:表不应该有重复的值或者列。如现在有一个进销存管理系统, 这个系统中有一张产品基本信息表中。 这个产品开发有 时候可以是一个人完成, 而有时候又需要多个人合作才能够完成。 所以, 在产品基本信息表 产品开发者这个字段中,有时候可能需要填入多个开发者的名

4、字。如进销存管理中, 还需要对客户的联系人进行管理。 有时候, 企业可能只知道客户一个 采购员的姓名。 但是在必要的情况下,企业需要对客户的采购代表、仓库人员、财务人员共 同进行管理。因为在订单上,可能需要填入采购代表的名字 ; 可是在出货单上,则需要填入 仓库管理人员的名字等等。为了解决这个问题, 有多种实现方式。但是, 若设计不合理的话在,则会导致重复的值 或者列。如我们也可以这么设计,把客户信息、联系人都放入同一张表中。 为了解决多个联 系人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等。 若还有第三联系人、第四联系人等等,则往往还需要加入更多的字段。可是这么

5、设计的话, 会产生一系列的问题。 如客户的采购员流动性比较大, 在一年内换了六个采购员。 此时,在系统中该如何管理呢 ?难道就建立六个联系人字段?这不但会导致空字段的增加,还需要频繁的更改数据库表结构。明显,这么做是不合理的。也有人说,可以直接修改采购员的名字呀。 可是这么处理的话, 会把原先采购订单上采购员的名字也改变了。 因为采购单上客户采购员信息在数据库中存储的不是采购员的名字, 而只是采购员对应的一 个编号。 在编号不改而名字改变了的情况下, 采购订单上显示的就是更改后的名字。 这不利 于时候的追踪。所以,在数据库设计的时候要尽量避免这种重复的值或者列的产生。 笔者建议, 若数据 库管

6、理员遇到这种情况, 可以改变一下策略。 如把客户联系人另外设置一张表。 然后通过客 户 ID 把供应商信息表跟客户联系人信息表连接起来。也就是说,尽量将重复的值放 置到一张独立的表中进行管理。然后通过视图或者其他手段把这些独立的表联系起来。要求三:表中记录应该有一个唯一的标识符。在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个 ID 号来唯一的标 识行记录,而不要通过名字、编号等字段来对纪录进行区分。每个表都应该有一个 ID 列, 任何两个记录都不可以共享同一个 ID 值。另外,这个 ID 值最好有数据库来进行自动管理, 而不要把这个任务给前台应用程序。否则的话,很容易产生 ID

7、值不统一的情况。另外,在数据库设计的时候,最好还能够加入行号。如在销售订单管理中, ID 号是用 户不能够维护的。但是, 行号用户就可以维护。如在销售订单的行中, 用户可以通过调整行 号的大小来对订单行进行排序。通常情况下, ID 列是以 1 为单位递进的。但是,行号就要 以 10 为单位累进。如此,正常情况下,行号就以10 、 20 、 30 依次扩展下去。若此时用户需要把行号为 30 的纪录调到第一行显示。 此时, 用户在不能够更改 ID 列的情况下, 可以更 改行号来实现。如可以把行号改为1,在排序时就可以按行号来进行排序。如此的话,原来行号为 30 的纪录现在行号变为了 1,就可以在第

8、一行中显示。这是在实际应用程序设计中 对 ID 列的一个有效补充。这个内容在教科书上是没有的。需要在实际应用程序设计 中,才会掌握到这个技巧。要求四:数据库对象要有统一的前缀名。一个比较复杂的应用系统, 其对应的数据库表往往以千计。 若让数据库管理员看到对象 名就了解这个数据库对象所起的作用, 恐怕会比较困难。 而且在数据库对象引用的时候, 数 据库管理员也会为不能迅速找到所需要的数据库对象而头疼。为此, 笔者建立,在开发数据库之前,最好能够花一定的时间,去制定一个数据库对象的前缀命名规范。 如笔者在数据库设计时,喜欢跟前台应用程序协商,确定合理的命名规范。笔者最常用的是根据前台应用程序的模块

9、来定义后台数据库对象前缀名。 如跟物料管理模块 相关的表可以用 M 为前缀 ; 而以订单管理相关的,则可以利用 C 作为前缀。具体采用什么前 缀可以以用户的爱好而定义。 但是,需要注意的是, 这个命名规范应该在数据库管理员与前 台应用程序开发者之间达成共识,并且严格按照这个命名规范来定义对象名。其次,表、视图、函数等最好也有统一的前缀。如视图可以用 V 为前缀,而函数则可 以利用 F 为前缀。 如此数据库管理员无论是在日常管理还是对象引用的时候, 都能够在最短 的时间内找到自己所需要的对象。要求五:尽量只存储单一实体类型的数据这里将的实体类型跟数据类型不是一回事, 要注意区分。 这里讲的实体类

10、型是指所需 要描述对象的本身。 笔者举一个例子, 估计大家就可以明白其中的内容了。 如现在有一个 图书馆里系统, 有图书基本信息、 作者信息两个实体对象。 若用户要把这两个实体对象信 息放在同一张表中也是可以的。如可以把表设计成图书名字、图书作者等等。可是如此设计 的话, 会给后续的维护带来不少的麻烦。如当后续有图书出版时, 则需要为每次出版的图书增加作者信息, 这无疑会增加额外 的存储空间, 也会增加记录的长度。而且若作者的情况有所改变,如住址改变了以后,则还 需 要去更改每本书的记录。 同时,若这个作者的图书从数据库中全部删除之后, 这个作者的信 息也就荡然无存了。很明显,这不符合数据库设

11、计规范化的需求。分别为图书基本遇到这种情况时, 笔者建议可以把上面这张表分解成三种独立的表,信息表、 作者基本信息表、 图书与作者对应表等等如此设计以后,以上遇到的所有问题就都引刃而解了以上五条是在数据库设计时达到规范化水平的基本要求。 除了这些另外还有很多细节 方面的要求,如数据类型、存储过程等等。而且,数据库规范往往没有技术方面的严格限制, 主要依靠数据库管理员日常工作经验的累积。数据库设计中的反规范技术探讨1. 数据库设计简述数据库设计是把现实世界的商业模型与需求转换成数据库的模型的过程, 它是建立数据 库应用系统的核心问题。 设计的关键是如何使设计的数据库能合理地存储用户的数据, 方便

12、 用户进行数据处理。数据库设计完全是人的问题,而不是数据库管理系统的问题。系统不管设计是好是坏, 照样运行。 数据库设计应当由数据库管理员和系统分析员一起和用户一道工作, 了解各个用 户的要求,共同为整个数据库做出恰当的、完整的设计。数据库及其应用的性能和调优都是建立在良好的数据库设计的基础上, 数据库的数据是 一切操作的基础, 如果数据库设计不好, 则其它一切调优方法提高数据库性能的效果都是有 限的。数据的规范化1.1. 范式概述规范化理论是研究如何将一个不好的关系模式转化为好的关系模式的理论, 规范化理论 是围绕范式而建立的。 规范化理论认为, 一个关系数据库中所有的关系, 都应满足一定的

13、规 范( 约束条件 ) 。规范化理论把关系应满足的规范要求分为几级,满足最低要求的一级叫做第 一范式 (1NF) ,在第一范式的基础上提出了第二范式 (2NF) ,在第二范式的基础上又提出了第三范式 (3NF) ,以后又提出了 BCNF 范式, 4NF , 5NF 。范式的等级越高,应满足的约束集条 件也越严格。规范的每一级别都依赖于它的前一级别,例如若一个关系模式满足2NF ,则一定满足 1NF。下面我们只介绍 1NF, 2NF,3NF 范式。1.2. 1NF1NF 是关系模型的最低要求,它的规则是:每一列必须是原子的,不能分成多个子列。每一行和列的位置只能有一个值。不能具有多值列。例:如果

14、要求一个学生一行,一个学生可选多门课,则下面的“学生”表就不满足1NF: student(s no,s name,class no)其中: s no 为学号, s name 为学生姓名, class no 为课程号。因为一 个学生可选多门课,所以列 class no 有多个值,所以空不符合 1NF 。规范化就是把它分成如下两个表: “学生”表和“选课”表,则这两个表就都满足 1NF 了。student(s no,s name)stu class(s no,class no)1.3. 2NF对于满足 2NF 的表,除满足 1NF 外,非主码的列必须依赖于所有的主码,而不是 组合主码的一部分。如果

15、满足 1NF 的表的主码只有一列,则它自动满足2NF。例:下面的“选课”表,不符合 2NF。stu class(s no,class no,class name)其中: class name 为课程名称。因为词表的主码是: (s no,class no), 非主码列 class name 依赖于组合主码的一部分 class no, 所以它不符合 2NF。对该表规范化也是把它分解成两个表: “选课”表和“课程”表,则它们就都满足2NF 了。stu class(s no,class no)class(class no,class name)1.4. 3NF3NF 的规则是除满足 2NF 外,任一非

16、主码列不能依赖于其它非主码列。 例: 面的“课程”表,不符合3NF。class(class no,class name,teacher no,teacher name)其中: teacher no 为任课教师号, teacher name 为任课教师姓名。 因为非主码 列teacher name 依赖于另一非主码列 teacher no, 所以它不符合 3NF。 其解决办法也是把它分解成两个表: “课程”表和 “教师”表,则它们就都满足 3NF 了。class(class no,class name,teacher no)teacher(teacher no,teacher name)1.5.

17、 小结当一个表是规范的, 则其非主码列依赖于主码列。 从关系模型的角度来看, 表满足 3NF 最符合标准,这样的设计容易维护。一个完全规范化的设计并不总能生成最优的 性能,因此通常是先按照 3NF 设计,如果有性能问题,再通过反规范来解决。数据库中的数据规范化的优点是减少了数据冗余, 节约了存储空间, 相应逻辑和 物理的 I/O 次数减少,同时加快了增、删、改的速度,但是对完全规范的数据库查询,通常 需要更多的连接操作, 从而影响查询的速度。 因此,有时为了提高某些查询或应用的性能 而破坏规范规则,即反规范。2. 数据的反规范2.1. 反规范的好处是否规范化的程度越高越好 ?这要根据需要来决定

18、,因为“分离”越深,产生的关 系越多,关系过多, 连接操作越频繁,而连接操作是最费时间的, 特别对以查询为主的数据 库应用来说,频繁的连接会影响查询速度。所以, 关系有时故意保留成非规范化的,或者规 范化以后又反规范了, 这样做通常是为了改进性能。 例如帐户系统中的 “帐户” 表 B TB01,它的列 busi balance( 企业帐户的总余额 ) 就违反规范,其中的值可以通过下面的查询 获得:select busi code,sum(acc balance)fromB TB06group by busi code如果 B TB01 中没有该列,若想获得 busi name(企业名称 ) 和

19、企业帐户的总余额,则需要做连接操作:select busi name,sum(acc balance)from B TB01,B TB06where B TB01.busi code=B TB06.busi codegroup by busi code如果经常做这种查询,则就有必要在B TB01 中加入列 busi balance ,相应的代价则是必须在表 B TB06 上创建增、删、改的触发器来维护B TB01 表上 busi balance列的值。类似的情况在决策支持系统中经常发生。反规范的好处是降低连接操作的需求、 降低外码和索引的数目, 还可能减少表的数目,相应带来的问题是可能出现数据

20、的完整性问题。加快查询速度,但会降低修改速度。因 此决定做反规范时, 一定要权衡利弊, 仔细分析应用的数据存取需求和实际的性能特点, 好 的索引和其它方法经常能够解决性能问题,而不必采用反规范这种方法。2.2. 常用的反规范技术在进行反规范操作之前, 要充分考虑数据的存取需求、 常用表的大小、 一些特殊 的计算 ( 例如合计 ) 、数据的物理存储位置等。常用的反规范技术有增加冗余列、增加派生列、 重新组表和分割表。它常用来在查询时避免连接操作。 例如则需要做 class 和 teacher 表的连接查询:2.2.1. 增加冗余列 增加冗余列是指在多个表中具有相同的列,前面例子中, 如果经常检索

21、一门课的任课教师姓名,select class name,teacher name from class,teacher where class.teacher no=teacher.teacher no这样的话就可以在 class 表中增加一列 teacher name 就不需要连接操作了。增加冗余列可以在查询时避免连接操作, 但它需要更多的磁盘空间, 同时增加表维 护的工作量。2.2.2. 增加派生列增加派生列指增加的列来自其它表中的数据, 由它们计算生成。 它的作用是在查询时减少连接操作,避免使用集函数。例如前面所讲的账户系统中的表 balance 就是派生列。派生列也具有与冗余列同样的

22、缺点。2.2.3. 重新组表重新组表指如果许多用户需要查看两个表连接出来的结果数据, 组成一个表来减少连接而提高性能。例如,用户经常需要同时查看课程号, 教 师 号 , 任 课 教 师 姓 名 , 则 可 把 表 class(class no,classB TB01 的列 busi 则把这两个表重新 课程名称, 任课 name,teacher no) 和 表teacher(teacher no,teacher name) 合并成一个表 class(class no,class name,teacher no,teacher name) 。这样可提高性能, 但需要更多的磁盘空间, 同时也 损失了

23、数据在概念上的独立性。2.2.4. 分割表有时对表做分割可以提高性能。表分割有两种方式:分别记录各个地区的数据或不同时期的数据,特别是有些数据常用, 而另外一些数据不常用C 需要把数据存放到多个介质上例如法规表 law 就可以分成两个表 active law 和inactive law 。 activea authors law表中的内容是正生效的法规, 是经常使用的, 而 inactive 表则使已经作废的法规, 不常被查询水平分割会给应用增加复杂度, 它通常在查询时需要多个表名,查询所有数据需要union 操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在

24、索引用于查询时,表中增加两到三倍数据量,查询1 水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。 水平 分割通常在下面的情况下使用 :A 表很大,分割后可以降低在查询时需要读的数据和索引的 页数, 同时也降低了索引的层数, 提高查询速度。 B 表中的数据本来 就有独立性, 例如表中时也就增加读一个索引层的磁盘次数2 垂直分割:把主码和一些列放到一个表, 然后把主码和另外的列放到另一个表中。 如果一个表中某些列常用, 而另外一些列不常用, 则可以采用垂直分割, 另外垂直分割可以 使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少 I/O 次数。其缺点是 需要管理冗余列,查

25、询所有数据需要 join 操作。3. 反规范技术需要维护数据的完整性无论使用何种反规范技术, 都需要一定的管理来维护数据的完整性, 常用的方法是 批处理维护、 应用逻辑和触发器。 批处理维护是指对复制列或派生列的修改积累一定的时间 后,运行一批处理作业或存储过程对复制或派生列进行修改, 这只能在对实时性要求不高的 情况下使用。 数据的完整性也可由应用逻辑来实现, 这就要求必须在同一事务中对所有涉及 的表进行增、删、改操作。 用应用逻辑来实现数据的完整性风险较大,因为同一逻辑必须在 所有的应用中使用和维护,容易遗漏,特别是在需求变化时, 不易于维护。 另一种方式就是 使用触发器,对数据的任何修改

26、立即触发对复制列或派生列的相应修改。触发器是实时的, 而且相应的处理逻辑只在一个地方出现, 易于维护。 一般来说, 是解决这类问题的最好的办 法。4. 结束语数据库的反规范设计可以提高查询性能常用的反规范技术有增加冗余列、 增加派因此在做反规范时, 一定Oracle数据库设计阶段性能优化策略生列、 重新组表和分割表。但反规范技术需要维护数据的完整性 要权衡利弊,仔细分析应用的数据存取需求和实际的性能特点。Oralce 数据库设计开通过对 Oracle 数据库系统物理结构和逻辑结构的分析,阐述 了在发阶段性能优化的一些策略和方法。Oracl e是目前使用最为广泛的大型数据库管理系统,提 高Ora

27、cl 数据库系统的运行效 eOracle 数据库应用系统性能的因率,是整个计算机信息系统高效运转的前提和保证。影响 素很多,既有软件方面的因素, 也包括数据运行的硬件环境、 网络环境、数据库管理和维 护方面的因素等。数据库系统设计开发阶段是 Oracle 应用优化的最佳阶段,也是主动优化 阶段,能达到以最小成本获得最大性能增益的目的。 通过对其逻辑存储结构和物理存储结构 设计进行优化, 使之在满足需求条件下, 时空开销性能最佳, 可以解决数据库系统运行过 程中 性能的渐进性下降或性能突降等问题,以保证系统运行的优良性能Oracle 数据库的逻辑结构和物理结构Oracle 数据库的逻辑结构是由一

28、些数据库对象组成,如数据库表空间、表、索引、段、 视图、存储过程、触发器等。数据库的逻辑存储结构 ( 表空间等 ) 决定了数据库的物理空间 是如何被使用的,数据库对象如表、索引等分布在各个表空间中。Oracle 数据库的物理结构从操作系统一级查看,是由一个个的文件组成,从物理上可 划分为:数据文件、日志文件、控制文件和参数文件。数据文件中存放了所有的数据信息 ; 日 志文件存放数据库运行期间产生的日志信息, 它被重复覆盖使用, 若不采用归档方式的话, 已被覆盖的日志信息将无法恢复; 控制文件记录了整个数据库的关键结构信息, 它若被破坏, 整个数据库将无法工作和恢复;参数文件中设置了很多 Ora

29、cle 数据库的配置参数,当数据库 启动时,会读取这些信息。逻辑结构的优化逻辑结构优化用通俗的话来说就是通过增加、减少或调整逻辑结构来提高应用的效率,面通过对基本表的设计及索引、聚簇的讨论来分析ORACLE逻辑结构的优化。1、基本表扩:数据库性能包括存储空间需求量的大小和查询响应时间的长短两个方面。 为了优化数据 库性能, 需要对数据库中的表进行规范化。 一般来说, 逻辑数据库设计满足第三范式的表结 构容易维护且基本满足实际应用的要求。 所以,实际应用中一般都按照第三范式的标准进行以尽 : 如过程从规范化, 从而保证了数据库的一致性和完整性, 设计人员往往会设计过多的表间关联, 可能地降低数据

30、冗余。但在实际应用中这种做法有时不利于系统运行性能的优化多表获取数据时引发大量的连接操作, 的 I/O 和 CPU 时间。在需要部分数据时要扫描整个表等, 这都消耗了磁盘为解决这一问题, 在设计表时应同时考虑对某些表进行反规范 化,是分割表。分割表可分为水平分割表和垂直分割表 两种 多个表,这可以提高每个表的查询速 度,方法有以下几种:: 水平分割是按照行将一个表分割为但查询、 更新时要选择不同的表, 统计时要汇总多个表, 因此应用程序会更复 垂直分割是对于一个列很多的 杂。 表, 高于其它列, 就可以将主键和这些列作为一个 表, 少列的宽度,增加了每个数据页的行数,一 次 一个表的速度。 但

31、是由于造成了多表连 接, 情况比较少的情况下使用。 接时,若某些列的访问频率远远二是保留冗余列。将主键和其它列作为另外一个表。I/O 就可以扫描更多的行,从而提高了访 问每 所以应该在同时查询或更新不同分割表中的列 的 当两个或多个表在查询中经常需要连通过减以在其中一个表上增加若干冗余的列, 以避免表之间的连接过于频繁, 一般在冗余列的数据 不经常变动的情况下使用。 三是增加派生列。 派生列是由表中的其它多个列的计算 所得, 增 加派生列可以减少统计运算,在数据汇总时可以大大缩短运算时间。因此,在数据库的设计中, 数据应当按两种类别进行组织: 的数据。 对于频繁访问但是不频繁修改的数 据, 但

32、并不频繁访问的数据, 化。内部设计应当物理规范设计的基础, 然后再根据整个应用系统的需 要, 立在实际的操作基础之上的约 束, 起,才能相互补充,发挥各自的优点。内部设计应当物理不规范化。 改频繁访问的数据和频繁修改对于频繁修有时还需将规范化的表作为逻辑数据库 物理地非规范化数 据脱离了实际两者都没有意义规范与反规范都是建 只有把两者合理地结合在2、索引和聚簇 :创建索引是提高检索效率最有效的方法之一,索引把表中的逻辑值映射到安全的RowID,能快速定位数据的物理地址,可以大大加快数据库的查询速度,一个建有合理索引 的数据库应用系统可能比一个没有建立索引的数据库应用系统效率高几十倍, 但并不是

33、索引越 多越好,在那些经常需要修改的数据列上建立索引,将导致索引 B* 树的不断重组,造成系统性 能的下降和存储空间的浪费。 对于一个大型表建立的索引, 有时并不能改善数据查询速度,反 而会影响整个数据库的性能。 这主要是和 SGA的数据管理方式有关, Oracle 在进行数据块高 速缓存管理时,索引数据比普通数据具有更高的驻留权限,在进行空间竞争时,Oracle 会先移出普通数据, 对建有索引的大型表进行数据查 索引数据可能会用完所有 询时,的数据块缓存空间, Oracle 不得不频繁地进行磁盘读写来获取数据,所以,在对一个 大型表进行分区之后,可以根据相应的分区建立分区索引。Oracle 提供了另一种方法来提高查询速度,就是聚簇 (Cluster) 。所谓聚簇,简单地 说就是把几个表放在一起, 按一定公共属性混合存放。 聚簇根据共同码值将多个表的数据 存储在同一个 Oracle 块中,这时检索一组 Oracle 块就同时得到两个表的数据,这样就可 以减少需要存储的 Oracle 块,从而提高应用程序的性能。对于逻辑结构的优化, 还应将表数据和索引数据分开表空间存储, 分别使用独立的表空 间。因为如果将表数据和索引数据放在一起,表数据的 I/O 操作和索引的 I/O 操作将产生影 响系统性能的 I/O 竞争,降低系统的响应效率。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论