`
leeleo
  • 浏览: 322561 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

数据库设计误区之添加备用字段

阅读更多

现象描述:

在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用。

比方说,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓名(Name)、性别(Sex)、出生年月日 (birthday)等等。大功告成之后,我忽然想到,将来系统中应该还会有很多其它与人相关的内容吧,比方说毕业院校,比方说工作单位等等,尽管现在根 本不需要填写,以后可能还是会用到的吧。拍脑袋一项,那就加入5个varchar2型的字段,分别叫做Text1、Text2……Text5,然后又想, 应该还有一些日期型的字段需要备用,就又建立了三个date型的字段,分别起名叫做date1、date2、date3,……

原因分析:

大家应该已经看出问题了,在这个数据表中存在大量暂时无用的字段,我们可以称之为备用字段,它们的作用是什么呢?就是以防万一,防备可能的情况。

这似乎可以叫做防患于未然,等到时候需要的时候,就不需要在表中增加新的字段了,而且这样做的话,一个表的数据应该会被存储在相邻的物理空间中,这对于性能也是有好处的。

另外的原因就是,在古老的数据库中,如果改变数据库的定义(包括增加字段、改变字段的类型、删除字段等等),那么其中所有的数据就会丢失,所以这项工作非常麻烦,我们需要先建立临时表,将数据备份出来,然后创建新表,将数据导入其中,最后再删除原来的表。

问题所在:

这样的做法对于项目会导致很多问题,而且原先想要解决的问题并不一定能够解决,不信的话,请往下看。

问题一:增加大量备用字段,必定会浪费很多空间,尽管其中可能都没有具体的数据,但是仅仅是空字段也会占据一定的空间的。

问题二:由于命名的特点,如果没有完善的文档管理流程,用不了多久(可能也就是两三年),就没有人能够说清楚到底哪个字段代表的是什么意义了。就算有文档管理,这些管理工作也会比较麻烦,而且在每次使用的时候都需要申请,还有可能会出现冲突的情况。

问题三:增加了这些备用字段就真的会够用吗?不一定,因为我们只是每个类型的字段留出几个备用,如果数量超过,或者要使用特殊的、不常用的类型的 时候,还是需要增加新的字段。比方说在上述的Person表中,我们要存储照片,那么可能就要增加一个blob类型的photo字段,这在初期设计的时候 可不一定会留出这样的备用字段。而且如果没有完善的管理,谁又能说清楚倒底哪个字段已经被使用,哪个字段还可以使用呢?到时候还不是要增加新的字段。

解决方案:

其实上面的这种设计方式就是一种“过度设计”,我们应该做的就是“按需设计”,在经过详细有效的分析之后,在数据表中只放置必要的字段,而不要留出大量的备用字段。

当需要增加相关的信息的时候,就要具体情况具体分析:

如果数量很少,而且信息的性质与原表密切相关,那么就可以直接在原表上增加字段,并将相关的数据更新进去。

如果数量较大,或者并非是原表对象至关重要的属性,那么就可以新增一个表,然后通过键值连接起来。

对于表的数据的存储位置所导致的性能问题,我们可以通过在特定时间对数据库的数据进行重组来解决,而这项工作对于长期运行的数据库来说,也是需要定期进行的。

分享到:
评论
1 楼 longflang 2011-01-07  
有理!!!!!!!!!!

相关推荐

    数据库设计经验,讲解如何设计数据库

    - 表的设计应考虑字段类型、长度、约束等,避免常见的设计误区,如冗余数据、数据不一致等。 - 对于主键选择,应权衡自增键和业务键的优劣,确保唯一性和稳定性。 6. **数据完整性**: - 通过设置合适的约束(如...

    程序员应该知道的数据库设计的两个误区

    本文将探讨程序员在数据库设计中常见的两个误区:备用字段和有意义的编码。 首先,我们来看“备用字段”这一误区。在设计数据库时,有时开发者会出于预防未来的扩展需求,在表中预留一些字段,比如Text1、Text2等。...

    数据库设计经验谈.docx

    在设计数据库表时,应关注字段设计,避免常见的设计误区,如过度规范化或反规范化。合理选择主键,考虑使用系统生成的键,并理解何时以及如何为字段创建索引来优化查询性能。同时,数据完整性是数据库设计的另一核心...

    数据库设计60个技巧

    ### 数据库设计60个技巧 #### 第一部分:设计数据库之前 **1. 考察现有环境** 在设计新数据库之前,深入了解当前环境是非常重要的。很多情况下,新数据库并非从零开始构建,而是需要与现有系统进行整合或替换。...

    Oracle数据库性能调整误区.pdf

    【Oracle数据库性能调整误区】 Oracle数据库作为广泛应用的关系型数据库,其性能优化对于医院信息系统乃至其他领域的关键业务至关重要。然而,在实际操作中,许多数据库管理员(DBA)常常陷入一些性能调整的误区,...

    SQLSERVER数据库系统设计与实现实验报告.pdf

    - 实验内容:向YGGL数据库的Employees和Departments表中添加数据,并进行各种查询操作,包括选择特定列、子查询、联接不同表以及使用GROUP BY和ORDER BY对结果进行分组和排序。 3. **实验总结与评价** - 实验步骤...

    关于Oracle数据库设计、开发、应用的探讨.pdf

    然而,随着Oracle数据库版本的不断升级,企业在设计、开发和应用过程中可能会遇到一些误区,导致效率低下和响应缓慢的问题。 数据库设计是系统性能的关键因素,它直接影响到开发周期和系统的运行效率。在设计Oracle...

    8-6.时序数据库的四个误区.pdf

    新一代时序数据库如InfluxDB的iox致力于解决这个问题,允许用户自由地写入各种事件数据,而无需顾虑指标和字段的区分。 【误区二:只关注性能忽视持久化策略】 时序数据库常常面临大量写入的需求,因此强调高性能...

    PCB设计十大误区(上).pdf

    本文件从PCB设计过程中常见的误区出发,结合具体的设计规则和案例,指出了在设计高速PCB时需要注意的十大误区,并提供了相关的设计建议和思路。 首先,文档提出了PCB设计中常见的误区。比如,有些设计者可能会认为...

    用例设计误区

    ### 用例设计误区解析 #### 误区一:过度追求发现独特缺陷的用例 很多人在设计用例时,陷入了寻找能揭露前所未见缺陷的用例的误区,忽略了测试的根本目的——确保软件功能正确无误。正确的理解应当是,用例集合...

    数据库开发者常犯的十大错误.doc

    错误观念认为任何人都能设计数据库,这是一个普遍误区。数据库设计需要专业知识,包括数据规范化等核心概念。不恰当的设计可能导致数据冗余、不一致性,甚至影响性能。开发者应接受专业培训,确保具备高效设计数据库...

    计算机等考三级数据库辅导:谈索引使用的误区.docx

    在数据库设计中,索引是一种重要的优化工具,用于加速数据检索。然而,对于索引的使用,存在一些常见的误区,这可能会导致性能下降而非提升。本文将探讨这些误区,并提供一些实践中的指导。 误区一:主键就是聚集...

    数据库自学2.rar

    2. **数据库设计**:理解数据库设计的基本原则,如范式理论(第一范式、第二范式、第三范式等),以及如何通过实体关系图(ER图)来规划数据库结构。 3. **表与字段**:了解如何创建和管理数据库表,包括定义字段...

    找到数据库开发者的捷径

    【数据库知识的普及误区】并非所有开发者都有深厚的数据库知识。数据库设计需要专业技能,包括规范化、反规范化等原则的理解和应用。忽视这方面的培训可能导致低效甚至错误的设计。 【第三范式与灵活性】遵循第三...

    重庆邮电大学数据库全部实验.pdf

    重庆邮电大学的数据库实验报告集中涉及了数据库设计、建模工具使用、E-R模型构建、SQL语言操作等多个数据库基础知识和技能点。下面详细解说实验报告中提到的相关知识点。 一、E-R模型和PowerDesigner使用 1. E-R...

    提高Oracle数据库性能的四个误区

    在提高Oracle数据库性能的过程中,我们常常陷入一些误区,这些误区可能导致优化效果适得其反。以下四个误区将详细解析: 1. **共享服务器模式(MTS)** Oracle的默认设置是专用服务器模式,每用户连接对应一个...

    Access上机操作练习题参考答案.pdf

    "Access数据库操作练习题...本资源提供了Access数据库操作练习题的参考答案,涵盖了Access数据库的基础操作、数据表设计、查询设计、表单设计、报表设计等方面的知识点,是Access数据库初学者和专业人士的不二之选。

    PCB设计之:必知的PCB设计八大误区

    2. 误区二:无脑添加上下拉电阻 过度使用上下拉电阻可能导致不必要的功耗,尤其是在高密度系统中。只有在必要时才应使用上下拉,例如确保输入稳定或避免信号漂移。无用的I/O口不应悬空,而应设定为输出状态以减少...

    基于SQL数据库的性能优化的探讨.pdf

    对索引的优化关键在于遵循索引建立的原则,避免认识误区,如认为主键即为聚集索引、索引能无条件地提高查询速度、或者将所有需要提高查询速度的字段都加入聚集索引。良好的索引实践包括:使用聚集索引代替非聚集主键...

Global site tag (gtag.js) - Google Analytics