分层数据嵌套集模型:MySql

分层数据嵌套集模型:MySql,mysql,database,database-design,relational-database,database-schema,Mysql,Database,Database Design,Relational Database,Database Schema,我只是在学习如何实现嵌套集模型,但仍然对它的某些方面感到困惑,这些方面涉及可能属于多个类别的项。下面的例子是从中提取的,反映了我遇到的许多其他例子 添加苹果时如何避免数据库中的重复,因为它们是多色的(即红色、黄色、绿色)?嵌套集模型是1:N(一对多)关系的结构,您希望使用M:N(多对多)关系(许多项目可以将苹果作为父项,但可以有多个父项) 但是您应该知道,层次化的M:N关系可能会很快变得非常复杂 您不会避免重复,苹果(或苹果的引用)将在树中放置两次,否则它将不是树而是图形。你的问题同样适

我只是在学习如何实现嵌套集模型,但仍然对它的某些方面感到困惑,这些方面涉及可能属于多个类别的项。下面的例子是从中提取的,反映了我遇到的许多其他例子


添加苹果时如何避免数据库中的重复,因为它们是多色的(即红色、黄色、绿色)?

嵌套集模型是1:N(一对多)关系的结构,您希望使用M:N(多对多)关系(许多项目可以将苹果作为父项,但可以有多个父项)


但是您应该知道,层次化的M:N关系可能会很快变得非常复杂

您不会避免重复,苹果(或苹果的引用)将在树中放置两次,否则它将不是树而是图形。你的问题同样适用于你建立一个。。。Swing JTree或HTML树;)

嵌套集模型只是在关系数据库中推送和遍历树结构的有效方法,它本身不是数据结构。它在MySQL用户中更受欢迎,因为MySQL缺乏处理树结构的功能(如Oracle提供的树结构)


干杯

在这里大声思考,但也许将某些属性(如红色、黄色和绿色)视为“标签”而不是“类别”,并用单独的逻辑处理它们会有所帮助。这样可以保留嵌套集模型并避免不必要的重复。此外,它还可以让你的分类更简单

这完全取决于你对信息的看法。类别只是表示属性的另一种方式。我知道你的例子只是为了说明,但如果你想按颜色对水果进行分类,为什么不按同样的方式对肉进行分类,即白肉和红肉?很可能你不会。所以我的观点是,也许也没有必要按颜色对水果进行分类

相反,某些属性可以用其他方式更好地表示。事实上,以最简单的形式,它可以记录为“食物”表中标有“颜色”的一列。或者,如果这是一个非常常见的属性,并且您发现自己显著地复制了该值,则可以将其拆分为一个名为“color”的单独表,并映射到第三个表中的每个食物项。当然,更抽象的方法是将表格概括为“标签”,并将每种颜色作为一个单独的标签,然后可以映射到任何食品项目。然后,你可以将任意数量的标签(颜色)映射到任意数量的食物项目上,给你一个真正的多对多关系,并将你的类别名称解放出来,使之更具普遍性


我知道关于标签是类别还是类别是标签等问题一直存在争论,但这似乎是一个例子,在这个例子中,它们可以相互补充,创建一个更抽象、更健壮、更易于管理的系统

旧线程,但我找到了一个更好的答案来解决这个问题

因为苹果可以有不同的颜色,所以你的结构是一个图形,而不是一棵树。嵌套集模型不是用于此的正确结构

由于您在评论中提到正在使用Mysql,因此更好的解决方案是使用OpenQueryGraphEngine(),这是一个Mysql插件,允许您创建一个特殊的表,在其中放置关系,基本上是parentId和childId。
神奇的是,您使用一个特殊的列锁存器查询这个表,这取决于在查询中传递的值,它将告诉OQGRAPH引擎要执行哪个命令。有关详细信息,请参阅文档。

是的,我理解这个概念,但没有将其应用于嵌套集模型。这就是我的问题,嵌套集模型可以处理这个问题吗?如果可以,如何处理?@swisscheese它不能以任何非常简单的方式处理。也许您可以尝试只保存树中的引用(指向保存数据的不同表的项目ID)。但我不认为嵌套集模型真的适合这个问题。是的,我一直在寻找答案,但找不到任何关于这个问题的明确答案。我现在使用的是MySQL,所以将来我会因为苹果的复制而在转换成非免费数据库时遇到问题吗?或者我应该尝试解决这个问题,不允许在这一点上有多个父项,而只是使用嵌套集方法吗?或者有没有其他方法可以利用MySQL解决这个问题?至少在Oracle环境下,您不会遇到任何问题。嵌套集方法是非常可移植的,因为它使用标准的SQL构造。在一般情况下,我看不出苹果引用的复制有什么坏处。虽然我对嵌套集很熟悉,但我从未在实践中使用过它。但我更关心树的修改(添加/删除/移动节点)。他们通常比较慢。另外请注意,这不是一种标准技术,解决方案的维护人员可能需要一个困难的开始。感谢您对这个问题的帮助。如果你有机会并且愿意,请你看看我的后续问题,我也有同样的想法,不确定我是否错过了一些可能的后果,但将颜色视为标签是有意义的。链接不再工作
web.archive.org