数据库设计误区:备用字段 / 保留字段 / 预留字段

【现象描述】

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

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

【原因分析】

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

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

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

【问题所在】

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

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

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

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

【解决方案】

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

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

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

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

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

---------------------

作者:iw1210

来源:CSDN

原文:https://blog.csdn.net/iw1210/article/details/44752771

版权声明:本文为博主原创文章,转载请附上博文链接!

mysql中的预留字段_数据库设计误区:备用字段 / 保留字段 / 预留字段相关推荐

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

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

  2. MYSQL中什么是规范化_数据库设计 - 什么是规范化(或规范化)?

    规范化基本上是设计数据库模式,以避免重复和冗余数据. 如果某些数据在数据库中的多个位置重复,则存在在一个位置而不是另一个位置更新的风险,从而导致数据损坏. 从正常形式到正常形式有许多归一化水平. 每种 ...

  3. mysql视图和中间表_数据库设计中的14个技巧

    时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

  4. mysql 设计动态字段_数据库设计中动态列的设计方法

    问题提出: 在进行数据库开发过程中,我们往往会碰到这种情形: 如在劳资计算中,对每个人有很多薪酬项目需要汇总计算出工资,如基本工资,计件工资,计时工资,奖金,补贴,代扣等等,但我们在建表的过程中既不能 ...

  5. mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...

    数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束 数据库:唯一性约束 所谓唯一性约束(unique constraint)不过是数据表内替代 ...

  6. MySQL中地点的数据类型_数据库中地址的数据类型

    数据库中用什么数据类型存储电话号码比较合理? 因为涉及到固定电话,所以一般用varchar2 ,单纯手机号码的话可以用number. 数据类型分类: 数字型- Integer(整型).Long(长整型 ...

  7. mysql 中default什么意思_数据库中default的用法正确使用方法

    数据库中default的用法的正确使用方法你清楚吗,今天学习啦小编就跟大家详细介绍下数据库中default的用法,希望能帮到大家. 数据库中default的用法的用法 SQL Server数据库def ...

  8. mysql中distinct是什么_数据库中 DISTINCT 的作用是什么?

    展开全部 SQL数据库中, DISTINCT表示去掉重复的行,作用是针对包含重复值的数据表,用于返回唯一不同的值.语法是636f707932313133353236313431303231363533 ...

  9. mysql中 视图的优缺点_数据库视图优缺点分析

    视图作用是什么 所谓视图(View)其实是执行查询语句后得到的结果,但这个查询结果可以仿真成数据表来使用,所以有人也称它为"虚拟数据表",视图在操作上和数据表没有什么区别,但两者的 ...

  10. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量

    sqlServer2012(936 简体中文GBK )为例: 例如: varchar(10),只能存储10个英文字符或数字,也只能存储5个汉字: char(10),只能存储10个英文字符或数字,也只能 ...

最新文章

  1. Spring学习笔记:2(IOC装配Bean之xml方式)
  2. ubuntu15.04 TLS
  3. python数据处理实例-Python数据分析实例操作
  4. python的mysql模块_python使用MySQLdb模块连接MySQL
  5. 第19天学习Java的笔记-String字符串
  6. Ubuntu安装 AndroidStudio
  7. ajax的url可以用变量吗6,如何使用变量设置 Ajax Url
  8. 计算机科学概论(2)数据的操控和程序的执行
  9. 逆向调试雷电思路总结
  10. 支付宝双11狂欢幕后的女程序员:服务全球12亿人,每天和不法分子打攻防战
  11. androidStudio使用卡顿
  12. 管理系统中的计算机应用数据库系统,自考管理系统中的计算机应用重点: 数据库系统(1)...
  13. PAT—1082 射击比赛(20)
  14. 第三章:数组[4Arrays]
  15. win10内置ubuntu, 启动时提示“指定的网络名不再可用”无法启动解决办法
  16. 【2019年5月6日】指数估值排名
  17. SQL注入-显错注入
  18. openpyxl 数字格式处理
  19. 你了解过软件确认测试吗?可进行确认测试的软件测评中心
  20. 关于简书签约作者饱醉豚违反简书社区原则的公示说明

热门文章

  1. java 生成jni_Javah生成JNI头文件
  2. SSM框架原理流程及使用方法
  3. 最新版 INSPINIA IN+ - WebApp Admin Theme v2.7.1,包含asp.net MVC5示例代码,做管理系统最佳的选择。...
  4. 阿里巴巴: 章文嵩评价左耳朵耗子
  5. Halcon教程六:为什么要二值化
  6. YOLOv2论文理解
  7. java将date类型转成yyyymmdd_java中的Date怎么转换成YYYYMMDD形式的
  8. 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
  9. Java ftp 上传文件名乱码
  10. 医学统计学傻瓜教程(2019版)*