http://bbs.51cto.com/thread-1038510-1.html

误区之一 备用字段

现象描述:
在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用。
比方说,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓名(Name)、性别(Sex)、出生年月日( bi rthday)等等。大功告成之后,我忽然想到,将来系统中应该还会有很多其它与人相关的内容吧,比方说毕业院校,比方说工作单位等等,尽管现在根本不需要填写,以后可能还是会用到的吧。拍脑袋一项,那就加入5个varchar2型的字段,分别叫做Text1、Text2……Text5,然后又想,应该还有一些日期型的字段需要备用,就又建立了三个date型的字段,分别起名叫做date1、date2、date3,……
原因分析:(添加新字段一个表的数据会被存储在不相邻的物理空间,降低性能)一般根据需要 预留2,3个备用字段,没必要太多
大家应该已经看出问题了,在这个数据表中存在大量暂时无用的字段,我们可以称之为备用字段,它们的作用是什么呢?就是以防万一,防备可能的情况。
这似乎可以叫做防患于未然,等到时候需要的时候,就不需要在表中增加新的字段了,而且这样做的话,一个表的数据应该会被存储在相邻的物理空间中,这对于性能也是有好处的。
另外的原因就是,在古老的数据库中,如果改变数据库的定义(包括增加字段、改变字段的类型、删除字段等等),那么其中所有的数据就会丢失,所以这项工作非常麻烦,我们需要先建立临时表,将数据备份出来,然后创建新表,将数据导入其中,最后再删除原来的表。
问题所在:
这样的做法对于项目会导致很多问题,而且原先想要解决的问题并不一定能够解决,不信的话,请往下看。
问题一:增加大量备用字段,必定会浪费很多空间,尽管其中可能都没有具体的数据,但是仅仅是空字段也会占据一定的空间的。
问题二:由于命名的特点,如果没有完善的文档管理流程,用不了多久(可能也就是两三年),就没有人能够说清楚到底哪个字段代表的是什么意义了。就算有文档管理,这些管理工作也会比较麻烦,而且在每次使用的时候都需要申请,还有可能会出现冲突的情况。
问题三:增加了这些备用字段就真的会够用吗?不一定,因为我们只是每个类型的字段留出几个备用,如果数量超过,或者要使用特殊的、不常用的类型的时候,还是需要增加新的字段。比方说在上述的Person表中,我们要存储照片,那么可能就要增加一个blob类型的photo字段,这在初期设计的时候可不一定会留出这样的备用字段。而且如果没有完善的管理,谁又能说清楚倒底哪个字段已经被使用,哪个字段还可以使用呢?到时候还不是要增加新的字段。
解决方案:
其实上面的这种设计方式就是一种“过度设计”,我们应该做的就是“按需设计”,在经过详细有效的分析之后,在数据表中只放置必要的字段,而不要留出大量的备用字段。
当需要增加相关的信息的时候,就要具体情况具体分析:
如果数量很少,而且信息的性质与原表密切相关,那么就可以直接在原表上增加字段,并将相关的数据更新进去。
如果数量较大,或者并非是原表对象至关重要的属性,那么就可以新增一个表,然后通过键值连接起来。
对于表的数据的存储位置所导致的性能问题,我们可以通过在特定时间对数据库的数据进行重组来解决,而这项工作对于长期运行的数据库来说,也是需要定期进行的。

数据库设计之备用字段相关推荐

  1. mysql 备用字段_数据库设计之备用字段

    备用字段,也称 预留字段 . 相关描述: 在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用. 举例说明,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓 ...

  2. 数据库设计之冗余字段

    以下内容参考:http://blog.csdn.net/elemman/article/details/50966164#inf 第一范式(1NF) 概念 数据表的每个字段(属性)必须是唯一的.不可分 ...

  3. 课堂笔记 - 数据库设计

    数据库设计 说在前面 项目开发的流程包括哪些环节 需求调研[需求调研报告]-- 公司决策层 根据市场公司需求分析公司是否需要开发软件来辅助日常工作 公司高层市场考察,市场分析,决定做什么软件. 不懂技 ...

  4. 数据库建立索引、数据表创建规则、备用字段 / 保留字段 / 预留字段

    数据库建立索引 数据库.数据表建立索引的原则 数据库建立索引的原则 1,确定针对该表的操作是大量的查询操作还是大量的增删改操作. 2,尝试建立索引来帮助特定的查询.检查自己的sql语句,为那些频繁在w ...

  5. 时间字段 oracle 经验 设计,数据库设计与优化

    一.设计技巧 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即 ...

  6. 2数据库表增加一个字段_14个实用的数据库设计技巧!

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体. 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...

  7. 数据库设计技巧系列(二)——设计表和字段

    设计表和字段 1. 检查各种变化 我在设计数据库的时候会考虑到哪些数据字段将来可能会发生变更.比方说,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等).所以,在建立系统存储客户信息时,我倾向 ...

  8. 基础九大字段改造,解除强依赖数据库设计

    实现视频如下 基础九大字段改造,解除强依赖数据库设计 一直以来,笔者对底层的九大基础字段并不是很满意,从数据写入至字段定义均有瑕疵. 此间,笔者决心改掉这一直以来的错误设计,将其精简为八大常用字段. ...

  9. 数据库设计标识字段--转载

    2019独角兽企业重金招聘Python工程师标准>>> 最近公司项目在重构,在设计数据库时,发现原来的表结构类型字段太多,有的表中高达十几个,于是决定去掉这些类型字段,在查找资料时, ...

最新文章

  1. 除了负载均衡,Nginx 还可以做很多:限流、缓存、黑白名单等
  2. KMP算法的实现以及改进
  3. android 用命令行打包生成 apk
  4. cloud foundry_实际的Reactor操作–检索Cloud Foundry应用程序的详细信息
  5. Golang tcp转发 remoteAddr错误
  6. 基于IP的H.264关键技术
  7. oracle迁移父子数据
  8. 第七章:nginx的rewrite规则详解
  9. A 股 30 年终迎教育公司 IPO,“旧金山”投资人浮出水面
  10. 专注是最好的修行,一个80后IT从业者14年的成长与感悟
  11. Python基础知识回顾及scrapy框架爬虫基础
  12. ios10 上下黑边问题
  13. PO 审批 PO Release
  14. 桌面上的计算机图标的功能是什么,桌面上计算机图标不见了的解决方法教程
  15. Matlab将散点绘制为平滑曲线的两种方法
  16. u盘kali linux淘宝,爱了!3 个受欢迎的 U盘Linux 发行版|Linux 中国
  17. 【计算机网络相关的面试题】TCPUDPHTTPHTTPS,面试常客
  18. jav 中 this和super
  19. Optisystem15总是运行当中卡死,点击任何地方没反应。解决方法。
  20. ose的网络linux,Ubuntu8.04下制作iso及virtualbox-ose使用

热门文章

  1. android无感知拍照github,装X指南之通过 VirtualApp 实现免 Root 权限 Hook
  2. 华为od统一考试B卷【We Are A Team】C++ 实现
  3. 英汉对照名言隽语(三)
  4. Matlab绘图-很详细,很全面
  5. java socket 循环读取_java socket tcp(服务器循环检测)
  6. 开发环境 - pip install cv2下载失败的解决办法
  7. NowcoderGirl编程比赛(三)
  8. LEX自动生成词法分析器
  9. Layer 打开新页面
  10. LaTeX插入参考文献