大型数据库设计需要注意的一些原则

  一个好的数据库产品不等于就有一个好的应用系统,如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。一般来讲,在一个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

时间: 2024-09-28 11:18:38

大型数据库设计需要注意的一些原则的相关文章

网站产品设计参考的几条原则

以下分析的是产品的设计原则,不过其中大多都以网站产品为原型,所以也可以称作网站产品设计的原则,涉及到用户,浏览器工具,SEO和体验等.既有原理也有实例,对网站产品来说很多原则都是通用,无论在哪个网站与产品都可以借鉴使用. 根据自己的经验,总结了8条产品设计中最基本的原则,希望对于一些刚刚接触产品设计方面的朋友有所帮助. 1.西瓜要有西瓜样,豆豆要有豆豆样 这句话还有一种反面的说法,就是"有个冰箱叫电视".可能有的同学会说你这不是废话吗?其实就是因为是废话,所以经常被设计人员所忽略.譬如

网站设计与维护的主要原则

设计 您或许设计过网站甚至个人主页,但是要让人们从浩如烟海的站点中,选择 访问浏览您的站点,就不是那么简单,因为鼠标和键盘永远掌握在上网者手中.设计 者要想设计出达到预期效果的站点和网页,需要对用户需求有深刻理解,并对人们 上网时的心理进行认真的分析研究. Web站点是向用户或潜在客户提供信息(包括产品和服务)的一种方式,是未 来企业开展电子商务的基础设施和信息平台.企业的网址犹如企业的商标和品牌一 样,是反映企业形象和文化的重要窗口.那么,我们应该如何对企业网站进行设计. 管理与维护呢? 一.

产品设计的用户需求理解:产品设计实践的五项原则

文章描述:用户体验设计的五项原则. 前几天接受<商学院>杂志对我的专访,今天把整理好的文章先发布出啦,最近的一期的杂志将把文章刊登出来,我这这里就把文章先放在博客里吧,也算是最近新写的一篇博文,博客还是不能荒废了啊 下面就是正文了 用户体验设计的五项原则  阿里巴巴资深交互设计师 宋磊 如何设计出具有优秀用户体验的产品是交互设计师始终面临的一道难题,"好的产品设计一定是建立在对用户需求的深刻理解上"这句话被许多设计师视为设计的天条:至于在设计中如何发现并深刻理解用户的需求,

网站优化之url设计应遵循的六大原则

UEO这个词相信大家也不陌生,中文意思就是用户体验.现在很多网站都注重用户体验,毕竟我们做网站最终是服务于用户,所以我们在网站设计和优化时也要考虑用户体验.用户体验的范围很广,这里主要讲述从用户体验的角度来分析网站的url设计,简单的说,url应该清晰友好,方便记忆.那么我们在网站建设中应该如何去设计url呢?下面就由笔者来讲述url设计的八大原则. 一.url月简洁越好 我们举个例子来说,假如你看到了一个非常长的url,给你的第一感觉是怎样的?同样,我们的用户面对着冗长的url地址,肯定也会产

设计Logo的12条原则

要从一众竞争者中显得突出,你必须创造独特的风格来显示自己的设计特色,而不是模仿甚至抄袭其它设计或者风格,唯有创新才能脱颖而出. Logo(品牌标识)是品牌的"面子",所以极其重要,一个设计优秀的Logo是品牌的重要资产.然而,仅仅靠优秀的平面设计并不能保证设计出来的logo是令人印象深刻且形象生动的品牌标识. 正如不同的行业有其特定的技能,logo设计也要求设计师不断学习,积累经验才能获得成功:对所有平面设计师来说,知识便是能力. 基于此,我们总结出要设计好的logo必须遵循的12条原

网页设计中如何把握视觉原则

  网页的设计效果关系到网站的用户体验,然而对于网页的设计原则,需要网页设计师把握好颜色的搭配.版块的布局才能设计出更好的网页.浩威网站建设的网页设计师给大家介绍一下网页的视觉设计原则. 1.颜色的定位 不同行业的主色选择都是不同的,比如食品,选择绿色最佳;IT行业选择蓝色或黑色最佳等等.视觉设计前期调研阶段,常常通过情绪版提炼适合目标用户的颜色,形成一整套的配色方案. 2.字体的设计风格 在视觉设计中,不同的字体不同的颜色设计出来的效果,感觉确实千差万别. 3.体现公司品牌形象 企业网站不仅要

独立商城网站设计的五个黄金原则

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 独立商城网站,很多人都把主要精力放在美工上,最后网站确实做的非常漂亮,但是最后的转换率却不是很理想.如何努力打造一个既看起来美观,用户使用起来又方便,转化率高的独立商城呢,下面千推网为大家分享五个原则: 原则一:简化购买流程 据统计,有超过30%的客户会因为下订单.付款等环节的麻烦而放弃购物.商品的购买流程是独立商城最重要的流程之一,对转化率

WEB交互界面易用性设计和验收的指导性原则

随着企业intranet和国际internet的迅速发展,越来越多的工作流程,商务交易,教育.培训.会议和讲座,以及个人消费娱乐都被转移到所谓的万维网(World Wide Web,以下简称WEB)上来了.与此相对应的是交互操作的复杂性越来越高. 随着Browser/Server模式的日渐流行,很多操作都是在浏览器环境下的网页上完成的,并不是只有失效的链接和意外的出错才会使操作者感到烦恼,即便是一次完整的成功操作过程,也可能因为操作的繁复性过高或者使用上的不方便而给操作者带来不愉快的体验. 本文

渠道设计存在的误区及原则

在普药运作中,拥有了良好的渠道品牌,就掌握了渠道的控制权,使渠道设计能够以"我"为主导.相反,没有渠道品牌概念的企业,往往在很多时候被渠道控制,渠道设计必须以"他"为主导. 主导主体的不同决定了不同的渠道设计策略,不同的渠道设计策略决定了企业的销量和利润.渠道策略设计正确执行到位,销量就会迅速上升:反之,销量和利润就会一败涂地. 那么,对于非品牌普药企业而言,渠道设计存在哪些误区?应该遵循哪些原则呢? 误区一:盲目"傍大款" 很多非品牌普药企业在