2016-04-15 41 views
0

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

我希望用户能够“喜欢”或“追随”某些组件,子组件和子子组件。我想我将不得不创建一个“喜欢”表或“交互”表。我没有单一的ID链接。如果用户想要一个子子组件,我将不得不列出component_id,sub-component_id和sub-sub-component_id。这似乎是一个痛苦。

那么,为什么不有1个元素表或组件。子组件1和子组件2是Component1的子项。子子组件1是子组件2的子组件等。

在此过程中,我可以创建唯一的component_ids,无论组件是子组件还是子子组件,我都可以将这些ID应用于我的喜欢桌子。

这似乎是一个更有效的过程?我用parent_ids等创建了单个表,并且现在遇到了查询此表以产生数据的问题。我如何着手展示组件的子组件(作为子组件)和子组件的子组件(作为子子组件)?

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

回答

0

这取决于几件事情每级或单台单独的表是否是更好:

  1. 固定已知的,水平的最大数量,以及相当小?

    • 否=>你需要一个表,否则你就会有太多不同的表,在理论上可以建立一个足够深的结构需要一个不存在的表。
  2. 水平相互之间有多相似?

    • 如果它们表现相同,那么你只需要一张表。
    • 如果行为可能会有所不同,那么这种变化只是一个级别的函数,还是会因其他因素而有所不同? (组件可以有不同的口味,不分级别?)

      • 如果行为的变化仅仅是水平的,因为,这是有利于每个级别不同的表的参数(虽然看到其他点)。
      • 如果行为的变化是有效的随机性,我会有一张表来显示结构,然后有1 +个其他表格覆盖行为差异(链接到结构表)。

成分表都需要就可以了PARENT_ID场,让你找到一个给定的事情所有的孩子。你可能也需要一个索引 - 我假设你会更频繁地阅读组件的结构,因此索引的成本超过了它的好处。

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

要考虑的另一件事是在每个节点上放置一个计数器。即组件是1级,子组件是2级等。这将使一些工作更容易,例如,如果你想呈现不同颜色或类似的水平。但是如果你只想要一棵没有区别的东西,那么这可能不值得费心。

有关于SO的其他问题,请参阅MySQL中的queries on hierarchical data的详细信息(有多种方法可以实现,表格结构中有相应的细微差异)。不同的数据库供应商为这种查询提供了不同数量的支持,这使得它或多或少变得容易。例如,Oracle有一个非常好的方法来做hierarchies

如果您确实需要单个表格,则不同表格和用户喜欢的链接就是Polymorphic Association的示例。 (这是一个链接到一个SO问题,反过来又有一个链接到另一个 - 都是有用的。)

+0

这是非常出色的。谢谢。到你的第一点。我看不到5级的水平,但可以想象,这是可能的。实际上,它应该是这个应用程序的一项功能。 – foxtangocharlie

+0

所以我倾向于一张桌子。到你的第二点。很多都非常相似。例如 - 书架上有书(标题,说明),章节(标题,说明)。但是这些章节中的内容可能会大不相同。一本书可能是一本烹饪书,它的章节内容是食谱,或者这本书可能是直接的小说和段落。当然这些章节可能有章节等。我认为一张桌子是要走的路。我也相信,索引将是非常重要的,因为这张表会变得非常庞大。 – foxtangocharlie

+0

你能指示我涉及如何插入索引的任何参考吗?另外,如何从单个表中查询数据以显示树结构?再次感谢。您的意见非常有价值。 – foxtangocharlie