• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ericgui
V2EX  ›  程序员

请教数据库怎么设计:字段之间的依赖关系

  •  
  •   ericgui · Aug 20, 2020 · 2014 views
    This topic created in 2103 days ago, the information mentioned may be changed or developed.
    比如有个表 table_blog

    那么,这个表有 2 个字段,一个是 status,比如说‘草稿’,‘已发布’,‘审核中’
    那么,要求,如果 status 是‘已发布’的时候,'publish_at' 这个字段必须有值

    这可以通过数据库来做约束吗?
    还是说,没办法,只能通过代码( ORM,Model 等)来做约束
    9 replies    2020-08-20 12:07:21 +08:00
    securityCoding
        1
    securityCoding  
       Aug 20, 2020
    代码
    weizhen199
        2
    weizhen199  
       Aug 20, 2020
    可以加,但一般不会给数据库加这种约束,建议应用自己解决
    abcbuzhiming
        3
    abcbuzhiming  
       Aug 20, 2020
    记得 oracle 还有 postgresql 这样比较偏强约束的 SQL 数据库是可以实现这种字段约束的

    但是 MySQL 好像没有,当然也可能我孤陋寡闻了,如果有请人知道请麻烦告知

    现代关于数据库更多强调的是事务性,字段约束用的比较少了,约束更多在应用层上实现
    hyperbin
        4
    hyperbin  
       Aug 20, 2020 via Android
    触发器
    rbe
        5
    rbe  
       Aug 20, 2020
    postgres 有 exclusion 约束和 check 约束。http://www.postgres.cn/docs/12/ddl-constraints.html#DDL-CONSTRAINTS-EXCLUSION
    但一般还是通过 orm 来做这个事比较好吧。
    kiracyan
        6
    kiracyan  
       Aug 20, 2020
    update 的时候做 publish_at 的判断
    kanepan19
        7
    kanepan19  
       Aug 20, 2020
    代码控制
    clf
        8
    clf  
       Aug 20, 2020
    代码约束。

    以下我个人理解,不一定对:
    按数据库设计的“规范”来说,这种依赖关系是不符合数据库设计规范的。
    可以考虑拆成:draft(草稿)、review(审核)、publish(发布)、article(文章)四个表。
    kanepan19
        9
    kanepan19  
       Aug 20, 2020
    另外建议, 发布状态 , 和 审核状态分开, 不同含义的状态分离 , 更有利于控制.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3023 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 466ea39e · 40ms · UTC 13:09 · PVG 21:09 · LAX 06:09 · JFK 09:09
    ♥ Do have faith in what you're doing.