我正在编写一个显示帖子的应用程序,就像一个简单的论坛系统。 用户在提交帖子时可以将帖子标记为紧急,但主持人必须批准“紧急”状态。即使帖子未被批准为紧急,仍然会显示一个帖子,但在主持人批准紧急状态之前,该帖子似乎只是一个正常的帖子,此时帖子将获得特殊待遇。
我考虑了两种方法:
1)在posts表中有两个标志。一个说用户已请求紧急状态,另一个表示管理员已批准紧急状态。只有当两者都为真时,才会将帖子显示为紧急。
2)有两张桌子。请求待处理表,其中包含所有待处理的紧急批准。管理员批准紧急状态后,我会从待处理表中删除该请求并更新posts表,以便该帖子的紧急字段变为true。
我不确定这两种方法是否优于另一方法。
第一个解决方案意味着我只需要担心一个表,但最终会有更多字段。考虑到posts表将是应用程序中查询次数最多的表,不确定这是否真的让查询更慢或更慢。
第二个解决方案使帖子表更精简,但广告另一个表来处理(不是这很难)。
我倾向于第二种解决方案,但我想知道我是不是在过分分析并使我的生活变得比它需要的更复杂。建议?
答案 0 :(得分:1)
还有另一种解决方案:)
您可以拥有一个包含帖子状态的表格,并且在您的帖子表格中,您将拥有一个引用状态的列表。
这个apporach有几个优点 - 比如你可以在将来无缝添加更多状态..或者你甚至可以拥有另一个表,其中包含如何更改状态(工作流程)的规则。
答案 1 :(得分:1)
绝对1)。附加表只会让事情变得混乱。一个额外的状态字段就足够了,值为:0 =正常,1 =紧急启动,2 =紧急例如。
对于需要批准的查询,您可以使用status = 1进行查询,如果按状态desc进行排序,您自然会预先收到紧急消息。
答案 2 :(得分:1)
第二种方法在设计方面最干净,最终可能会占用更少的磁盘空间。第一种方法不那么“纯粹”,但从维护和编码的角度来看,它更简单;因此我会采用这种方法。
此外,很高兴看到有人在设计之前考虑设计并编写大量代码。 :)不能告诉你我见过多少混乱的项目,一小时的设计思考会为所有参与者节省很多时间......
答案 3 :(得分:1)
我认为选项1是最好的。您需要做的唯一事情是使用两个字段创建索引。 选项2增加了太多的复杂性
我有一个mysql查询只是为了这样的事情。我会在记得/发现正确的语法后立即发布