好的,所以我正在开发一个包含分层数据的项目,我正在将其用于写书应用程序,如下所示:
- 顶级父级 (Act) - 包含 Act 名称、位置(第一个 Act)、描述和文本(介绍文本)
- 中级父/子(章节)- 包含章节名称、位置(第一章)、描述和文本(介绍文本)
- 底层(Section)——包含Section名称、位置(第一个Section)、描述和文本(实际内容文本)
现在,我想拥有可变数量的级别(例如,包括将包含全文的子部分),但我不完全确定如何有效地创建这样的表格。我最初的想法是让它们通过 parentId 连接,顶层的 parentId 为 null。
比如我想在第一位置调出一个顶级家长,这没什么大不了的。现在,我可以搜索空的父字段和 1 的位置。要调用“章节”(中级),我做同样的事情,但获取结果的 id 并将其用作 parentid。
问题在于部分,我必须有几个子查询才能得到最终结果。如果我想设置可变数量的级别,我需要大量的子查询,这将影响性能。
我看到了一个类似的问题,但并没有真正理解答案或如何使用它。
我已经考虑过某种分类表或将所有父 ID 带入子代(即,一个部分将在 parentid 下列出章节 ID 和行为 ID),但我没有设置它。Feedbooks.com 在提交书籍时使用类似的层次结构,但它们不会将数据存储在数据库中,它们只是接受输入并将其转换为输出(pdf、epub 或其他)。
哦,我计划在 MySQL 中构建它。
想法?
编辑 想象这种情况的一种更简单的方法是和一个家庭在一起。假设您有 3 个祖父(Bill、Bernard、Boe),他们之间有 5 个孩子(John、Joey、Josh、Jeremy、Jackson),他们又拥有自己的所有 2 个孩子(例如:Donald、Duey、唐尼)。假设数据库不存储那种关系,而是存储什么孩子呆在哪里的关系,我们不关心这里的生物学。
所以让我们假设唐尼开始和约翰住在一起,而约翰和比尔住在一起。唐尼是约翰的第一个孩子,约翰是比尔的第二个孩子。你如何查询比尔的第二个儿子的第一个孙子?
假设他们四处走动,现在唐纳德和约翰呆在一起。Donald 是 John 的第二个孩子(第一个孩子的位置由其他人填补),而 John 仍然是 Bill 的第二个孩子。怎么查询比尔二儿子的二孙?
如果约翰带着他所有的孩子搬到博伊家怎么办。Boe是二爷爷。您现在如何查询这些信息?您将如何存储此类信息?
如果你现在把曾孙们扔进去怎么办?