数据库设计的重要性和设计原则

说起数据库设计,相信大家都明白怎么回事,但说起数据库设计的重要性,我想大家也只是停留在概念上而已,到底如何重要?怎么重要呢?今天就将我至今为止的理解向大家阐述下。

  一个不良的数据库设计,必然会造成很多问题,轻则增减字段,重则系统无法运行。我先来说说数据库设计不合理的表现吧:

  1、与需求不符

  因为这个原因造成的改动量往往是最大。如果进入编码阶段的话,很可能会直接让你崩溃掉。

  2、性能低下

  含有大数据量的表之间的关联过多;没有合理的字段设计来用于查询而造成的SQL查询语句很复杂;对于大数据量的表没有采用有效的手段去处理;滥用视图等。

  3、数据完整性丧失

  含有主外键关系的表之间关联字段的设计方式不合理,造成更新与删除操作后程序容易出错或不完善;使用了已经删除或丢失掉的数据。

  4、可扩展性性太差

  表设计的与业务绑定的太紧密、单一,造成表的可拓展性、可修改性太差,无法新需求的要求。

  5、非必要数据冗余量太大

  没用的垃圾数据存储过多,不仅占用资源,还影响查询效率。

  6、不利于计算或统计

  缺少必要的联系性或统计性字段或用于计算统计的字段分散于多个表中,造成计算统计的步骤繁琐,甚至无法计算统计。

  7、没有详尽的数据记录信息

  缺少必要的字段,造成无法跟踪数据变化、用户操作,也无法进行数据分析。

  8、表之间的耦合性太大

  多张表之间关联的过于紧密,造成一张表发生变化而影响到其他表。

  9、字段设计考虑不周

  字段长度过短或字段类型过于明确,造成可发挥、可拓展的空间太小。

  大多数的程序员对于软件开发的出发点认识不是很明确,总是认为实现功能才是重要的,在简单了解完基本需求后就急忙进入编码阶段,对于数据库设计思考的比较少、比较简单,大多设计都只停留在表面上,这往往是要命的,会为系统留下很多隐患。要么是写代码开发过程中才发现问题,要么就是系统上线运转后没多久就出现问题,还有可能给后期维护增加了很多工作量。如果到了那个时候再想修改数据库设计或进行优化等同于推翻重来。

  数据库是整个软件应用的根基,是软件设计的起点,它起着决定性的质变作用,因此我们必须对数据库设计高度重视起来,培养设计良好数据库的习惯,是一个优秀的软件设计师所必须具备的基本素质条件!
那么我们要做到什么程度才是对的呢?下面就说说数据库设计的原则:

  1、数据库设计最起码要占用整个项目开发的40%以上的时间

  数据库是需求的直观反应和表现,因此设计时必须要切实符合用户的需求,要多次与用户沟通交流来细化需求,将需求中的要求和每一次的变化都要一一体现在数据库的设计当中。如果需求不明确,就要分析不确定的因素,设计表时就要事先预留出可变通的字段,正所谓“有备无患”。

  2、数据库设计不仅仅停留于页面demo的表面

  页面内容所需要的字段,在数据库设计中只是一部分,还有系统运转、模块交互、中转数据、表之间的联系等等所需要的字段,因此数据库设计绝对不是简单的基本数据存储,还有逻辑数据存储。

  3、数据库设计完成后,项目80%的设计开发在你脑海中就已经完成了

  每个字段的设计都是有他必要的意义的,你在设计每一个字段的同时,就应该已经想清楚程序中如何去运用这些字段,多张表的联系在程序中是如何体现的。换句话说,你完成数据库设计后,程序中所有的实现思路和实现方式在你的脑海中就已经考虑过了。如果达不到这种程度,那当进入编码阶段后,才发现要运用的技术或实现的方式数据库无法支持,这时再改动数据库就会很麻烦,会造成一系列不可预测的问题。

  4、数据库设计时就要考虑到效率和优化问题

  一开始就要分析哪些表会存储较多的数据量,对于数据量较大的表的设计往往是粗粒度的,也会冗余一些必要的字段,已达到尽量用最少的表、最弱的表关系去存储海量的数据。并且在设计表时,一般都会对主键建立聚集索引,含有大数据量的表更是要建立索引以提供查询性能。对于含有计算、数据交互、统计这类需求时,还要考虑是否有必要采用存储过程。

  5、添加必要的(冗余)字段

  像“创建时间”、“修改时间”、“备注”、“操作用户IP”和一些用于其他需求(如统计)的字段等,在每张表中必须都要有,不是说只有系统中用到的数据才会存到数据库中,一些冗余字段是为了便于日后维护、分析、拓展而添加的,这点是非常重要的,比如黑客攻击,篡改了数据,我们便就可以根据修改时间和操作用户IP来查找定位。

  6、设计合理的表关联

  若多张表之间的关系复杂,建议采用第三张映射表来关联维护两张表之间的关系,以降低表之间的直接耦合度。若多张表涉及到大数据量的问题,表结构尽量简单,关联也要尽可能避免。

  7、设计表时不加主外键等约束性关联,系统编码阶段完成后再添加约束性关联

  这样做的目的是有利于团队并行开发,减少编码时所遇到的问题,表之间的关系靠程序来控制。编码完成后再加关联并进行测试。不过也有一些公司的做法是干脆就不加表关联。

  8、选择合适的主键生成策略

  主键生成策略大致可分:int自增长类型(identity、sequence)、手动增长类型(建立单独一张表来维护)、手动维护类型(如userId)、字符串类型(uuid、guid)。int型的优点是使用简单、效率高,但多表之间数据合并时就很容易出现问题,手动增长类型和字符串类型能很好解决多表数据合并的问题,但同样也都有缺点:前者的缺点是增加了一次数据库访问来获取主键,并且又多维护一张主键表,增加了复杂度;而后者是非常占用存储空间,且表关联查询的效率低下,索引的效率也不高,跟int类型正好相反。

  终上所述,我们可见数据库设计在整个软件开发的起到的举足轻重的作用,尤其是我说的设计原则的第一点,数据库与需求是相辅相成的,我经常把软件开发比作汽车制造。汽车制造会经过图纸设计,模型制作,样车制造,小批量试生产,最后是批量生产等步骤。整个过程环环相扣,后一过程是建立在前一过程正确的前提基础之上的。如果在图纸设计阶段发现了一个纰漏,我们可以重新进行图纸设计,如果到了样车制造阶段发现这个错误,那么我们就要把从图纸设计到样车制造的阶段重来,越到后面发现设计上的问题,所付出的代价越大,修改的难度也越大。

  数据库设计难度其实要比单纯的技术实现的难很多,他充分体现了一个人的全局设计能力和掌控能力,所以在今后的项目中大家一定要着重培养这方面的能力,这里我将我的经验分享给了大家,希望能对大家有所帮助。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-01 03:45:29

