“标记为垃圾邮件”功能的数据库结构

时间:2011-02-17 11:32:26

标签: php mysql database

我用php / mysql创建了一个webapp。

在我的应用程序中,我有不同的部分,用户提交内容,如照片,新闻,故事,视频等。

所有这些都是单独的部分,其中包含各自的故事详情页面。我想为所有部分应用“Flag as Spam”功能,但与数据库混淆。我应该为每个部分创建单独的表格,例如表格名称video_spamphoto_spam,还是应该使用一个包含以下列的表spam_contents

  • SpamId - 表格的唯一ID
  • ByUserId - 谁将其标记为垃圾邮件
  • SectionName - 将是“新闻”,“视频”,“故事”等。
  • 原因 - 用户将其标记为垃圾邮件的原因
  • ContentId - 这将包含photoid或videoid或newsid
  • 日期 - 用户将内容标记为垃圾内容的日期。

如果我需要获取用户标记为垃圾内容的所有视频部分内容,那么我可以在SectionNameContentId的基础上获取该内容。

这是一种好方法,还是任何人都有更好的解决方案。

请帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

除非“视频垃圾邮件”具有独特之处,或者“垃圾邮件”等独有的东西,否则您几乎肯定会使用单个表格。

您的情况类似于此supertype/subtype issue。请参阅我对该问题的回复。

答案 1 :(得分:0)

我相信这看起来是最好的方式。拥有一个具有独特目的的集中收藏家是一个设计加上,imho。你肯定可以在每个表格中找到更多的字段(例如,video_table还有'spam_flag','flag_by','flag_date'以及这些行中的任何字段),但我认为这是在创建过程中使你的工作倍增的一部分,当您需要对系统进行调整或更改时,可能会有明显的缺点。

顺便说一句,我已经看到这个结构在几个着名的开源Bullettin Boards中实现,用于报告消息和类似信息,所以我相信它是一个有效且优化的设计。

或者,如果你心情愉快,你也可以同时做到:与每个表有关的“详细”内容,以及作为“管理面板报告”的集中式结构。