我有一个书籍结构,包括章节,分章,章节,小节,文章和未知数量的子粒子,子子粒子,子子子粒子等。
这种结构的最佳方法是什么? 一个表有子父关系,多个表?
谢谢。
答案 0 :(得分:4)
要确定是否涉及单独的表格或一个大表格,您应该仔细查看每个项目 - 章节,子章节等 - 并确定它们是否具有与其他项目不同的属性。章节是否带有与章节不同的内容?
如果是这样,那么你正在查看章节,SubChapter,Section,SubSection,Article的单独表格。对于我的子子亚子等,文章仍然是等级的。
如果没有,那么也许这是一张带有父/子的大桌子,但看起来你可能正在谈论层次深度的'名字',这让我再次走向单独的桌子。
还要考虑您将如何查询以及您将要搜索的内容。
答案 1 :(得分:1)
有两种方法可以在关系数据库中保存树结构。最常用的是使用父指针和nested sets。
第一个具有非常简单的数据结构,即指向每个对象上的相应父元素的指针,因此易于实现。在缺点上,对它进行一些查询并不容易,因为树无法完全遍历。你需要每层自我加入。
嵌套集更容易查询(当您了解它是如何工作的)但更难更新。许多写入都要求对树中的其他对象进行额外更新,这可能会使转换保存变得更加困难。
第三个变体是materialized path的变体,我个人认为这是前两者之间的妥协。
也就是说,如果你想存储任意大小的树(例如,对于部分,子部分,子子部分......),你应该使用上面提到的树实现之一。如果您的最大深度非常有限(例如最多3层),您可以创建一个明确的数据结构。但是,事情总是变得比最初复杂,我建议你使用真正的树实现。