`

设计数据库时需要考虑的问题

阅读更多

成功的管理系统=50% 的业务+(25%的数据库+25%的程序)

1、考察现有系统环境
    大多数数据库项目都不是从头开始建立的,通常机构内总会存在用来满足特定需求的现有系统。显然,现有系统并不完美,否则你就不必再建立新系统了。但是对旧系统的研究可以让你发现一些可能会忽略的细微问题。一般来说,考察现有系统对你绝对有好处。

2、充分预计需求的升级趋势
    询问用户如何看待未来需求变化非常有用,这样做可以达到两个目的:首先,可以清楚地了解应用设计在哪个地方应该更具灵活性以及如何避免性能瓶颈;其次,知道发生事先没有确定的需求变更时用户将和你一样感到吃惊。

3、充分理解客户的需求
       看起来这应该是显而易见的事,但需求就是来自客户(这里要从内部和外部客户的角度考虑)。不要依赖用户写下来的需求,真正的需求在客户的脑袋里。你要让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。
    一旦你认为你已经明确了业务内容,你最好同客户进行一次系统的交流。采用客户的术语并且向他们解释你所想到的和你所听到的。同时还应该用可能、将会和必须等词汇表达出系统的关系基数。这样你就可以让你的客户纠正你自己的理解。
    了解业务可以在以后的开发阶段节约大量的时间,而其你会发现,一旦你明确了业务需求,你就可以自己做出许多决策了。

4、确定数据对象的命名规范
    一定要定义数据库对象的命名规范,可以考虑用约定好的前缀或后缀:
对于视图来说,可以采用vw_前缀;
对表来说,表名可以加上前缀tbl_;
对表内的列[字段]来说,数字类型可以用_N作为后缀,字符类型可以采用_C后缀等,Money类型可以采用_M后缀,日期类型可以采用_D作为后缀等等;
对于存储过程来说,可以采用sp_前缀;
对于自定义函数,可以考虑采用udf_前缀;
此外,采用全大写字母,且以下划线分割单词,如:TBL_CUSTOMER_INFO

5、创建数据字典
    一定要花点时间创建数据字典,其中至少应该包含每个字段的数据类型和在每个表内的主外键。创建数据字典确实有点费时但对其他开发人员要了解整个设计却是完全必要的。越早创建越能有助于避免今后面临的可能混乱,从而可以让任何了解数据库的人都明确如何从数据库中获得数据。
 
6、从输入输出下手
    在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。举个简单的例子:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。

7、报表技巧
    要了解用户通常是如何报告数据的:批处理还是在线提交报表?时间间隔是每天、每周、每月、每个季度还是每年?如果需要的话还可以考虑创建总结表。系统生成的主键在报表中很难管理。用户在具有系统生成主键的表内用副键进行检索往往会返回许多重复数据。这样的检索性能比较低而且容易引起混乱。

8、考虑国际化问题
    在设计用到网络或者具有其他国际特性的数据库时,一定要记住大多数国家都有不同的字段格式,比如邮政编码等,有些国家,比如新西兰就没有邮政编码一说。

9、记录的版本
    借鉴Oracle的设计模式,每个表都设置以下6个字段:
    Create_Date
    Last_Modify_Date
    Creator
    Modifier
    Modify_Number
    Is_Deleted
在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。
 
10、仔细选择数据类型
    在SQL中使用smallint和 tinyint类型要特别小心,比如,假如你想看看月销售总额,你的总额字段类型是 smallint,那么,如果总额超过了$32,767你就不能进行计算操作了。
    在命名字段并为其指定数据类型的时候一定要保证一致性。假如字段在某个表中叫做“agreement_number”,你就别在另一个表里把名字改成“ref1”。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。记住,你干完自己的活了,其他人还要用你的数据库呢。
 
11、尽量避免使用触发器
    触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。

12、给文本字段留足余量
    ID类型的文本字段,比如客户ID或定单号等等都应该设置得比一般想象更大,因为时间不长你多半就会因为要添加额外的字符而难堪不已。比方说,假设你的客户 ID为10位数长。那你应该把数据库表字段的长度设为12或者13个字符长。这算浪费空间吗?是有一点,但也没你想象的那么多:一个字段加长3个字符在有1百万条记录,再加上一点索引的情况下才不过让整个数据库多占据3MB的空间。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。身份证的号码从15位变成18位就是最好和最惨痛的例子。

13、用约束而非商务规则强制数据完整性
    如果你按照商务规则来处理需求,那么你应当检查商务层次/用户界面:如果商务规则以后发生变化,那么只需要进行更新即可。假如需求源于维护数据完整性的需要,那么在数据库层面上需要施加限制条件。如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解的语言通知用户界面。除非你的字段命名很冗长,否则字段名本身还不够。
    只要有可能,请采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。

14、分布式数据系统
    对分布式系统而言,在你决定是否在各个站点复制所有数据还是把数据保存在一个地方之前应该估计一下未来 5年或者 10年的数据量。当你把数据传送到其他站点的时候,最好在数据库字段中设置一些标记。在目的站点收到你的数据之后更新你的标记。为了进行这种数据传输,请写下你自己的批处理或者调度程序以特定时间间隔运行而不要让用户在每天的工作后传输数据。本地拷贝你的维护数据,比如计算常数和利息率等,设置版本号保证数据在每个站点都完全一致。

15、强制指示完整性(参照完整性?)
    没有好办法能在有害数据进入数据库之后消除它,所以你应该在它进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。

16、关系
    如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多。

17、采用视图
    为了在你的数据库和你的应用程序代码之间提供另一层抽象,你可以为你的应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。

18、别忘了索引
    索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列[字段]采用非成组索引。不过,索引就象是盐,太多了菜就咸了。你得考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。
    大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。还有,不要索引 memo/note字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。

19、用存储过程让系统做重活
    解决了许多麻烦来产生一个具有高度完整性的数据库解决方案之后,我决定封装一些关联表的功能组,提供一整套常规的存储过程来访问各组以便加快速度和简化客户程序代码的开发。数据库不只是一个存放数据的地方,它也是简化编码之地。
 
20、使用系统生成的主键
    假如你总是在设计数据库的时候采用系统生成的键作为主键,那么你实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当你拥有一致的键结构时,找到逻辑缺陷很容易。

分享到:
评论

相关推荐

    数据库(顶层)设计说明(DBDD)教程资料

    在 DBDD 中,我们还需要对数据库的设计决策进行详细说明,包括数据库的物理设计、逻辑设计、概念设计等方面的考虑。同时,我们还需要对数据库的详细设计进行说明,包括数据库表的设计、视图的设计、存储过程的设计、...

    数据库设计准则及方法论.pdf

    数据库设计的准则是指在设计数据库时需要遵循的一些基本原则,这些原则旨在确保数据库的正确性、完整性和可扩展性。以下是数据库设计的准则: 1.第三范式:数据库设计的目标是遵循第三范式,以确保数据库的正确性和...

    教务管理系统数据库设计.doc

    教务管理系统数据库设计是一个复杂的过程,需要考虑到需求分析、概念设计、逻辑设计、物理设计和数据字典等多个方面。只有通过详细的数据库设计,才能确保教务管理系统的安全、可靠和高效运作。

    个人博客数据库设计.pdf

    * 数据库设计需要考虑到数据的完整性、一致性和安全性 * 数据库设计需要考虑到系统的可扩展性和可维护性 * 数据库设计需要考虑到用户的需求和体验 总结 数据库设计是个人博客管理系统的核心部分。通过数据库分析、...

    订货数据库设计.doc

    在设计订货数据库时,需要考虑到性能、安全性、可扩展性等问题。数据库的性能直接影响到系统的响应速度和数据处理能力。数据库的安全性直接影响到数据的安全和隐私。数据库的可扩展性直接影响到系统的灵活性和可维护...

    大数据环境下基于MySQL的数据库架构设计与实现.pdf

    在设计数据库架构时,需要考虑到大数据的特点和MySQL的特点。需要设计一个能够高效处理大数据的数据库架构,并且需要确保数据库的安全性和可靠性。 2. 数据库实现 在实现数据库时,需要考虑到数据库架构的设计和...

    收费停车场管理系统数据库设计数据库课程设计论文.doc

    该系统的数据库设计需要考虑到停车场的日常管理、车辆信息的存储、收费记录的管理等多个方面,设计一个合适的数据库结构是非常重要的。 数据库设计的过程可以分为几个阶段,包括需求分析阶段、概念设计阶段、逻辑...

    库存管理系统数据库设计.doc

    * 数据库设计是库存管理系统的核心部分,需要根据业务需求设计数据库的结构和逻辑模型。 * 数据库设计需要考虑到数据的完整性、安全性和可扩展性。 知识点2:实体关系模型(E-R 模型) * 实体关系模型是描述实体...

    数据库大作业设计

    数据库大作业设计是一个复杂的任务,需要学生具备良好的数据库设计和 SQL 语句编写能力,能够将所学运用到设计中,并考虑到数据的完整性、一致性、安全性和可扩展性等方面。 知识点: 1. 数据库设计:E-R 图设计、...

    工作流数据库设计.pdf

    工作流设计参考(包括 PHP 实现) ... 而且由设计时完成, 因此不考虑流程版本更新 的问题 一、工作流数据表设计 tbl_workflow_defination:工作流定义表 defination_id 流程 id defination_name 流程名称 defination

    基于MYSQL的图书管理系统数据库设计.doc

    在逻辑结构设计中,我们需要设计一个满足以上需求的数据库逻辑结构。逻辑结构设计需要考虑到数据的完整性、一致性和安全性。 在物理结构设计中,我们需要设计一个满足以上需求的数据库物理结构。物理结构设计需要...

    BBS论坛数据库设计代码.pdf

    * 数据库的设计需要考虑到数据的完整性和一致性,需要添加相应的约束来保证数据的正确性。 * 表的设计需要考虑到字段的数据类型和约束,需要根据实际情况选择合适的数据类型和约束。 * 数据库的性能需要考虑到查询和...

    数据库设计说明书模板.doc

    数据库设计说明书模板 数据库设计是软件开发中至关重要的一步,它...数据库设计是一个复杂的过程,需要考虑多个因素和限制。本文档提供了一个数据库设计说明书模板,旨在帮助数据库设计者创造一个高质量的数据库设计。

    医院住院系统数据库设计.pdf

    在设计医院住院系统数据库时,我们需要考虑三个方面的可行性:技术可行性、经济可行性和社会可行性。 1. 技术可行性:医院住院系统数据库的设计需要考虑到技术的可行性,包括硬件和软件的选择、系统的可扩展性和可...

    如何设计数据库表.doc

    如何设计数据库表 一、简介 在设计数据库时,最重要的步骤是要确保数据正确分布到数据库的表中。使用正确 的数据结构,可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等)。正 确进行表设计的正式名称是...

    什么是数据库设计数据库设计的步骤.docx

    设计质量与设计人员的经验和水平有直接关系 缺乏科学理论和工程方法的支持,工程的质量难以保证 数据库运行一段时间后常常又不同程度地发现各种问题,增加了维护代价 规范设计法 什么是数据库设计数据库设计的步骤...

    软件数据库设计模板.docx

    表名 增长频度(条/年) 描述 考虑对数据库的维护、可扩展性的设计 数据库管理与维护说明 在设计数据库的时候,及时给出管理与维护本数据库的方法,有助于将来撰写出正确完备的用户手册。 软件数据库设计模板 1 2

    人事标准管理系统数据库设计.doc

    3. 数据可扩展性:设计数据库时需要考虑到未来的发展和扩展。 4. 数据可维护性:设计数据库时需要考虑到数据的维护和更新。 二、人事标准管理系统数据库设计 人事标准管理系统数据库设计需要遵循数据库设计原则,...

    MySQL云数据库架构设计.pptx

    在架构设计中,我们需要考虑多个方面,如服务可用性设计、数据可用性设计、监控设计和 DTS 设计。服务可用性设计旨在确保数据库服务的高可用性,使用多种机制来保证服务的可用性,如备份、恢复、故障转移等。数据...

    PostgreSQL MySQL Oracle数据库设计优化完美攻略

    PostgreSQL MySQL Oracle 数据库设计优化完美攻略 本文将从数据库设计阶段的...数据库设计优化是一个非常复杂的过程,它需要我们从各个方面进行考虑和设计。只有通过合适的设计,我们才能实现高效、可靠的数据库系统。

Global site tag (gtag.js) - Google Analytics