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

2020-08-20 10:55:57 +08:00
 ericgui
比如有个表 table_blog

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

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

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

现代关于数据库更多强调的是事务性,字段约束用的比较少了,约束更多在应用层上实现
hyperbin
2020-08-20 11:07:00 +08:00
触发器
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
2020-08-20 11:46:22 +08:00
update 的时候做 publish_at 的判断
kanepan19
2020-08-20 12:06:09 +08:00
代码控制
clf
2020-08-20 12:06:27 +08:00
代码约束。

以下我个人理解,不一定对:
按数据库设计的“规范”来说,这种依赖关系是不符合数据库设计规范的。
可以考虑拆成:draft(草稿)、review(审核)、publish(发布)、article(文章)四个表。
kanepan19
2020-08-20 12:07:21 +08:00
另外建议, 发布状态 , 和 审核状态分开, 不同含义的状态分离 , 更有利于控制.

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

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

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

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

© 2021 V2EX