数据库设计的重要性和设计原则的相关文章

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

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

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

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

信息设计的交流原则和信息设计中的图形设计

文章描述:信息设计中的图形设计原则. 在当今纷繁复杂的世界,设计形式也是百花齐放,什么设计才是最容易被用户接受,并且能很好的给用户带来他们需要的信息,这是值得我们探讨的.  信息设计的定义 信息设计顾名思义就是用于信息交流的设计,如果我们把"信息"这个词语拿出来单独来解释的话,首先"信息"这个词语由来已久,它是人类文明赖以发展的基础,可以说人类所有的知识和故事都是信息,通过信息的传递,人类的文明才得以进步和向前发展.现在人们接收的信息越来越多,所以我们可以根据规律来

设计上的8/2原则,您实现了吗?实现后会是什么样子的呢?

最近做项目感觉很累很累,先自我分析一下吧.(但愿不要给大家一个"阴天"的感觉) 先明确一下我理解的"设计"的范围.一定要先说明一下,否则容易混淆. 一般做一个项目主要有以下几步. 1.到客户那里做调研,收集客户的需求: 2.根据需求和设计人员的经验设计功能模块: 3.设计实体类(或者数据库).对于我来说就是设计数据库:) 4.设计各个模块的实现细节,比如多少个列表页面,里面都显示什么字段:多少个表单,里面都有什么字段:各个页面之间如何跳转:业务逻辑的具体功能的实现.

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

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

通向架构师的道路 第六天 漫谈基于数据库的权限系统的设计

一.权限系统 这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述"左右值无限分类实现算法"如 何来优化"系统菜单"的结构而告终.今天的内容和前几天的基础框架是一样的它们都属于基础知识,在这些基础知识上还可以 扩展出无数的变种与进化设计. 二.先来看客户的一个需求 2.1 用户实际需求 1. 所有的用户.角色可动态配置 2. 所有的系统菜单的权限要求具体到"增,删,改.查.打印.导出"这样的小权 限的设计 3. 所有的

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

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

一个购物系统的数据库订单表该如何设计

问题描述 一个购物系统的数据库订单表该如何设计 订单中要显示购买者信息,购买者配送地址,商品名,价格,数量其中商品可能是多个. 解决方案 这个最好是设计2个表,,一个订单,,一个订单详情,,订单中是用户的信息与购买的商品名,,订单详情中是商品的具体价格,数量,介绍等信息 解决方案二: 一张用户信息表,一张订单详情表,用户信息表唯一,主键是订单详情表的外键

通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计

一.权限系统 这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述"左右值无限分类实现算法"如何来优化"系统菜单"的结构而告终.今天的内容和前几天的基础框架是一样的它们都属于基础知识,在这些基础知识上还可以扩展出无数的变种与进化设计. 二.先来看客户的一个需求 2.1用户实际需求 1.       所有的用户.角色可动态配置 2.       所有的系统菜单的权限要求具体到"增,删,改.查.打印.导出"这样的小权限的设