mysql中的预留字段_数据库设计误区:备用字段 / 保留字段 / 预留字段
数据库设计误区:备用字段 / 保留字段 / 预留字段
【现象描述】
在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用。
比方说,我设计了一个人员表(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中的预留字段_数据库设计误区:备用字段 / 保留字段 / 预留字段相关推荐
- mysql 备用字段_数据库设计之备用字段
备用字段,也称 预留字段 . 相关描述: 在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用. 举例说明,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓 ...
- MYSQL中什么是规范化_数据库设计 - 什么是规范化(或规范化)?
规范化基本上是设计数据库模式,以避免重复和冗余数据. 如果某些数据在数据库中的多个位置重复,则存在在一个位置而不是另一个位置更新的风险,从而导致数据损坏. 从正常形式到正常形式有许多归一化水平. 每种 ...
- mysql视图和中间表_数据库设计中的14个技巧
时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...
- mysql 设计动态字段_数据库设计中动态列的设计方法
问题提出: 在进行数据库开发过程中,我们往往会碰到这种情形: 如在劳资计算中,对每个人有很多薪酬项目需要汇总计算出工资,如基本工资,计件工资,计时工资,奖金,补贴,代扣等等,但我们在建表的过程中既不能 ...
- mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...
数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束 数据库:唯一性约束 所谓唯一性约束(unique constraint)不过是数据表内替代 ...
- MySQL中地点的数据类型_数据库中地址的数据类型
数据库中用什么数据类型存储电话号码比较合理? 因为涉及到固定电话,所以一般用varchar2 ,单纯手机号码的话可以用number. 数据类型分类: 数字型- Integer(整型).Long(长整型 ...
- mysql 中default什么意思_数据库中default的用法正确使用方法
数据库中default的用法的正确使用方法你清楚吗,今天学习啦小编就跟大家详细介绍下数据库中default的用法,希望能帮到大家. 数据库中default的用法的用法 SQL Server数据库def ...
- mysql中distinct是什么_数据库中 DISTINCT 的作用是什么?
展开全部 SQL数据库中, DISTINCT表示去掉重复的行,作用是针对包含重复值的数据表,用于返回唯一不同的值.语法是636f707932313133353236313431303231363533 ...
- mysql中 视图的优缺点_数据库视图优缺点分析
视图作用是什么 所谓视图(View)其实是执行查询语句后得到的结果,但这个查询结果可以仿真成数据表来使用,所以有人也称它为"虚拟数据表",视图在操作上和数据表没有什么区别,但两者的 ...
- mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量
sqlServer2012(936 简体中文GBK )为例: 例如: varchar(10),只能存储10个英文字符或数字,也只能存储5个汉字: char(10),只能存储10个英文字符或数字,也只能 ...
最新文章
- Spring学习笔记:2(IOC装配Bean之xml方式)
- ubuntu15.04 TLS
- python数据处理实例-Python数据分析实例操作
- python的mysql模块_python使用MySQLdb模块连接MySQL
- 第19天学习Java的笔记-String字符串
- Ubuntu安装 AndroidStudio
- ajax的url可以用变量吗6,如何使用变量设置 Ajax Url
- 计算机科学概论(2)数据的操控和程序的执行
- 逆向调试雷电思路总结
- 支付宝双11狂欢幕后的女程序员:服务全球12亿人,每天和不法分子打攻防战
- androidStudio使用卡顿
- 管理系统中的计算机应用数据库系统,自考管理系统中的计算机应用重点: 数据库系统(1)...
- PAT—1082 射击比赛(20)
- 第三章:数组[4Arrays]
- win10内置ubuntu, 启动时提示“指定的网络名不再可用”无法启动解决办法
- 【2019年5月6日】指数估值排名
- SQL注入-显错注入
- openpyxl 数字格式处理
- 你了解过软件确认测试吗?可进行确认测试的软件测评中心
- 关于简书签约作者饱醉豚违反简书社区原则的公示说明
热门文章
- java 生成jni_Javah生成JNI头文件
- SSM框架原理流程及使用方法
- 最新版 INSPINIA IN+ - WebApp Admin Theme v2.7.1,包含asp.net MVC5示例代码,做管理系统最佳的选择。...
- 阿里巴巴: 章文嵩评价左耳朵耗子
- Halcon教程六:为什么要二值化
- YOLOv2论文理解
- java将date类型转成yyyymmdd_java中的Date怎么转换成YYYYMMDD形式的
- 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
- Java ftp 上传文件名乱码
- 医学统计学傻瓜教程(2019版)*