`
andyliuxs
  • 浏览: 138931 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

大型数据库设计原则

阅读更多

 

陈龙兵在个人博客“将夏♂未泯‰”上曾发表过一篇博文,他依据多年来设计和使用数据库的经验,提出了一些大型数据库设计原则,现转载于此,供大家借鉴参考。全文如下:

一个好的数据库产品不等于就有一个好的应用系统,如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。一般来讲,在一个MIS系统分析、设计、测试和试运行阶段,因为数据量较小,设计人员和测试人员往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程。笔者依据多年来设计和使用数据库的经验,提出以下一些设计准则,供同仁们参考。

命名的规范

不同的数据库产品对对象的命名有不同的要求,因此,数据库中的各种对象的命名、后台程序的代码编写应采用大小写敏感的形式,各种对象命名长度不要超过30个字符,这样便于应用系统适应不同的数据库。

游标(Cursor)的慎用

游标提供了对特定集合中逐行扫描的手段,一般使用游标逐行遍历数据,根据取出的数据不同条件进行不同的操作。尤其对多表和大表定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等特甚至死机,笔者对某市《住房公积金管理系统》进行日终帐户滚积数计息处理时,对一个10万个帐户的游标处理导致程序进入了一个无限期的等特(后经测算需48个小时才能完成)(硬件环境:Alpha/4000 128Mram,Sco Unix ,Sybase 11.0),后根据不同的条件改成用不同的UPDATE语句得以在二十分钟之内完成。示例如下:

Declare Mycursor cursor for select count_no from COUNT

Open Mycursor

Fetch Mycursor into @vcount_no

While (@@sqlstatus=0)

Begin

If @vcount_no=’’ 条件1

操作1

If @vcount_no=’’ 条件2

操作2

……

Fetch Mycursor into @vcount_no

End

……

……

改为

Update COUNT set 操作1 for 条件1

Update COUNT set 操作2 for 条件2

……

……

在有些场合,有时也非得使用游标,此时也可考虑将符合条件的数据行转入临时表中,再对临时表定义游标进行操作,可时性能得到明显提高。笔者在某地市〈电信收费系统〉数据库后台程序设计中,对一个表(3万行中符合条件的30多行数据)进行游标操作(硬件环境:PC服务器,PII266 64Mram ,NT4.0 Ms Sqlserver 6.5)。 示例如下:

Create #tmp /* 定义临时表 */

(字段1

字段2

……

)

Insert into #tmp select * from TOTAL where

条件 /* TOTAL中3万行 符合条件只有几十行 */

Declare Mycursor cursor for select * from #tmp

/*对临时表定义游标*/

……

索引(Index)的使用原则

创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略。大型数据库有两种索引即簇索引和非簇索引,一个没有簇索引的表是按堆结构存储数据,所有的数据均添加在表的尾部,而建立了簇索引的表,其数据在物理上会按照簇索引键的顺序存储,一个表只允许有一个簇索引,因此,根据B树结构,可以理解添加任何一种索引均能提高按索引列查询的速度,但会降低插入、更新、删除操作的性能,尤其是当填充因子(Fill Factor)较大时。所以对索引较多的表进行频繁的插入、更新、删除操作,建表和索引时应设置较小的填充因子,以便在各数据页中留下较多的自由空间,减少页分割及重新组织的工作。

数据的一致性和完整性

为了保证数据库的一致性和完整性,设计人员往往会设计过多的表间关联(Relation),尽可能的降低数据的冗余。表间关联是一种强制性措施,建立后,对父表(Parent Table)和子表(Child Table)的插入、更新、删除操作均要占用系统的开销,另外,最好不要用Identify 属性字段作为主键与子表关联。如果数据冗余低,数据的完整性容易得到保证,但增加了表间连接查询的操作,为了提高系统的响应时间,合理的数据冗余也是必要的。使用规则(Rule)和约束(Check)来防止系统操作人员误输入造成数据的错误是设计人员的另一种常用手段,但是,不必要的规则和约束也会占用系统的不必要开销,需要注意的是,约束对数据的有效性验证要比规则快。所有这些,设计人员在设计阶段应根据系统操作的类型、频度加以均衡考虑。

事务的陷阱

事务是在一次性完成的一组操作。虽然这些操作是单个的操作,SQL Server能够保证这组操作要么全部都完成,要么一点都不做。正是大型数据库的这一特性,使得数据的完整性得到了极大的保证。

众所周知,SQL Server为每个独立的SQL语句都提供了隐含的事务控制,使得每个DML的数据操作得以完整提交或回滚,但是SQL Server还提供了显式事务控制语句

BEGIN TRANSACTION 开始一个事务

COMMIT TRANSACTION 提交一个事务

ROLLBACK TRANSACTION 回滚一个事务

事务可以嵌套,可以通过全局变量@@trancount检索到连接的事务处理嵌套层次。需要加以特别注意并且极容易使编程人员犯错误的是,每个显示或隐含的事物开始都使得该变量加1,每个事务的提交使该变量减1,每个事务的回滚都会使得该变量置0,而只有当该变量为0时的事务提交(最后一个提交语句时),这时才把物理数据写入磁盘。

数据库性能调整

在计算机硬件配置和网络设计确定的情况下,影响到应用系统性能的因素不外乎为数据库性能和客户端程序设计。而大多数数据库设计员采用两步法进行数据库设计:首先进行逻辑设计,而后进行物理设计。数据库逻辑设计去除了所有冗余数据,提高了数据吞吐速度,保证了数据的完整性,清楚地表达数据元素之间的关系。而对于多表之间的关联查询(尤其是大数据表)时,其性能将会降低,同时也提高了客 户端程序的编程难度,因此,物理设计需折衷考虑,根据业务规则,确定对关联表的数据量大小、数据项的访问频度,对此类数据表频繁的关联查询应适当提高数据冗余设计。

数据类型的选择

数据类型的合理选择对于数据库的性能和操作具有很大的影响,有关这方面的书籍也有不少的阐述,这里主要介绍几点经验。

Identify字段不要作为表的主键与其它表关联,这将会影响到该表的数据迁移。

Text 和Image字段属指针型数据,主要用来存放二进制大型对象(BLOB)。这类数据的操作相比其它数据类型较慢,因此要避开使用。

日期型字段的优点是有众多的日期函数支持,因此,在日期的大小比较、加减操作上非常简单。但是,在按照日期作为条件的查询操作也要用函数,相比其它数据类型速度上就慢许多,因为用函数作为查询的条件时,服务器无法用先进的性能策略来优化查询而只能进行表扫描遍历每行。

例如:要从DATA_TAB1中(其中有一个名为DATE的日期字段)查询1998年的所有记录。

Select * from DATA_TAB1 where datepart(yy,DATE)=1998

分享到:
评论

相关推荐

    大型数据库设计原则大型数据库设计原则.doc

    大型数据库设计原则大型数据库设计原则

    大型数据库的设计原则与开发技巧

    本文为转摘!!!!!!!!!!

    大型数据库设计优化技巧

    ### 大型数据库设计优化技巧 #### 数据库设计与优化的重要性 在当今信息化时代,数据库作为数据管理和存储的核心,其设计与优化对于确保系统稳定性和提高数据处理效率至关重要。尤其在大型系统中,数据库设计的...

    大型数据库开发技巧与原则

    二、设计原则 1. 规范命名:统一的命名规则是数据库设计的基础,清晰的命名有助于后续的维护和查询。 2. 字段引用控制:使用设计工具进行管理,避免重复字段,如果需要新字段,需重新设计。 3. 库表重复控制:通过...

    数据库主键设计原则 设计数据库主健

    在数据库设计中,主键的设计至关重要,它不仅关系到数据的唯一性,还影响着数据检索效率以及系统的整体性能。本文将根据提供的描述和部分内文,深入探讨数据库主键设计的原则与策略。 #### 二、主键设计原则概述 ...

    详细讲解大型数据库的设计原则与开发技巧

    大型数据库设计原则与开发技巧是软件系统开发中的核心环节,因为它对系统的效率和稳定性有着直接影响。数据库设计必须遵循数据库范式理论,以避免数据冗余、确保数据的完整性和正确性。随着计算机技术的普及,系统变...

    数据库的设计和优化

    本资料集“数据库的设计和优化”包含了作者在实践中总结的存储过程编写经验、大型数据库设计原则、SQL优化技巧以及数据库开发策略,旨在帮助读者提升数据库相关技能。 一、存储过程编写和优化 存储过程是预编译的...

    大型数据库技术-关系型数据库设计完整版资料.pptx

    索引的设计是关系数据库设计的重要方面,主要包括索引的类型、索引的设计原则、索引的优缺点等。 物理设计 物理设计是关系数据库设计的最后阶段,主要包括物理存储的设计、数据存储的设计、数据库性能的优化等。 ...

    大型数据库的设计原则与开发技巧.doc

    大型数据库的设计原则与开发技巧

    大型ORACLE数据库优化设计方案

    通过遵循OFA设计原则、精细化配置SGA以及合理应用规范化与反规范化策略,可以在确保数据一致性和完整性的同时,大幅提升数据库的性能和响应能力。在实际操作中,还需结合具体的业务场景和数据特征,灵活调整优化策略...

    数据库应用与设计-大型数据库系统架构设计方法.pdf

    总结来说,大型数据库系统架构设计方法强调了系统设计的可扩展性、高可用性、负载均衡、容错和失效转移等核心原则,并从理论和实践两个层面解析了关系数据库的基础概念和应用场景。通过对这些知识点的深入了解和应用...

    湖南工业大学大型数据库复习资料.zip

    理论部分可能包括数据库体系结构、ACID属性(原子性、一致性、隔离性、持久性)、数据库设计原则、数据完整性、并发控制和故障恢复等内容。实践部分则可能涉及实际数据库系统的使用,如创建表、执行查询、管理用户...

    大型数据库

    根据不同的设计和应用需求,大型数据库主要分为以下几类: 1. 关系型数据库:如Oracle、MySQL、SQL Server等,遵循ACID(原子性、一致性、隔离性、持久性)原则,适合结构化数据存储。 2. 非关系型数据库(NoSQL):...

    Web数据库设计原则.pptx

    【Web数据库设计原则】主要涉及Web数据库的基本概念、选择、连接方法以及在实际应用中的实现。以下是关于这些知识点的详细说明: 7.1 Web数据库概述: Web数据库是通过Web技术来访问和操作数据库的一种方式。它允许...

    数据库入门系统之技巧篇(2).doc

    **四、大型数据库设计原则** 良好的数据库设计不仅关乎功能实现,也直接影响系统的性能。在设计初期,由于数据量小,可能忽视性能问题,但随着系统运行,性能瓶颈会逐渐显现。设计时需要平衡功能、效率和可扩展性。...

    软件工程国家标准之数据库设计说明书(GB8567-1988)

    2. **数据库设计原则**:该标准提出了设计数据库时应遵循的基本原则,包括数据的一致性、完整性、安全性、可扩展性和易用性等。这些原则旨在确保数据库能够适应业务需求的变化,并保证数据的准确无误。 3. **数据库...

    ORACLE数据库设计与优化

    本主题主要探讨Oracle数据库的设计原则和优化策略,以提升系统的性能和效率。 一、数据库设计基础 1. 规范化理论:在设计Oracle数据库时,遵循第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以及更高层次的...

    数据库应用与设计-大型数据库系统架构设计方法_架构设计_关系型数据库_数据库系统_

    在《数据库应用与设计-大型数据库系统架构设计方法》这本书中,读者可以找到更详细的设计原则、最佳实践以及案例分析,帮助理解和掌握构建大型数据库系统的技巧。通过学习,开发者能够根据实际业务需求,设计出满足...

Global site tag (gtag.js) - Google Analytics