V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xlinux
V2EX  ›  数据库

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

  •  
  •   xlinux · 345 天前 · 1587 次点击
    这是一个创建于 345 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    如果不在 db 层做限制,代码层面就要考虑,遇上新员工还是有可能漏掉,那从根上解决就最方便了。
    Beats
        11
    Beats  
       344 天前   ❤️ 1
    大厂一般要求必须设置
    RicherWQ
        12
    RicherWQ  
       343 天前   ❤️ 1
    除非特殊情况,不然必须设置默认值。专业 DBA 都会这样做。
    jianghu52
        13
    jianghu52  
       343 天前   ❤️ 1
    默认值基本上是业务最喜欢设置的。但是有一说一,在测试的时候,尤其是还没有完全搭建好脚手架的情况下,做原型测试的时候,这些表的默认值字段是非常讨厌的东西。
    adoal
        14
    adoal  
       343 天前 via iPhone   ❤️ 1
    是否设置默认值,取决于是否有业务上合理的默认值。
    大多数涉及人员信息的表,性别字段有默认值是没道理的;但是预设主要目标用户群是特定性别但又不排斥其它性别的社交软件,性别字段有默认值就是合理的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2906 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:49 · PVG 21:49 · LAX 05:49 · JFK 08:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.