文档章节

数据库的通用字段设计和思考优化

之渊
 之渊
发布于 2017/07/12 09:41
字数 1279
阅读 203
收藏 0

不知道 大家的 数据库设计的时候,通用字段是怎么设计的。。。 但是我待过了 几家公司了。。。 大型一点的项目, 一般都有 这个几个通用字段:

createTime	创建时间	date	
creatorId	创建人编号	bigint		
creator	创建人	varchar		
updateTime	更新时间	date		
updatorId	更新人编号	bigint		
updator	更新人	varchar		
del	是否删除	tinyint		0为正常,1为删除

这几个通用字段,一般是 架构师,或者技术老大提出来的, 一般人无权 抗议。。。 其实呢,现在到了 我来设计数据库的时候,有这个权利 重新设计 的时候,我 这个时候 就会结合 项目经验和实际情况出发来 讨论和优化一下:

1,为什么这么多通用字段?

我觉得是 为了 出了问题的时候,好排查问题,而且 其他领导或者 老大问的时候,也可以 拿出 数据出来,这个就是证据, 特别是 大问题的时候, 可以 把 锅丢给其他人,,,至少问题不是系统造成的,,,(而实际情况,,,很少,而且一般没用,人家只会说你的系统体验差,,云云)

2, 简化,优化的思考

一个字段一个字段来吧。。。

createTime 创建时间 date updateTime 更新时间 date

这两个字段肯定需要的, 特别是 按实际出现的时候,和后期数据统计的时候 用到,,,就是一时用不到,,随着 需求的不断变化,很可能就用到了。。出了什么,也是可以通过时间来进行 排查的,,, 这两个 字段无可争议。

接下来是 创建者,和更新者的了:

creatorId 创建人编号 bigint creator 创建人 varchar updatorId 更新人编号 bigint updator 更新人 varchar

其实 在项目开发时间情况来说, 这四个四段,,,99% 的几率是 用不到的,或者无用的,或者有时候就是为 空的,,,甚至一点意义和价值都没有的。。。

1, 如果 有些表真的需要,那么就可以在 那个表上面加上去, 把他们作为 通用的字段,是 没有什么意义的

2, 从数据的角度来看,,, 加了四个四段,,, 对于 查询来说肯定也有影响效率了,,,从开发角度来看,也很可能影响开发的 效率,,,

3, 我刚开始接触到 这样的通用字段的时候,觉得 考虑挺周期的,挺好的,,,可是 如果真的是 自己开发项目的时候,就感觉特别的想吐血了。。。而且 关键还用不上啊。

4, 因此我 强烈建议 把 4个通用字段干掉,,,除非表真的用到了。。。 而且可以把 这几个字段 提取出来放入一个 日志表里面,, 增加,更新的时候 使用 AOP 来进行 写入 日志统计即可。

5, 看项目了,,特别是一些中小项目,,,完全没必要,,,一些老大看别人这样设计,自己也要这样设计,,还自以为是很 完美的。 特别是 项目开发时间比较赶, 如果是外包项目更加没有必要了,就应该 开发重点,这样的小细节算了,,,

6, 为了开发效率,,,和 软件的 运行速度,,,这四个字段,,,不要了。。。

3,是否应该逻辑删除

del 是否删除 tinyint 0为正常,1为删除

逻辑删除, 这个自动 一开始 看起来觉得很有必要,,,其实 思思深入思考觉得没有必要的。

1, 第一 技术老大说要,,,因为他已经不需要怎么写 CRUD的,他只负责核心代码,,似乎觉得影响不大,,,其实从开发角度来看,,,特别影响开发效率,,特别是 写 查询 语句的时候,都得排查 del 的字段值,,,特别的麻烦,,而且容易出现 漏了将逻辑 删除的数据排查的情况, 反而增加的 风险和问题的发生。。。 如果某些特别重要的表,可以加,而不是 每个表都加,,,特别是恶心。。。还怎么愉快的写代码?

2, 设置逻辑删除, 只有是为了防止 关键的 数据不小心 被删除了。 而 特别是 中小项目来说,,这样的情况 ,要恢复的情况 ,,,,很少很少,, 而且 是有数据库备份的,,,就算真的 逻辑删除了,,,一般也很少 有说 需要恢复过来的情况,,这样的情况 我是没有遇到过的。。。

总结

数据库的 通用字段: 只是 创建时间, 和更新时间 有必要,,其他都可以没有必要 。

为了 统一规范 ,

如果是 表字段里面需要 状态 字段的话, 首先 命名 为 bizStatus 业务状态 。 如果还有 其他业务状态,,就 以 bizStatus 为 前缀 , 比如 日志状态 bizStatusLog
这样 我们看表结构的时候,如果是 业务状态字段 一眼就知道了。

© 著作权归作者所有

之渊
粉丝 14
博文 649
码字总数 200420
作品 0
佛山
程序员
私信 提问
DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则

简要介绍 在我们进行数据库设计的时候,大家都会考虑到数据表主键的设计,而可能没有人去关注记录唯一性字段设计,或者说,很多开发人员把这两种混合在一起处理,即就是表记录的唯一性与主键...

agilelab
2010/10/15
0
0
MySQL 性能优化,优化设计及设计原则解读

MySQL性能优化的目的 如何合理的设计数据库? 什么样的数据库设计才能给后期DBA优化提供基石? 数据库设计与程序设计的差异? 数据库设计早期优化 1. 关系明确(理清表之间的关系,可以通过冗...

Java填坑之路
2018/08/22
0
0
数据库杂谈之:如何优雅的进行表结构设计

数据库表结构设计作为后端软件开发不可或缺的一环,是每个后端工程师都会经历的过程。笔者也多次经历过这样的过程,也尝试过多种不同的设计方,也从一些优秀的框架中学到不少,但并没有发现相...

鱼煎
2016/05/07
219
2
程序员数据库访问的优化的一些思考

一、数据库访问优化的五个法则 在实际开发,我们主要是需要对SQL语句进行优化,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?根据木桶原理可以知道,最慢的设备...

BravoZu
2014/03/04
186
0
MySql中varchar和varchar的区别

看了新公司的数据库设计,有些问题思考了一下,写这篇文章也就记录这个问题的思考过程。 首先从占用空间进行比较,varchar(10) 声明10个字节,数据保存时额外一个字节的长度前缀;varchar(1...

1017735882240104
2018/09/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
11
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部