为了账号安全,请及时绑定邮箱和手机立即绑定

如下背景:Java Web项目设计数据库时是否需要在表中加备用字段?

如下背景:Java Web项目设计数据库时是否需要在表中加备用字段?

摇曳的蔷薇 2023-04-15 13:09:17
背景:最近在做一个Java Web项目,SSH框架,MySQL数据库。项目的数据库没有设备用字段。在开发过程中,因数据库设计者未考虑周到,业务实体有一个属性没有对应的字段,因此需要在数据库表加一个字段。又由于此字段要求不可为空,并且在开发阶段,测试数据不多。于是我在drop掉了原来的表,增加了一个字段再重新建了一张表。按照通常的做法,设计数据库都会在后面加几个类型为varchar的预留字段,也没有具体思考过为什么要这么做,这么做的好处是什么。在遇到这个问题之后引起我思考:预留字段这个通用的做法是否能减少开发阶段由于考虑不周到,或后续维护阶段因为需求变更或者扩展改造而需要增加字段而造成的麻烦。就此与同事进行了讨论,大家意见不一,以下是正反方的一些意见和看法。希望大家能根据以往的项目经验和设计原则给出一些解答,怎样的设计能确保数据库健壮,可扩展。反方观点:不需要原因:数据库设置备用字段无法在字段名上体现其意义,不规范,后期维护麻烦。在需要增加字段的时候如果直接add column,也不会有太大工作,但能保证数据库字段的规范。虽然在启用备用字段的时候可以文档说明,但在POJO上对应其属性为attribute1,attribute2等,代码的可读性不强。而且,预留字段全部统一varchar,也不太合适。另外有人说加了预留字段会影响性能(这点已经确定不会影响性能,因为其实预留字段未启用前在数据库里面都是一个null值)。我的观点:需要原因:持久层的设计,数据库表结构不应轻易变更。因此应设置备用字段。启用备用字段后,只修改代码,在代码中增加注释和并文档说明即可,不需要改动数据库结构,更方便。我对反方的反驳:就这个问题我咨询了一个做DBA的朋友,据他所说:如果没有备用字段,如果后期要加字段,用add column的方法会改变原先的数据库存储结构,造成数据移动,移动需要时间,而且会移动到其他数据块。(很专业的数据库知识,不是很懂)总之意思是add column会影响数据库性能,造成一些不可预知的错误。一个疑问:假如项目已经在实施阶段,数据库里存储的已经是一些生产数据,不可轻易删除,但需要加的字段是不可为空的字段,在有备用字段和没有备用字段这两种情况下,分别应该怎么处理那些前期已有的数据。
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

建议添加,对于反方提到的问题,只要代码和文档规范是可以避免这样的问题的,即使遇到这样的问题,也比修改表名带来的危险要小,除了要修改代码、存储过程、配置文件中的表名,还要考虑数据的迁移等问题,如此多的改动难免会出现这样那样的问题,因此保证系统的稳定性来看,携带几个扩展字段为了后续使用也无妨。

查看完整回答
反对 回复 2023-04-18
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

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

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

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

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


查看完整回答
反对 回复 2023-04-18
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信