备用字段,也称 预留字段 。
相关描述:
在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用。
比方说,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓名(Name)、性别(Sex)、出生年月日 (birthday)等等。大功告成之后,我忽然想到,将来系统中应该还会有很多其它与人相关的内容吧,比方说毕业院校,再比方说工作单位等等,尽管现在根本不需要填写,以后可能还是会用到的吧。好,那就加入5个varchar2型的字段,分别叫做Text1、Text2……Text5,然后又想到, 应该还有一些日期型的字段需要备用,就又建立了三个date型的字段,分别起名叫做date1、date2、date3,……
可以看到,在这个数据表中,存在着大量暂时无用的字段,我们可以称之为备用字段。
那它们的作用是什么呢?防患于未然!等到时候需要的时候,就不需要在表中增加新的字段了,而且这样做的话,一个表的数据应该会被存储在相邻的物理空间中,这对于性能也是有好处的。
另外,在一些古老的数据库中,如果改变数据库的定义(包括增加字段、改变字段的类型、删除字段等等),那么其中所有的数据就会丢失,所以这项工作非常麻烦(我们需要先建立临时表,将数据备份出来,然后创建新表,将数据导入其中,最后再删除原来的表)。
但是备用字段也不能滥用,“过度设计”可能会出现一些问题:
问题一:增加大量备用字段,若字段不为空,必定会浪费很多空间,尽管其中可能都没有具体的数据,但是仅仅是空字段也会占据一定的空间的。
所以出现了一些争论
反:
数据库设置预留字段无法在字段名上体现其意义,不规范,后期维护麻烦。在需要增加字段的时候如果直接addcolumn,也不会有太大工作,但能保证数据库字段的规范。虽然在启用备用字段的时候可以文档说明,但在POJO上对应其属性为attribute1,attribute2等,代码的可读性不强。而且,预留字段全部统一varchar,也不太合适。
加了预留字段会影响性能
预留字段还是会占用空间
正:
添加预留字段已经确定不会影响性能,因为其实预留字段未启用前在数据库里面都是一个null值。
持久层的设计,数据库表结构不应轻易变更。因此应设置备用字段。启用备用字段后,只修改代码,在代码中增加注释和并文档说明即可,不需要改动数据库结构,更方便。
如果没有备用字段,如果后期要加字段,用addcolumn的方法会改变原先的数据库存储结构,造成数据移动,移动需要时间,而且会移动到其他数据块。也就是说addcolumn会影响数据库性能,造成一些不可预知的错误。
按需设计:
在经过详细有效的分析之后,在数据表中只放置必要的字段,而不要留出大量的备用字段。当需要增加相关的信息时,要具体情况具体分析。
如果数量很少,而且信息的性质与原表密切相关,那么就可以直接在原表上增加字段,并将相关的数据更新进去。
如果数量较大,或者并非是原表对象至关重要的属性,那么就可以新增一个表,然后通过键值连接起来。
对于表的数据的存储位置所导致的性能问题,我们可以通过在特定时间对数据库的数据进行重组来解决,而这项工作对于长期运行的数据库来说,也是需要定期进行的。
共同学习,共同进步,若有补充,欢迎指出,谢谢!