V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ericgui
V2EX  ›  程序员

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

  •  
  •   ericgui · 2020-08-20 10:55:57 +08:00 · 1606 次点击
    这是一个创建于 1582 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如有个表 table_blog

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

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

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

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

    以下我个人理解,不一定对:
    按数据库设计的“规范”来说,这种依赖关系是不符合数据库设计规范的。
    可以考虑拆成:draft(草稿)、review(审核)、publish(发布)、article(文章)四个表。
    kanepan19
        9
    kanepan19  
       2020-08-20 12:07:21 +08:00
    另外建议, 发布状态 , 和 审核状态分开, 不同含义的状态分离 , 更有利于控制.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:36 · PVG 06:36 · LAX 14:36 · JFK 17:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.