【问题标题】:Table structure for social media content社交媒体内容的表结构
【发布时间】:2016-04-21 17:27:37
【问题描述】:

我正在开发一个社交媒体类型的网站。我已经开始了初步设计并遇到了潜在的问题。该站点围绕组件,子组件和子子组件。它具有层次结构。我最初为组件创建了一个表,为子组件创建了一个表,为子子组件创建了一个表。这些表由 id 链接。我相信,对于大多数事情来说,这会很好。但是……

我希望用户能够“喜欢”或“关注”某些组件、子组件和子子组件。我在想我必须创建一个“喜欢”表或“交互”表。我没有要链接的单个 ID。如果用户想要一个子子组件,我必须列出 component_id、sub-component_id 和 sub-sub-component_id。这似乎很痛苦。

那么为什么没有 1 个元素表或只有组件。 Sub-component1 和 sub-component2 是 Component1 的子级。 sub-sub-component1 是 sub-component2 等的子组件。

在此过程中,无论组件是子组件还是子子组件,我都可以创建唯一的 component_id,并且我可以在我的 likes 表中应用这些 id。

这似乎是一个更有效的过程?我已经使用 parent_ids 等创建了单个表,现在在查询该表以生成数据时遇到了问题。如何显示组件、组件的子组件(作为子组件)和子组件的子组件(作为子子组件)?

我希望这能让您了解我在寻找什么。如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: database-design social-networking


    【解决方案1】:

    每个级别单独的表还是单个表更好,这取决于几件事:

    1. 最大级别数是否已知、固定且相当小?

      • 不 => 你需要一个表,否则你会有太多不同的表,理论上可以构建一个足够深的结构,需要一个不存在的表。
    2. 各个关卡的相似度如何?

      • 如果它们的行为相同,那么您只需要一张表。
      • 如果行为可以变化,那么这种变化是否只是关卡的函数,还是会因其他因素而变化? (组件可以有不同的风格,不管级别吗?)

        • 如果行为的变化仅仅是因为级别,这是支持每个级别使用不同表的论据(尽管请参阅其他点)。
        • 如果行为的变化实际上是随机的,我将有一个表格来显示结构,然后有 1 多个涵盖行为差异的其他表格(链接到结构表)。

    组件表需要一个 parent_id 字段,以便您找到给定事物的所有子项。您可能也需要一个关于此的索引 - 我假设您阅读组件结构的频率高于它的变化,因此索引的成本超过了它的好处。

    向 MySQL 表添加索引的示例是 in this other SO question

    要考虑的另一件事是在每个节点上放置一个级别计数器。 IE。组件是 1 级,子组件是 2 级等。这将使一些工作更容易,例如,如果你想用不同的颜色或类似的东西来呈现关卡。但如果你只是想要一棵未分化的事物树,那可能就不值得费心了。

    还有其他关于 SO 的问题涉及 MySQL 中queries on hierarchical data 的详细信息(有不止一种方法可以做到,表结构有相应的小差异)。不同的数据库供应商为这种查询提供了不同程度的支持,这或多或少会使其变得容易。例如,Oracle 有一个很好的方法来处理hierarchies

    如果您确实选择单个表,则不同表之间的链接和用户的喜欢是Polymorphic Association 的示例。 (这是一个 SO 问题的链接,该问题又与另一个问题的链接 - 两者都很有用。)

    【讨论】:

    • 这太棒了。谢谢你。到你的第一点。我无法看到超过 5 的水平,但可以想象,这是可能的。老实说,它应该是这个应用程序的一项功能。
    • 所以我倾向于一张桌子。到你的第二点。许多都非常相似。示例 - 书架上有书籍(标题、描述)、章节(标题、描述)。但是章节中的内容可能会大不相同。一本书可能是一本烹饪书,章节内容是食谱,或者这本书可能是纯小说和段落。当然,这些章节可以有章节等。我认为一张桌子是要走的路。我也相信索引很重要,因为这个表会变得非常大。
    • 您能否指导我参考任何涉及如何插入索引的参考资料?另外,如何从单个表中查询数据以显示树结构?再次感谢。您的意见非常宝贵。
    • 我已经用索引和查询链接编辑了答案 - 希望对您有所帮助。
    • 我只有一对关于多态关联的 SO 问题,以防您最终使用单独的表格。 stackoverflow.com/questions/7000283/… 加上它链接到的那个。
    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2014-10-12
    • 2019-06-10
    • 2018-01-09
    相关资源
    最近更新 更多