数据库设计中需要注意的问题
数据库设计是信息系统设计的基础,一个好的数据库设计在满足了软件需求之外,还要易
维护、易扩充等等要求。当然,对专家们反复强调的数据的一致性、冗余性、访问效率等
问题的解决,很大程度上取决于数据库设计者的经验和专业水平。但这不妨碍我们根据过
去的经验,从实用的角度给出数据库设计所要要考虑的问题并尽可能给出相应的解决方案
,从而给信息系统的数据库设计者一些有益的启示。(注:这里的数据库设计主要指数据
库中表和视图的schema设计,不涉足数据库系统中其他方面的设计)
那么怎样才算是一个好的数据库设计呢?以下给出一个一般性的标准。
一、一个好的数据库设计首先要满足用户的需求
所有信息系统最后都将提交给最终用户使用,对于这一点,相信大家都已经达成共识。但
是准确地把握用户的需求是很难的,虽然各方面的专家已经从不同方面给出了解决方案,
但是用户需求仍然是软件工程中最不确定的因素之一。
二、一个好的数据库设计要便于维护和扩充
为了应对用户需求的修改和添加,也为了满足各种不同的软硬件环境下系统的使用,大部
分信息系统都不得不在其生命期中进行升级和调整。在这些升级、调整中,又有相当部分
会涉及到数据库设计的修改,因此,数据库设计最好从一开始就能在易维护、可扩充的角
度多加斟酌。
1、不要为各种编号字段的设定固定的意义
而是最好通过对照表来建立这种编号和意义的对照关系。举例来说,很多设计者习惯给部
门信息给出固定的编号,这种设计有个致命的缺陷:那就是由于这种对照关系既然不体现
在数据库中,就必然要用业务逻辑来进行解释,这样一来,一有新的调整就不得不更新业
务逻辑代码,也就非常容易不一致的错误。
2、枚举信息要体现在相应在对照表中
而不是体现在使用该信息的表中的值字段,这样做的好处是当用户希望用该枚举信息作为
查询条件的时候,通过参照表的方式可以很容易的建立这些信息,另外也避免了当多个表
格中都含有该枚举信息有可能引起的不一致。
3、用关联表建立表和表之间的多对多关系
而不要用一个字段解析的方式进行,举例来说,为了描述用户(UserInfo)和角色(RoleInf
o)之间的关联关系,我们要建立对照表UserInfo_RoleInfo,而不要试图在用户表中建立一
个较长的字段,如Roles(用RoleID1; RoleID2...的形式构成)来代替,因为这样一来字
段解释需要在业务代码相应的解析代码,二来由于Roles定长,无法满足用户角色的扩充。
三、一个好的数据库设计要具有“可读性”
如同编程书籍中反复强调的程序员一定要在代码的可读性方面下功夫一样,考虑到信息系
统将来的升级和维护可能要要由另外一批人来进行,因此数据库设计必然也要具有可理解
性。对此,我们参照提高代码可读性的常用方法,给出一些建议:
1、用设计文档来提高数据库设计的可读性
这点基本对应于“可读性”代码里面的注释。在一个合格的数据库设计文档中必须给出数
据库中的每个表、每个字段、表间的关联关系以及各种约束的意义以及由来,从而有可能
让开发者根据用户需求和设计文档就能理解正确数据库的设计。
2、给表和视图起一个有意义的名字
这点对应于coding规范中的变量和函数的命名,很显然,CustomerInfo的名字很容易联想
到该表中含有客户信息,而把它命名为Table0001只能让人感到费解外。另外,如果DBMS提
供表和视图名的大小写支持,该名称最好由每个构成单词(首字母大写)拼接而成。
3、用前缀给出表和视图内容之外的其他信息
如给参照表Ref_前缀,这样就可以让业务逻辑实现人员根据表的名字知道他所要操作的是
不是张参照表,从而帮助他更快地理解详细设计,并有可能及早发现里面的错误。同样,
给所有视图加上V_前缀,就可以让业务逻辑编程者很容易地知道他现在面临的是一个表还
是视图,从而避免了对视图进行更新操作这种低级的错误。
4、给每一个字段起一个有意义的名字
如给CustomerInfo表中的电子邮件字段起名EMail让人很容易明白它的准确含义,而Field
05则让人不知所云。基于同样的道理,数据库设计中也不能给字段起一个张冠李戴的名字
。
5、字段命名要考虑上下文
举例来说,在UserInfo表中,用UserName来表示用户名字段就不如Name来的更加合适。这
种情况画蛇添足的情况在对照表的设计中体现得尤为明显,如把部门对照表(Ref_Departm
ent)中的部门ID字段命名为DepartmentID,把部门名称字段命名为DepartmentName等等。
5、视图的设计不要牵扯到其他视图
与代码设计中函数调用最好不要嵌套过多层次相对应,为了便于数据库设计的阅读人能够
很好地理解设计,视图最好直接建立在表上。
6、同一表中的记录最好不要相互引用
这种引用关系不仅让数据库设计的阅读人云里雾里,也不便于业务逻辑代码的编写。
7、关联表的命名用关联的表名中间加下划线连接构成
如学生(StudentInfo)和课程(CourseInfo)的关联表起名为StudentInfo_CourseInfo。
四、一个好的数据库设计能够满足空间和效率的要求
对于一个信息系统来说,在实现用户需求的基础之上,保证一个较低的空间占用以及短的
响应时间都是理智的客户所愿意看到的。那么在这一方面,数据库设计又要做些什么工作
呢?
1、使用varchar而不要使用char字段
对于不定长信息如用户的简介信息,varchar的使用可以减少近一半的空间占用。当然这点
不能一概而论,如用相应长度的char存储定长文本数据就比varchar来的合适。
2、不要使用BLOB字段存放“大数据”
BLOB字段诚如其名,本身是为存储二进制大数据而出现的,同样的道理也适用于某些DBMS
所引入的TEXT字段。因为对于一般信息系统而言,最长的字段往往是一些描述文本信息,
而DBMS对char/varchar的长度基本能满足这种需求。因此积极建议设计者对一些貌似很长
的文本的最大允许长度进行确认,在此基础上参照DBMS中的开发手册来决定是否采用大字
段。
3、不要使用设计器缺省的字段长度
这种做法一方面纵容了设计者对用户需求的一知半解以及对设计敷衍了事的不良习惯,另
外一方面也在数据的存储上浪费了不少的空间,因为使用缺省字段长度的情况往往发生在
字段上。
4、不要轻易使用unicode文本字段
DBMS对unicode的支持在帮助产品国际化的同时,也在一定程度上带来空间上的浪费,尤其
是在当要存储的文本中的基本都是ASCII字符的情况下,这种浪费尤为明显。因此,建议设
计者在选择unicode的理由,一定是出于国际化的考虑,而不是其他。因为大多数的大字符
集和ASCII字符并存情况下所要碰到的问题基本上都已经由DBMS提供商解决。
5、使用预计算表来提高响应速度
跟数据仓库里面的某些思路相似,当业务逻辑中需要用倒根据历史信息得来的统计数据时
,最好由独立于系统的预计算模块或相应的DW工具定期完成这些统计数据的预计算。
五、一个好的数据库设计可以简化业务逻辑的设计
所有的数据库设计都不是孤立的,它通过相应的业务逻辑实现(三层结构中还有表现层)
来形成最终的产品,因此一个好的数据库设计应该能够帮助降低业务逻辑的编写难度,最
起码不要给业务逻辑的设计、编码带来额外工作。
1、不要轻易的允许某些字段为空
所有允许为空的字段必须是基于用户需求,而不是出于设计上方便的考虑。这样带来的好
处是让详细设计中的某些错误和疏漏(如在设计中没有考虑对非空字段的内容检查)在编
码和单元测试阶段就被发现,从而避免了进一步扩散,有助于提高软件的质量。
2、不要业务逻辑代码实现唯一性约束
对数据库表中的某些字段(或者多个字段的组合)的唯一性约束应该尽可能地加到数据库
端。因为这种约束工作交给业务逻辑中去实现代价高昂而且不可靠。
3、关联约束一定要建立在数据库端
分析出设计中所涉及的主外键引用关系并体现在数据库设计中。这一条出于两点考虑:降
低业务逻辑的编写难度和数据关联性约束的要求。
分享到:
相关推荐
软件数据库设计文档模板 software database design report document" 在软件开发项目中,数据库设计是非常重要的一步骤,它直接影响到软件系统的性能、安全性和可维护性。本文档提供了一份软件数据库设计文档模板...
小区物业管理系统数据库设计的优点是能够提供一个方便的小区物业管理系统,提高小区物业管理的效率、降低成本、提高服务质量。小区物业管理系统数据库设计的缺点是需要小组成员具备团队协作的精神和数据库设计的经验...
工资管理系统数据库设计报告是信息技术学院信息管理与信息系统专业的一份课程设计报告,旨在通过实际操作来学习和理解数据库系统的设计与实现。这份报告涵盖了多个关键阶段,包括需求分析、概念设计、逻辑设计以及...
4. 提高系统稳定性:通过优化数据库设计,提高了系统的稳定性。 六、站内信数据库设计的应用前景 站内信数据库设计的应用前景非常广泛,主要体现在以下几个方面: 1. 社交媒体平台:站内信数据库设计可以应用于...
在车辆管理系统中,数据库 normalization 是指将车辆管理系统数据库设计成符合一定规则的形式,以提高数据的安全性和一致性。 8. 数据库 Security:数据库 Security 是指保护数据库免受非法访问和破坏的措施。在...
停车场管理系统数据库设计是指在停车场管理系统中对数据库的设计和实现,旨在提高停车场管理的效率和准确性。该设计文档主要包括概念设计阶段、逻辑设计阶段、物理设计阶段、数据库实施阶段和数据库调试与测试等几个...
CASE(计算机辅助软件工程)工具和环境支持软件开发过程,包括数据库设计,通过自动化工具提高效率和质量,例如使用数据库建模工具帮助可视化和规范化数据关系,或使用版本控制工具管理数据库结构的变更。...
数据库设计是IT行业中至关重要的一个环节,它直接影响到系统性能、数据一致性以及应用程序的开发效率。这份"数据库设计教案自制"资源,显然是一份详细的教学资料,旨在教授如何结合理论与实践,运用PowerDesigner...
在网上购物商城数据库设计中,可以使用数据库设计工具来设计和管理数据库,提高数据库的设计效率和质量。 5. 数据库设计优化 数据库设计优化是指对数据库的设计和优化,以提高数据库的性能和效率。 在网上购物...
良好的数据库设计可以提高数据的存取效率、降低数据冗余、提高数据的一致性和安全性。数据库设计说明书是一个重要的文档,旨在记录数据库设计的过程、原则、方法和结果。 从给定的文件信息中,我们可以看到,这是一...
根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签中的信息,对可能涉及的关键知识点进行归纳总结。 ### 数据库设计的...
### 教务管理系统数据库设计详解 #### 一、引言 随着信息技术的发展,教育领域的信息化建设也变得日益重要。教务管理系统作为学校信息化建设的重要组成部分,对于提高学校的管理水平和服务质量具有重要意义。本篇...
本课程分为系统分析、数据库设计两个阶段进行。应用程序设计作为选做内容。 数据库系统课程设计的主要目标是: a)加深对数据库系统、程序设计语言的理论知识的理解并提高应用水平。 b)通过实践,掌握数据库设计...
数据库设计与开发规范是软件开发过程中的重要环节,特别是在大型企业如阿里巴巴这样的环境中,严谨的数据库设计规范能够确保系统的高效、稳定和可扩展性。以下是对"数据库设计开发规范-阿里.pdf.zip"文件内容的详细...
在IT行业中,系统设计是软件开发过程中的关键环节,它涉及到架构设计、概要设计、详细设计和数据库设计等多个步骤。这些步骤都是确保项目成功、高效且可维护的关键。以下是对这些知识点的详细阐述: 1. **架构设计*...
财务数据库设计+SQL 财务数据库设计是指对财务相关数据的收集、存储、管理和分析的过程。该设计旨在实现财务管理的自动化、智能化和科学化,提高财务管理的效率和准确性。 财务数据库设计的主要目标是: * 实现...
数据库设计是信息系统开发的核心环节,它涉及到数据的组织、存储和访问策略,旨在创建一个高效、稳定、可扩展的数据库解决方案。本章深入探讨了数据库设计的各个方面,包括任务、特点、方法和步骤,以及所使用的辅助...
《ORACLE数据库设计与优化》 Oracle数据库是全球广泛使用的大型关系型数据库系统之一,它在数据存储、处理和管理方面具有强大的功能。本主题主要探讨Oracle数据库的设计原则和优化策略,以提升系统的性能和效率。 ...
软件开发数据库设计文档范例 软件开发中的数据库设计是软件系统的核心组件之一,对于软件系统的正确运行和高效开发至关重要。下面是软件开发数据库设计文档范例的详细知识点: 一、引言 数据库设计是软件开发中不...
学生宿舍管理系统数据库设计案例是一个全面展示数据库设计流程的实例,涵盖了从需求分析到逻辑设计等多个关键步骤。在设计这样的系统时,首要目的是提高学生宿舍管理的效率和准确性,确保信息的及时更新和有效利用。...