在Mysql(或任何)数据库中存储请求的正确方法

时间:2011-08-30 14:02:37

标签: mysql sql normalization

在数据库中存储请求的“正确”(最常规化?)方式是什么?例如,用户提交文章。在将该文章发布到网站之前,必须对其进行审核和批准。

哪种方式更合适:

A)将其存储在Articles表中,其中包含“已批准”字段,该字段为0,1,2(已拒绝,已批准,待处理)

OR

B)拥有一个与Article相同的ArticleRequests表,经批准后,将行数据从ArticleRequests移动到Article。

谢谢!

3 个答案:

答案 0 :(得分:4)

由于每篇文章都有批准状态,每次请求文章时,您很可能需要知道该状态 - 将其与表格保持一致。

但是,请考虑调用字段ApprovalStatus。您可能希望添加一个相关的表来包含每个状态,除非它们不会经常(或永远)发生变化。

编辑:在相关表格中保留字段的原因是:

  • 如果相关字段并非始终适用,或者可能经常是null
  • 如果仅在极少数情况下需要相关字段,并且可以通过将外键用于相关属性的相关表来更好地描述。

在您的情况下,上述原因不适用。

答案 1 :(得分:2)

绝对做'A'。

如果你做B,你将创建一个与另一个相同字段的新表,这意味着你做错了什么。你在重复自己。

答案 2 :(得分:1)

我认为最好将数据存储在具有特定状态的主表中。因为没有必要在表之间移动数据,如果这个数据被批准并且文章将同时出现在网站上。如果您不想存储被拒登的文章,则应创建cron脚本,删除不必要的数据或将其移动到存档表。在这种情况下,您将减少数据库的负载,因为您可以调整删除旧文章的适当时间,例如在晚上。

关于在每个查询中使用审批状态的问题:如果您计划在搜索或制作文章列表时使用高负载的非常受欢迎的网站,您将使用像sphinx或solr这样的独立服务器(mysql不是用于此目的的好解决方案并且您将把数据放入status ='Approved'的数据中。使用增量索引可以帮助您保持数据的最新状态。

相关问题