社交媒体内容的表结构

时间:2016-04-15 13:26:58

标签: database-design social-networking

我正在开发一个社交媒体类型的网站。我已经开始初步设计并遇到了潜在的问题。该站点围绕组件,子组件和子子组件展开。它具有层次结构。我最初创建了一个组件表,一个子组件表和一个子子组件表。这些表由ID链接。对于大多数事情,我认为这样可以正常工作。但...

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

那么为什么不拥有1个元素表或只有组件。子组件1和子组件2是组件1的子组件。 sub-sub-component1是子组件2等的子项。

在执行此操作时,我可以创建唯一的component_id,无论组件是子组件还是子子组件,我可以在我喜欢的表中应用这些id。

这看起来是一个更有效的过程吗?我用parent_ids等创建了单个表,现在遇到了查询该表以生成数据的问题。如何显示组件,组件的子组件(作为子组件)以及子组件的子组件(作为子组件)?

我希望这可以让你了解我在寻找什么。如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

取决于几个方面,每个级别的单独表格还是单个表格更好:

  1. 已知,固定且相当小的最大级别数是多少?

    • 否=>你需要一个表,否则你有太多不同的表,理论上可以构建一个足够深的结构,需要一个不存在的表。
  2. 彼此之间的等级有多相似?

    • 如果他们的行为相同,那么你只需要一张桌子。
    • 如果行为可能会有所不同,那么该变化只是某个级别的函数,还是会因其他内容而异? (组件可以有不同的风格,无论级别如何?)

      • 如果行为的变化仅仅是因为水平,那么这个参数有利于每个级别的不同表格(尽管请参阅其他要点)。
      • 如果行为的变化实际上是随机的,我会有一个表来显示结构,然后是1个其他表来覆盖行为的差异(链接到结构表)。
  3. 组件表上需要一个parent_id字段,以便您找到给定事物的所有子项。您可能也想要一个关于此的索引 - 我假设您更频繁地阅读组件的结构而不是它的变化,因此索引的成本超过了它的好处。 / p>

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

    要考虑的另一件事是在每个节点上放置一个级别计数器。即组件是1级,子组件是2级等。这会使一些工作更容易,例如,如果你想用不同颜色或类似的东西呈现级别。但如果你只是想要一个无差别的事物树,那可能不值得这么麻烦。

    关于SO的其他问题涉及MySQL中queries on hierarchical data的细节(有多种方法可以做到这一点,表结构中有相应的小差异)。不同的数据库供应商为这种查询提供了不同的支持,这使得它或多或少变得容易。例如,Oracle有一个非常好的方法hierarchies

    如果你选择单个表,那么不同表和用户之间的链接就是一个表。喜欢是Polymorphic Association的一个例子。 (这是一个SO问题的链接,反过来又链接到另一个 - 两者都很有用。)