【问题标题】:What table structure to use for nested data?嵌套数据使用什么表结构?
【发布时间】:2012-08-04 00:00:31
【问题描述】:

好的,所以我正在处理一个包含分层数据的项目,我将其用于像这样的书籍写作应用程序:

  • 顶级父级 (Act) - 包含 Act 名称、位置(第一个 Act)、描述和文本(介绍文本)
  • 中级父/子(章节)- 包含章节名称、位置(第一章)、描述和文本(介绍文本)
  • 底层(部分)- 包含部分名称、位置(第一部分)、描述和文本(实际内容文本)

现在,我希望有可变数量的级别(例如,包括将包含全文的子部分),但我不完全确定如何有效地创建这样的表格。我最初的想法是让它们通过 parentId 连接,顶层的 parentId 为 null。

例如,如果我想在第一位置调用顶级父级,这没什么大不了的。现在,我可以搜索空父字段和位置 1。 要调用“章节”(中级),我会做同样的事情,但获取结果的 id 并将其用作 parentid。

问题在于部分,我必须有几个子查询才能得到最终结果。如果我想设置可变数量的级别,我需要大量的子查询,这会影响性能。

我看到了similar question,但并没有真正理解答案或我如何使用它。

我已经考虑过某种分类表或将所有父 ID 转移到子 ID 中(即,一个部分将在 parentid 下列出章节 ID 和行为 ID),但我没有设置它。 Feedbooks.com 在提交书籍时使用类似的层次结构,但它们不会将数据存储在数据库中,它们只是接受输入并将其转换为输出(pdf、epub 或其他)。

哦,我打算在 MySQL 中构建它。

想法?

编辑 想象这种情况的一种更简单的方法是与家人在一起。假设您有 3 个祖父(Bill、Bernard、Boe),他们之间有 5 个孩子(John、Joey、Josh、Jeremy、Jackson),他们又拥有自己的所有 2 个孩子(例如:Donald、Duey、唐尼)。假设数据库不存储那种关系,而是存储什么孩子呆在哪里的关系,我们不关心这里的生物学。

假设唐尼开始与约翰同居,而约翰则与比尔同居。唐尼是约翰的第一个孩子,约翰是比尔的第二个孩子。你如何查询比尔的第二个儿子的第一个孙子?

假设他们四处走动,现在 Donald 和 John 住在一起。 Donald 是 John 的第二个孩子(第一个孩子的位置由其他人填补),而 John 仍然是 Bill 的第二个孩子。怎么查询比尔二儿子的二孙?

如果约翰带着他所有的孩子搬到 Boe 家会怎样。 Boe是二爷爷。您现在如何查询这些信息?您将如何存储此类信息?

如果你现在把曾孙也扔进去怎么办?

【问题讨论】:

    标签: mysql sql database database-design


    【解决方案1】:

    这是使用闭包表的一个很好的例子,就像你引用的答案一样。你可能想看看herehere

    引用第一个链接:

    闭包表是一种用于在关系中表示树的设计 数据库通过存储树节点之间的所有路径。

    【讨论】:

    • 这两篇文章似乎更好地解释了解决方案,但我仍然感到困惑。我了解 Closure 表是如何制作的,以及如何使用它轻松查询祖父的孙辈(比我所做的要容易得多),但它仍然不能完全解决我的问题。假设您要查询祖父的第一个孩子的孙子孙女。我正试图绕过它。然后我是否会使用关闭表选择所有孙辈,然后为第一个父母的 parentID 运行“where”子查询?它简化了我的问题,但我想知道它是否是正确的解决方案。
    猜你喜欢
    • 2014-04-27
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2020-12-13
    • 2022-01-22
    相关资源
    最近更新 更多