我正在为我正在构建的网站设计一个评论表。用户将能够上传图像,链接视频并将音频文件添加到配置文件中。
这些类型的内容中的每一种都必须是可评论的。现在我想知道什么是最好的方法。
我目前的选择是:
有一个大的评论表和每个内容类型的链接表(comments_videos,...),带有comment_id和_id。
将评论按其内容类型分隔。因此,每种类型的内容都有自己的评论表,其中包含该类型的评论。
答案 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的所有注释的视图创建视图。