标签: tree

从递归树结构创建 JSON 对象

具有这种简单的多对多自引用结构。
一个项目通过表拥有其他项目joins

CREATE TABLE items (
  item_id   serial PRIMARY KEY
, title     text
);

CREATE TABLE joins (
  id        serial PRIMARY KEY
, item_id   int
, child_id  int
);

INSERT INTO items (item_id, title) VALUES
  (1, 'PARENT')
, (2, 'LEVEL 2')
, (3, 'LEVEL 3.1')
, (4, 'LEVEL 4.1')
, (5, 'LEVEL 4.2')
, (6, 'LEVEL 3.2')
;

INSERT INTO joins (item_id, child_id) VALUES
  (1, 2)
, (2, 3)
, (3, 4)
, (3, 5)
, (2, 6) …
Run Code Online (Sandbox Code Playgroud)

postgresql tree cte json recursive

5
推荐指数
1
解决办法
7183
查看次数

如何将一组扁平树变成一棵具有多个叶子的树?

我们有这个漂亮的 Postgres 树生成器。然而,它会产生一棵树的切口,而不是一次产生整棵树:

item_id jsonb_pretty
1   {
    "title": "PARENT",
    "item_id": 1,
    "children": {
        "title": "LEVEL 2",
        "item_id": 2,
        "children": {
            "title": "LEVEL 3.2",
            "item_id": 6
        }
    }
}
1   {
    "title": "PARENT",
    "item_id": 1,
    "children": {
        "title": "LEVEL 2",
        "item_id": 2,
        "children": {
            "title": "LEVEL 3.1",
            "item_id": 3,
            "children": {
                "title": "LEVEL 4.1",
                "item_id": 4
            }
        }
    }
}
1   {
    "title": "PARENT",
    "item_id": 1,
    "children": {
        "title": "LEVEL 2",
        "item_id": 2,
        "children": {
            "title": "LEVEL 3.1",
            "item_id": …
Run Code Online (Sandbox Code Playgroud)

postgresql tree cte json recursive

5
推荐指数
1
解决办法
1478
查看次数

是否可以在行存储索引后面公开 B 树的最大深度,或者查看特定查询遍历了多少个节点的方法?

我个人对数据结构很感兴趣,并且知道行存储索引存储在它们后面的 B 树,我总是很好奇尝试可视化那些 B 树对于给定表/索引的样子。

有没有办法通过执行计划、统计信息、运算符属性、索引/表属性等关联或公开给定行存储索引的 B 树中的节点数?

此外,我可以做同样的事情来确定特定查询遍历的节点数吗?

如果有一种方法也可以确定 B 树中的叶节点数,则加分。

index tree sql-server btree sql-server-2016

2
推荐指数
1
解决办法
35
查看次数

递归外键的排除约束(以树为例)

我有带有递归外键的表。它只是层次树结构:

CREATE TABLE tree (
    id              INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    value           INTEGER NOT NULL,
    tree_id         SMALLINT NOT NULL CHECK (tree_id > CAST(0 AS SMALLINT)),
    parent_id       INTEGER REFERENCES tree ON DELETE RESTRICT ON UPDATE RESTRICT,

    EXCLUDE (tree_id WITH =) WHERE (parent_id IS NULL) -- allow only one root within tree
);
Run Code Online (Sandbox Code Playgroud)

如何拒绝插入非空parent_id和不同的记录tree_id?即外键parent_id只能引用id同一个内的主键tree_id

postgresql tree foreign-key constraint recursive

0
推荐指数
1
解决办法
221
查看次数