【问题标题】:Comments for multiple parent objects多个父对象的注释
【发布时间】:2012-10-21 18:27:53
【问题描述】:

我正在学习在 Yii PHP 框架中构建网络应用程序,但我认为我的问题一般适用于网络应用程序。

我想知道如何为与不同类型的父对象(即照片或帖子)相关的 cmets 构建数据库表。

照片和帖子本质上是不同的,不会放在同一张桌子上。然而,这些对象上的 cmets 在大多数情况下具有相同的格式。

我的问题有两个,是否可以将多个父对象的 cmets 放入同一张表中? [在我看来这是自然的解决方案,但我不确定如何使用外键/主键等来处理这个问题。我认为它还需要一个指向父对象类型的键......?]

其次,如果可以将这些cmets放到同一个表中,这样做效率高吗,每个父对象都有一个comment table是不是效率更高?

在此先感谢,希望这对某人来说是一个足够有趣的话题。

干杯,

尼克

【问题讨论】:

    标签: database database-design web-applications yii


    【解决方案1】:

    另一种选择是有一个所有帖子相关的帖子表(无论类型如何)。因此,无论是照片还是普通帖子,都会在此表中为其创建记录。

    根据内容的类型,您可以在此表中存储照片和普通帖子(每个都有可选字段,例如:photo、photo_type、post_content 可以是可选的,具体取决于创建的类型(这将是了解 Yii 模型验证场景的好机会)。

    所以你发布的表格看起来像:

    • 身份证
    • post_content
    • 照片
    • photo_type
    • 等等……

    如果您选择不将两者存储在同一个表中,则可以有 1 个用于照片的表和 1 个用于与 post_id 相关的帖子

    这样,您可以有一个与 post_id 相关的评论表(无论是正确的路线)。

    【讨论】:

    • 感谢您的回复。我想我理解你提出的方法。我从您所说的内容中得知,拥有多个评论表肯定不是传统方法,对吗?然后,简而言之,您可以巧妙地将您的内容放入一个表中并将 cmets 映射到它。或者有第三个表来处理从多种内容类型到 cmets 的映射。这是它的要点吗?这些方法中的任何一种都可能更有效,还是几乎没有区别?
    • 没问题 :) 是的,这就是我的建议。最主要的是你肯定只需要一个评论表。如何处理帖子取决于您,但更传统的方法是拥有一个处理所有类型的表,但这显然取决于您的数据结构的复杂性。在效率方面,它们大致相同,但是如果您有一个单独的 post 表,您的代码将更易于维护
    • 而且,你所说的关于一张表中不同类型的帖子真的很有趣,干杯。
    • 没问题,祝你好运。这种用法的一个有趣示例是 wordpress,它以高度灵活的方式使用很少的数据库表。谷歌“wordpress 数据库模式”,你会看到一些很好的表“类型”灵活性的例子。一切顺利:)
    【解决方案2】:

    我会将 Comment 建模为自己的表格。 Comment 表将包含 PhotoId 和 PostId 列。这些是允许空值的外键。然后,数据库检查约束将确保 PhotoId 和 PostId 中的一个为空。即每条评论都只附加到一个父级。

    【讨论】:

      【解决方案3】:

      我可以建议 3 个表结构

      表:[Entity_Types](列出所有对象标题,例如照片、帖子) 例子: PK:1001,“照片”

      表:[照片] 例子: PK:2001,“我的第一张照片标题” PK:2002,《我的第二张照片标题》

      表:[评论] 例子: PK:3001, “我的第一张照片的第一条评论”, FK:1001, FK:2001 PK:3002, “我的第一张照片的第二条评论”, FK:1001, FK:2001 PK:3003,“我对第二张照片的第一条评论”,FK:1001,FK:2002

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多