你倾向于设置数据库字段的默认值吗?

118 天前
 xlinux

比方一个商品表,有一个字段 status,表示是否上架 0,1 ,创建商品时,就可以设置状态是否上架,后端在验证参数层,就限定了[0,1],那么你是否还会设置数据库中该字段 status 的默认值?

由于接收前端传过来的数据,status 肯定是有值的,但是如果时后端程序内部去 new Goods(),不设置 status 的值,这时候入库就会报错。如果给数据库设置了默认值就不会报错了。

1434 次点击
所在节点    数据库
14 条回复
lscho
118 天前
是否设置默认值要看业务需求啊
olaloong
118 天前
应设尽设
echo1937
118 天前
应设尽设,null 是万恶之源,有时候字符串我情愿是空字符串,也不希望遇到 null 。
IvanLi127
118 天前
看实际情况,很多状态类的一般是能设。
有些像用户手机号这种字符串就允许 null 。
备注之类的默认空串。
iseki
118 天前
取决于实际情况,大部分情况下都倾向于设置,同时做好约束
devswork
118 天前
设置,比如 0 ,EMPTY_STRING ,但是唯一约束时候就不能空串了,必须 new 时候就设置值。 设置默认值的好处还有一个,就是新增字段设置了默认值,就不用在 java 里再判断 null 处理了,所有新增记录地方也不用处理了,偷懒
xiaochong0302
117 天前
定义实体类的时候可以给一个默认值呀,new 的时候不就有默认值了。
wu00
117 天前
@echo1937 这么痛恨吗..是开发语言不好处理 null 吗?
除了唯一索引列不使用 null ,其他还好吧,看业务场景;
使用 null 就多一种形态:null/0/其他数值,不使用 null 就得加个字段来表示是不是"null"
xlinux
117 天前
@xiaochong0302 既然定义实体类的时候给了默认值,那么在数据库层面还有必要设置默认值吗?
echo1937
117 天前
@wu00 唯一索引列大部分情况都是允许 null 的,否则未设置值的话,都取 default 值就冲突了;

数值列,时间列,一般也都是允许 null 的,

有些业务场景你没法给这些列取默认值,还有可能导致带聚合函数的 sql 失去本意;

主要是字符串列,会有空串,有 null ,有字符串“null”,有些语言处理起来不优雅;

如果不在 db 层做限制,代码层面就要考虑,遇上新员工还是有可能漏掉,那从根上解决就最方便了。
Beats
117 天前
大厂一般要求必须设置
RicherWQ
116 天前
除非特殊情况,不然必须设置默认值。专业 DBA 都会这样做。
jianghu52
116 天前
默认值基本上是业务最喜欢设置的。但是有一说一,在测试的时候,尤其是还没有完全搭建好脚手架的情况下,做原型测试的时候,这些表的默认值字段是非常讨厌的东西。
adoal
116 天前
是否设置默认值,取决于是否有业务上合理的默认值。
大多数涉及人员信息的表,性别字段有默认值是没道理的;但是预设主要目标用户群是特定性别但又不排斥其它性别的社交软件,性别字段有默认值就是合理的。

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

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

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

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

© 2021 V2EX