1

您将如何保留自定义树结构的根节点,以便可以使用简单的SELECT.

伪代码

class Node {
    Long id;
    String label;
    Node parent;
    List<Node> children;
}

编辑:表格可能如下。随时提出改进建议。

CREATE TABLE NODES(
    ID INTEGER NOT NULL UNIQUE,
    LABEL VARCHAR(255)
);

CREATE TABLE PARENTS_CHILDREN(
    PARENT_ID INTEGER NOT NULL,
    CHILD_ID INTEGER NOT NULL
);
4

2 回答 2

1

您可以使用邻接列表:

node   parent
1      NULL
2      1
3      1
4      2
5      NULL
6      5

可以使用 找到根节点WHERE parent IS NULL

于 2012-08-12T09:55:01.510 回答
1

如果每个子节点最多有一个父节点,则无需在单独的表中对关系进行建模。此外,为了以更慢更改根为代价来更快地加载树,请将根节点的 ID 存储在每一行中。这允许您在一个快速查询中加载树的所有节点并在客户端上构建树。

CREATE TABLE NODES(
    ID          INTEGER NOT NULL UNIQUE,
    ROOT_ID     INTEGER NOT NULL,
    PARENT_ID   INTEGER,
    LABEL       VARCHAR(255)
);
于 2012-08-12T10:05:48.490 回答