【问题标题】:Best solution for a comment table for multiple content types多种内容类型的评论表的最佳解决方案
【发布时间】:2011-02-07 03:55:03
【问题描述】:

我目前正在为我正在构建的网站设计一个 cmets 表。用户将能够上传图片、链接视频并将音频文件添加到个人资料中。

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

我目前的选择是:

  1. 为每种内容类型(cmets_videos,...)提供一个大 cmets 表和一个链接表,带有 comment_id 和 _id。

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

【问题讨论】:

标签: sql database database-design


【解决方案1】:

我不同意接受的答案。 您将如何以这种方式检查数据的完整性?如果您的应用程序没有做正确的事情,您的 ID 可能会损坏。此外,您永远不应仅依靠应用程序来确保数据完整性。 另外,你有没有想过当你删除任何媒体时如何将你的删除级联到评论表?

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

谁能说得更好? -ken

【讨论】:

    【解决方案2】:

    每个文件只有 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
    

    对于每个文件的多个 cmets,请像这样创建一个表:

    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...
    

    【讨论】:

    • 如果视频/音频/等只有 one 评论有效。如果允许多个 cmets,那么您要么必须为每个事物创建一个 Thing_Comments 表,要么必须在 Comments 表中拥有一个复合外键——例如 (thing_id,thing_type)
    • OP 不清楚是否需要 1 个或多个 cmets,我将使用额外的设计进行编辑。
    【解决方案3】:

    我个人可能会选择第一个选项。将所有 cmets 放在一个带有注释类型的表中,用于标识注释的类型。

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

    此外,它还可以让您简化关于 post 的 cmets 查询。

    【讨论】:

      【解决方案4】:

      老实说,这两个选项都不重要。您预计任何类型(音频/视频/等)的给定内容都可以有多个 cmets。每条评论都专属于一个内容。 (例如:评论只能出现在一个 content_type 上/同一评论不能同时出现在视频和图片上)。只要是真的,这里没有什么大的区别,只有小细节。

      我只想拥有一个内容表。如果需要,您可以为每个视图创建显示给定 content_type 的所有 cmets 的视图。

      【讨论】:

        猜你喜欢
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        • 2011-04-08
        • 1970-01-01
        • 2012-11-21
        相关资源
        最近更新 更多