针对多种内容类型的评论表的最佳解决方案

时间:2010-04-12 19:31:17

标签: sql database database-design

我正在为我正在构建的网站设计一个评论表。用户将能够上传图像,链接视频并将音频文件添加到配置文件中。

这些类型的内容中的每一种都必须是可评论的。现在我想知道什么是最好的方法。

我目前的选择是:

  1. 有一个大的评论表和每个内容类型的链接表(comments_videos,...),带有comment_id和_id。

  2. 将评论按其内容类型分隔。因此,每种类型的内容都有自己的评论表,其中包含该类型的评论。

4 个答案:

答案 0 :(得分:6)

我不同意接受的答案。 您如何以这种方式检查数据的完整性?如果您的应用程序没有做正确的事情,您可能会有腐败的ID。此外,您不应仅依赖应用程序来确保数据完整性。 另外,您是否认为在删除任何媒体时如何将删除标记级联到注释表?

如果要将所有注释保留在一个表中,则需要两个额外的列,一个用于媒体ID,另一个用于媒体类型。然后,您可以编写一个触发器来强制执行媒体(id,type)组合的完整性。

谁能说更好? -Ken

答案 1 :(得分:3)

每个文件只有1个注释,就像这样制作一个表:

Comments
CommentID     int identity/auto generate Primary key
CommentType   char(1) or tinyint/byte etc FK to CommentTypes table
Comment       string
CreateDate    date/time
CreateUserID  int  FK

在其他表格中使用它:

Video
VideoID
Video...
CommentID  FK

Audio
AudioID
Audio...
CommentID  FK

对于每个文件的多个注释,请创建一个如下表:

Comments
CommentID     int identity/auto generate Primary key
MediaID       int --no explicit FK, but can join to VideoID,AudioID etc on this
CommentType   char(1) or tinyint/byte etc FK to CommentTypes table
Comment       string
CreateDate    date/time
CreateUserID  int  FK

在其他表格中使用它:

Video
VideoID    int identity/auto generate Primary key, joins to Comments.MediaID
Video...


Audio
AudioID    int identity/auto generate Primary key joins to Comments.MediaID
Audio...

答案 2 :(得分:2)

我个人可能会选择第一个选项。将所有注释放在具有注释类型的单个表中,以识别注释的类型。

这将允许您加载独立于实际内容的评论,然后使用可以按需加载的显示内容(视频/ adiou)。

此外,它还允许您简化查询有关帖子的评论

答案 3 :(得分:1)

老实说,这两个选项都不重要。您预计任何类型(音频/视频/等)的给定内容都可以包含多个注释。每条评论仅限于一条内容。 (EG:评论只能在一个content_type上/相同的评论不能出现在视频和图片上)。只要这是真的,这里没有太大的区别,只有细微的细节。

我会选择一个内容表。如果需要,可以为每个显示给定content_type的所有注释的视图创建视图。

相关问题