gpt4 book ai didi

database-design - 数据库设计 : best practices to hierarchical structure

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

我会尽可能清楚地公开 ;)

好吧,我需要存储一些数据,这些数据可以链接到自己作为父>子关系,深度没有限制。

我的第一次尝试是:

entry_id | parent_id | value
1 | NULL | Foo //foo is the grand parent
2 | 1 | Bar //bar is child of Foo
3 | 1 | Baz //baz too
4 | 2 | Bho //bho is child of Bar
5 | 4 | Som //som is child of Bho
6 | NULL | Git //another grand parent
7 | 6 | Tim //Git's child

..等等。

这种结构有效,但它是不可能的(或者至少,我无法完成)仅通过 1 个查询找到所有 Foo 子对象和“子子对象”。这需要一个循环。

我的目标是拥有一个针对 SELECT 查询优化的结构,它可以一次给我所有的关系,比如:

 SELECT "ALL SONS OF Bar"

输出:

  entry_id | parent_id | value
1 | NULL | Bar
4 | 2 | Bho
5 | 4 | Som

但这种结构似乎不允许我这样做。

有什么想法吗?

如果可以的话,我会在 Postgresql 上运行(我想使用数组字段类型,但查询不会很快)

编辑 的 philip 评论:在我的特定情况下,数据不应经常更改,但我可能需要将此结构用于其他类似但不等于数据的任务多次更新。

作为旁注,使用外键(或类似行为)将是最好的(删除一个“父亲”应该删除所有 child - 不允许孤儿)

最佳答案

我认为您会从阅读中受益 Managing Hierarchical Data in MySQL .它讲述了如何将一个平面表变成一个只有几个属性和一些内务处理的层次结构。即使您不打算那样做,它也很有见地。

对于 PostgreSQL,您可以使用 WITH RECURSIVE 查询来完成:WITH Queries (Common Table Expressions) .
您至少需要 8.4 版才能使用它们。

关于database-design - 数据库设计 : best practices to hierarchical structure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3390243/

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