好吧,我正在开发一个包含分层数据的项目,我将其用于书籍写作应用程序,如下所示:
- 顶级父级(Act) - 包含Act名称、位置(第一个Act)、说明和文本(介绍文本)
- 中级父级/子级(章节)- 包含章节名称、位置(第一章)、说明和文本(简介文本)
- 底层(部分)- 包含部分名称、位置(第一个部分)、说明和文本(实际内容文本)
现在,我想要具有可变数量的级别(例如,包括具有全文的子部分),但我不完全确定如何有效地创建这样的表。我最初的想法是让它们通过parentId 连接,顶层的parentId 为空。
例如,如果我想在第一个位置调用顶级父级,这没什么大不了的。现在,我可以搜索空父字段和位置 1。 为了调用“章节”(中级),我做了同样的事情,但获取结果的 id 并将其用作父 ID。
问题是对于部分,我必须有几个子查询才能得到最终结果。如果我想要具有可变数量的级别,我需要大量的子查询,这将影响性能。
我看到了similar question但并没有真正理解答案或我如何使用它。
我已经考虑过某种分类表或将所有父 ID 转移到子 ID 中(即,一个部分将在 ParentID 下列出章节和 Act ID),但我还没有确定。 Feedbooks.com 在提交书籍时使用类似的层次结构,但他们不将数据存储在数据库中,他们只是获取输入并将其转换为输出(pdf、epub 或其他)。
哦,我计划在 MySQL 中构建它。
想法?
编辑 想象这种情况的一个更简单的方法是与家人一起。假设您有 3 个祖父(Bill、Bernard、Boe),他们有 5 个 child (John、Joey、Josh、Jeremy、Jackson),而他们又拥有 2 个 child (例如:Donald、Duey、唐尼)。假设数据库不存储这种关系,而是存储哪个 child 住在哪里的关系,而我们不关心这里的生物学。
假设唐尼一开始和约翰住在一起,约翰又和比尔住在一起。唐尼是约翰的第一个 child ,约翰是比尔的第二个 child 。如何查询比尔二儿子的长孙?
假设他们搬走了,现在唐纳德和约翰住在一起。唐纳德是约翰的第二个 child (第一个 child 的位置由其他人填补),约翰仍然是比尔的第二个 child 。如何查询比尔二儿子的二孙子?
如果约翰和他所有的 child 搬到 Boe 家怎么办?鲍是二爷爷。现在如何查询这些信息呢?您将如何存储此类信息?
如果你现在把曾孙也加入进来怎么办?
最佳答案
这是使用闭包表的一个很好的例子,正如您所引用的答案一样。您可能想看一下here和 here .
引用第一个链接:
The Closure Table is a design for representing trees in a relational database by storing all the paths between tree nodes.
关于mysql - 嵌套数据使用什么表结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11790108/