gpt4 book ai didi

mysql - 嵌套集 - 自下而上的方法

转载 作者:行者123 更新时间:2023-11-29 10:32:22 25 4
gpt4 key购买 nike

来自nested sets通过 Mike Hyller 和其他博客撰写的引用文档,我可以了解 RDBMS 中的层次结构是如何管理的。我还能够成功地为我的一个项目实现该模型。我目前正在研究一个也有层次结构的问题,但节点是从底部构建的。我正在使用 MySQL。

假设我有 10 个对象,我最初在表中为它们创建行。然后,有一个表,其中包含实现嵌套集模型所需的左值和右值。因此,在这张表中,我将这 10 个物体分为两组,比如说两个袋子,一个袋子里有 5 个物体,一个袋子里有其他 5 个物体(基于某种逻辑)。现在这两个袋子组合在一起形成一个更大的袋子。同样,这些袋子被组合在一起形成一个大容器。

我希望您能够清楚地了解这个示例,以便了解我在这里想要实现的目标。这与应用传统的嵌套集模型相反,在传统的嵌套集模型中我从顶部构建集。

您能否建议我是否可以在此处应用嵌套集?如果是,在插入期间更改更新查询是否足以形成整个层次结构?如果您不建议,还可以使用哪些其他技术来解决此类问题?

最佳答案

嵌套集模型适用于任何层次结构,只要它不重叠(即一个子对象最多可以有一个父对象)。

您的模型似乎有一个预定义的层次结构(“对象”、“袋子”和“容器”是具有不同属性的不同实体)。如果确实如此,则根本不需要嵌套集,一组简单的外键约束就足够了。

如果不是(例如,如果“包”可以提升为“容器”,或者可以有包含其他“容器”等的“容器”),则您将需要某种层次结构确实是模型,嵌套集也可以作为一个模型。

实现的一种方法是将“袋子”或“容器”或其他任何内容添加到保存“对象”的左右值的表中:

CREATE TABLE nested_sets
(
ref BIGINT NOT NULL,
type INT NOT NULL -- 1 = object, 2 = set, 3 = bag
left BIGINT,
right BIGINT
)

INSERT
INTO nested_sets
VALUES (1, 1, 1, 1),
(2, 1, 2, 2),
(3, 1, 3, 3), -- 3 objects in bag 1
(4, 1, 4, 4),
(5, 1, 5, 5),
(6, 1, 6, 6), -- 3 objects in bag 2
(1, 2, 1, 3), -- bag 1, containing objects 1 to 3
(2, 2, 4, 6), -- bag 2, containing objects 4 to 6
(1, 3, 1, 6), -- container 1, containing bags 1 and 2 and, by extension, objects 1 to 6

您可能还希望将 leftright 字段从 nested_sets 表移动到描述实体的主表,或者,您可能希望将所有实体移至一个表中。这取决于您对“包”、“容器”和“物体”的定义有多严格。

关于mysql - 嵌套集 - 自下而上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com