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

【现象描述】

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

【原因分析】

大家应该已经看出问题了,在这个数据表中存在大量暂时无用的字段,我们可以称之为备用字段,它们的作用是什么呢?就是以防万一,防备可能的情况。
这似乎可以叫做防患于未然,等到需要的时候,就不需在表中增加新的字段了,而且这样做的话,一个表的数据应该会被存储在相邻的物理空间中,这对于性能也是有好处的。
另外的原因就是,在古老的数据库中,如果改变数据库的定义(包括增加字段、改变字段的类型、删除字段等等),那么其中所有的数据就会丢失,所以这项工作非常麻烦,我们需要先建立临时表,将数据备份出来,然后创建新表,将数据导入其中,最后再删除原来的表。

【问题所在】

这样的做法对于项目会导致很多问题,而且原先想要解决的问题并不一定能够解决,不信的话,请往下看。
问题一:增加大量备用字段,必定会浪费很多空间,尽管其中可能都没有具体的数据,但是仅仅是空字段也会占据一定的空间的。
问题二:由于命名的特点,如果没有完善的文档管理流程,用不了多久(可能也就是两三年),就没有人能够说清楚到底哪个字段代表的是什么意义了。就算有文档管理,这些管理工作也会比较麻烦,而且在每次使用的时候都需要申请,还有可能会出现冲突的情况。
问题三:增加了这些备用字段就真的会够用吗?不一定,因为我们只是每个类型的字段留出几个备用,如果数量超过,或者要使用特殊的、不常用的类型的时候,还是需要增加新的字段。比方说在上述的Person表中,我们要存储照片,那么可能就要增加一个blob类型的photo字段,这在初期设计的时候可不一定会留出这样的备用字段。而且如果没有完善的管理,谁又能说清楚倒底哪个字段已经被使用,哪个字段还可以使用呢?到时候还不是要增加新的字段。

【解决方案】

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

  1. 如果数量很少,而且信息的性质与原表密切相关,那么就可以直接在原表上增加字段,并将相关的数据更新进去;
  2. 如果数量较大,或者并非是原表对象至关重要的属性,那么就可以新增一个表,然后通过键值连接起来;
  3. 对于表的数据的存储位置所导致的性能问题,我们可以通过在特定时间对数据库的数据进行重组来解决,而这项工作对于长期运行的数据库来说,也是需要定期进行的。

作者:iw1210
来源:优快云
原文:https://blog.youkuaiyun.com/iw1210/article/details/44752771
版权声明:本文为博主原创文章,转载请附上博文链接!

<think>嗯,用户让我解释一下这个命令:export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:~/bin。首先,我需要理解这个命令的作用。PATH环境变量是系统用来查找可执行文件的路径列表,当用户在终端输入命令时,系统会按照PATH中的顺序搜索这些目录。 用户可能是在设置自己的PATH变量,或者在遇到命令找不到的问题时尝试修改PATH。需要注意这个命令是覆盖现有的PATH,而不是追加,所以可能导致一些问题。比如,如果原来的PATH有其他重要路径,直接这样设置会丢失它们。这时候应该用export PATH=$PATH:/new/path来追加。 接下来,分解每个路径的作用: - /usr/local/bin:通常用户自己安装的软件,比如用brew安装的。 - /bin和/usr/bin:系统自带的命令,比如ls、cp等。 - /sbin和/usr/sbin:系统管理命令,通常需要sudo权限。 - /usr/local/sbin:可能是用户安装的系统管理工具。 - ~/bin:用户个人的脚本目录,方便存放自己的可执行文件。 顺序很重要,系统会按从左到右的顺序查找。如果用户把~/bin放在前面,那么当有同名命令时,会优先使用自己目录下的版本,而不是系统的。这可能是有意为之,也可能导致意外行为。 需要提醒用户这个命令是临时的,只在当前shell会话有效。如果想永久生效,需要写入配置文件如.bashrc或.zshrc。另外,覆盖PATH可能导致其他软件找不到,所以正确做法是追加而不是替换,除非用户明确知道自己在做什么。 用户可能的误区是直接覆盖PATH而不是追加,或者路径顺序安排不当。需要指出这些潜在问题,并给出正确的方法。同时,用户可能在使用不同shell,所以配置文件的位置也不同,比如Bash和Zsh的区别。</think>我们来逐步解释并理解这条命令的作用和注意事项: 1. **命令结构分析** `export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:~/bin` 2. **核心作用** - 重新定义系统的 `PATH` 环境变量 - 定义当用户在终端输入命令时,系统查找可执行文件的**路径顺序** 3. **路径解析(从左到右优先级递减)** | 路径 | 典型用途 | |--------------------|----------------------------------| | `/usr/local/bin` | 用户手动安装的软件(如 Homebrew) | | `/bin` | 系统基础命令(如 `ls`, `cp`) | | `/usr/bin` | 系统常规命令(如 `gcc`, `python`) | | `/usr/local/sbin` | 管理员手动安装的管理工具 | | `/usr/sbin` | 系统管理命令(需 root 权限) | | `/sbin` | 系统关键管理工具(如 `fdisk`) | | `~/bin` | 用户个人脚本/程序(自定义工具) | 4. **关键注意事项** - ⚠️ **覆盖式修改**:此命令会完全替换原有 `PATH`(而非追加),可能导致已安装软件不可用 - ✅ 推荐的安全追加方式: ```bash export PATH=$PATH:/new/path # 将新路径追加到现有 PATH 末尾 ``` - ⏳ **临时生效**:仅在当前终端会话有效,退出后失效 - 🔧 永久生效方法:将命令写入 shell 配置文件 ```bash # 对于 Bash echo 'export PATH=/usr/local/bin:/bin:...' >> ~/.bashrc # 对于 Zsh echo 'export PATH=/usr/local/bin:/bin:...' >> ~/.zshrc ``` 5. **典型使用场景** - 调试环境变量问题 - 优先使用自定义安装的软件版本(如将 `/usr/local/bin` 放在系统路径前) - 临时添加个人工具目录(如 `~/bin`) 6. **潜在风险** - 路径顺序错误可能导致命令冲突 - 缺少关键路径(如 `/usr/bin`)会造成系统命令无法识别 - 路径中包含非安全目录可能引发安全风险 建议通过 `echo $PATH` 查看当前路径列表,使用 `which 命令名` 验证命令查找优先级。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值