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

【现象描述】

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

【原因分析】

这似乎可以叫做防患于未然,等到需要的时候,就不需在表中增加新的字段了

而且这样做的话,一个表的数据应该会被存储在相邻的物理空间中,这对于性能也是有好处的。

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

【问题所在】

这样的做法对于项目会导致很多问题,而且原先想要解决的问题并不一定能够解决:

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

问题二:由于命名的特点,备用字段无法在字段名上体现其意义,不规范,后期维护麻烦。如果没有完善的文档管理流程,用不了多久(可能也就是两三年),就没有人能够说清楚到底哪个字段代表的是什么意义了。

问题三:增加了这些备用字段就真的会够用吗?不一定,因为我们只是每个类型的字段留出几个备用,如果数量超过,或者要使用特殊的、不常用的类型的时候,还是需要增加新的字段。而且如果没有完善的管理,谁又能说清楚倒底哪个字段已经被使用,哪个字段还可以使用呢?到时候还不是要增加新的字段。

【解决方案】

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

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

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

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

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

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

mysql 预留一个自定义字段_mysql-预留字段相关推荐

  1. django mysql 名称_Django 自定义表名和字段名

    通过db_table和db_column自定义数据表名和字段名 假如你的数据库里已经有了一张数据表,且该表包含多个字段,你希望通过Django直接访问该数据表的各个字段而不是重新建立新表,你这时可以通 ...

  2. mysql判断域为空_MySQL EXPLAIN 字段说明

    id 查询或关联查询的顺序. 如果没有子查询且只有一个查询,则为一个常数 1,表示第一步: 如果有子查询,则子查询为 1,父查询为 2: 相同的 id 查询顺序为自上而下: 如果有子查询,不同 id ...

  3. mysql判断字段是否存在不存在添加字段_mysql 新增字段时判断字段是否存在

    1.问题引出 为了保证数据的正确性,代码的健壮性,我们必须对一些边界条件做一个判断,所以才会把修改表结构搞得如此复杂. mysql 新增字段时判断字段是否存在,本来是一个很小的问题,因为以前都是使用 ...

  4. mysql数据库怎样添加字段_MySQL添加字段和修改字段的方法

    MySQL添加字段的方法并不复杂,下面将为您详细介绍MySQL添加字段和修改字段等操作的实现方法,希望对您学习MySQL添加字段方面会有所帮助. 1.登录数据库 >mysql -u root - ...

  5. mysql表设计 列命名_MYSQL数据库字段命名及设计规范

    1.设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余.标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能.扩展性和数据完整性方面达到了最好平衡 ...

  6. mysql 中 一个汉字吗_MySQL 中一个汉字占多少存储?

    MySQL 中一个汉字占多少存储? 1. 一个汉字占多少长度与编码有关: UTF8: 一个汉字 = 3 个字节 GBK: 一个汉字 = 2 个字节 2.varchar(n)能存储几个汉字? varch ...

  7. mysql 预留一个自定义字段_MySQL 按指定字段自定义列表排序 | DevOps

    问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同): SELECT * FROM `MyTable` WHERE `id` IN (1, 7, 3, 5) ...

  8. mysql按逗号拼接起来_MySQL ----- 计算字段(Trim,Concat,as)(九)

    存储在数据库表中的数据一般不是应用程序所需要的格式: 一种是从数据库中检索出转换.计算或格式化过的数据 另一种是将检索出数据在客户机应用程序或报告程序中重新格式化 这里当然建议使用第一种,借助计算字段 ...

  9. mysql 唯一约束 多字段_mysql多字段唯一约束

    MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值.唯一约束可以确保一列或者几列不出现重复值. 在创建表时设置唯一约束 在定义完列之后直接使用 UNIQUE 关键字指 ...

最新文章

  1. linux 查看库的安装信息
  2. ORACLE时间函数(SYSDATE)深入理解
  3. windows 常用工具
  4. html请求接口_通用网关接口-FastCGI介绍
  5. 【渝粤教育】国家开放大学2019年春季 2712园艺基础 参考试题
  6. 电脑一族,打电脑时候的健康的坐姿
  7. 计算机软件乘除,基于单片机的智能计算机程序 可以实现加减乘除运算
  8. Leetcode每日一题:203.remove-linked-list-elements(移除链表元素)
  9. BZOJ 4094 USACO 2013 Dec. Optimal Milking
  10. c语言有趣的编程代码,一个有趣的小程序
  11. linux后台进程管理工具supervisor
  12. 2005-2020POI数据 高德POI数据 高德信息点数据 百度POI数据分析下载
  13. Android Studio中AndroidManifest.xml文件中application标签
  14. 计算机中的逻辑与或非,与或非运算(与或非逻辑运算口诀)
  15. R/ggplot2保存图片中文字体至PDF——showtext包一文清除所有障碍
  16. 冰点文库的替代品【Wenku Doc Downloader】用于下载各种文库的材料
  17. Mac下adb调试华为C8815问题
  18. Jodd-Java的瑞士军刀 demo
  19. 【Android 电量优化】电量优化 ( 唤醒锁定 | 使用 WeakLock 保持服务唤醒 | 屏幕唤醒 )
  20. RapidScada免费开源Scada组态软件系列教程4-各模块详细介绍

热门文章

  1. 服务拆分-案例Demo
  2. 锁的释放流程-ReentrantLock.unlock
  3. 常用的函数式接口_Function接口
  4. AOP日志-前置通知操作
  5. SpringBoot编写HelloWorld-new
  6. mysql二进制日志格式对复制的影响
  7. 基本数据类型和包装类型
  8. ZooKeeper快速入门
  9. Spring Cloud异常
  10. java reader类 实例_Java Reader ready()用法及代码示例