因为把公司 Mysql 一堆带 null 字段优化非空带默认值被骂

2021-04-15 11:08:42 +08:00
 AhogeK

刚来一家新公司注意到数据库里新建的表有一堆 null 值的字段,想数据量大会影响索引,项目也刚开我就改了下,然后就被训了,就说别动数据库,非不非空让前端去判断(我就想是前端判断啊,但后端不也要校验,数据库只是优化查询)但我没之声 而且好多字段都是中英混用,可难受死我这强迫症了 比如父 id fid 组织类型 orglx 行政区划代码 xzqh 行政区域编码却是 adcode [捂脸.jpg]

12166 次点击
所在节点    问与答
107 条回复
msg7086
2021-04-16 01:04:04 +08:00
NULL 有 NULL 的用处,空值就空值的用处,本来就是不能随便替换的。
至于你遇到的问题,这我也不太好说,但是数据库结构更改还是要做 Code review 的吧。
Review 的时候说清楚就行了。被骂不应该。
fuermosi777
2021-04-16 01:04:46 +08:00
@wuyazuofeiji 同意 20 楼的意见。
msg7086
2021-04-16 01:05:11 +08:00
为避免歧义:上述空值指的是空白的默认值,比如空字符串,数字 0 等。
stabc
2021-04-16 01:33:22 +08:00
问题不是改不改默认值,而是你有没有事先和团队沟通。
iseki
2021-04-16 07:28:41 +08:00
数据库给你留了 null 这个功能就是拿来用的,不能不分青红皂白一律 not null 也不能全都 null
JerryV2
2021-04-16 08:12:46 +08:00
别手欠,你觉得需要修改也得找负责人沟通好再改,自己直接改了这不找骂么
2379920898
2021-04-16 08:48:48 +08:00
被骂是怎么嘛?我是接受不了。大家好歹都是大学毕业
2379920898
2021-04-16 08:50:02 +08:00
他判断 not null 出错。。应该和你去沟通啊? 为什么会被骂呢??你们沟通就是挨骂?? 那以后业务问题,不更得挨骂了。赶紧跑路吧。。好的上司也很重要。这垃圾上司不要也罢
penll
2021-04-16 09:03:20 +08:00
为了省这点空间,还不如不要。
当统一数据库设计不为 null 的规范后,可以给开发人员方便许多
dongtingyue
2021-04-16 09:08:29 +08:00
半桶水晃荡的典型例子,吸取经验不要不讨论就做会影响别的决定。
RangerWolf
2021-04-16 09:27:52 +08:00
自作孽
Narcissu5
2021-04-16 09:33:30 +08:00
@wakzz 看场景,如果你的类型是 tinyint,那么这一个位就是 12.5%的额外存储,这可不是可以忽略不计的量。

很多时候性能就是这里一点那里一点扣下来的
jinhan13789991
2021-04-16 09:47:40 +08:00
我们都是前端做输入校验,出了问题后台都怪我们前端,谁让他是领导呢。
就当是磨练自己了
lsdvincent
2021-04-16 09:52:45 +08:00
我以前也是全部不允许为 null 必须要有默认值,空字符串也行,但是这样验证就很麻烦,字段变化大,很蛋疼,后来不确定的东西全部允许 null,好极了
tairan2006
2021-04-16 09:56:46 +08:00
null 对性能其实没啥影响,null 主要是有坑

楼主你的问题在于没和别人讨论就改已有的东西,这样不太好
Actrace
2021-04-16 09:58:10 +08:00
@tairan2006 赞同,看来楼主还不适应团队开发。需要多多磨合。
no1xsyzy
2021-04-16 10:17:43 +08:00
NULL 和 NOT NULL 不是拿来表示字段的必须性的吗?
咋还跟性能扯上了?

段子:
> 文艺程序员尝试把代码写得别人看起来方便,普通程序员尝试把代码写得自己看起来方便,二逼程序员尝试把代码写得机器看起来方便。
> 半年以后,文艺程序员看自己代码,看不出是自己写的,但看得懂;普通程序员看自己代码,看得出是自己写的,但看不懂;二逼程序员看自己代码看了半天,破口大骂 “这是哪个 XX 写的代码?”。
AhogeK
2021-04-16 10:20:04 +08:00
@tairan2006 是的,这点昨天也有跟同事沟通。坑有,因为现在代码上直接拿数据库实体类让前端传,而前端没有统一规范,有的人也许没传 后端保存了 null 也许又传了''(意思一样却数据类型不同) 这时后台这写 sql count 不注意 null 数据就会有问题,类似还有拿 null 直接 = <> 查询的 至于说我没大家想的那么重,就说数据库不要去校验不为 null 让前端去判断(这点我挺疑惑的),不要加 not null 这个东西,不要改固定的字段名,就让我有意见先提,以后一定注意 前一家公司的数据库编写习惯确实影响了自己,不知道这家呆久了也会不会同化,现在任务也不重,还能抽空写自己的项目
lusi1990
2021-04-16 10:28:28 +08:00
改没问题,提前沟通好了
AhogeK
2021-04-16 10:30:37 +08:00
@no1xsyzy 是的,是我错误的说法,想表达就是避免使用 null,使用 null 只是说很难查询优化占用额外索引空间 但也不是必须这样

段子受教了,我还有很长的路要走 :muscle:

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770788

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX