2012-07-07 118 views
2

在我们已经离开了嵌套集模型和右栏如何在嵌套集合模型(MySQL)中插入数据;

当表是空的,什么我需要插入到右列,如果我不知道有多少孩子,我有在第一时间

LEFT 1 - forever

RIGHT? - 这里有什么价值?

如何让它动态?不是静态的。

PS:使用PHP

回答

6

我从你的标签和标题,你正在寻找与MySQL的有效的解决方案假设。

是的,您是对的,除非您事先知道元素的数量,否则需要动态计算right的值。有两种方法可以使用:

  • 您可以从最小值开始(在这种情况下为2),并在需要时增加它。
  • 你可以只让喜欢10000000,猜测,希望这是足够了,但你需要的可能性做好准备,这是不够的,需要稍后再调整。

在您需要实现多行leftright值可能需要插入新行的时候进行调整,这两种情况下,但是在第二种情况下,你实际上只需要执行,如果你的猜测是错误的更新。所以第二个解决方案更复杂,但可以提供更好的性能。

请注意,在存储heirarchical数据的四种常用方法中,嵌套集方法是执行插入和更新的最难的。请参阅Bill Karwin的Models for Heirarchical Data幻灯片69。

nested sets update difficulty

+0

xmmmm,但如果我使用邻接表我将不得不作出这样留下了许多疑问JOIN等等是静态的深度,所以仍然是2设计路径枚举和关闭表是更好的自由裁量权? – 2012-07-07 07:36:11

+0

也是每一个节点都会有很多儿童,他们将有其他儿童,好像嵌套模式不利于这个...所以什么样的设计是更好地使用,当你不知道你会多少级呢?或记录 – 2012-07-07 07:38:54

+0

这概述非常MySQL的中心,因为查询子树归类为“易”为所有那些支持递归查询DBMS(这是一个很值得主流功能时下)。 – 2012-07-07 08:48:13