树:如何在持久化时识别/标记根对象?

时间:2012-08-12 09:47:22

标签: java sql tree rdbms

如何以一种简单的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
);

2 个答案:

答案 0 :(得分:1)

您可以使用邻接列表:

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

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

答案 1 :(得分:1)

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

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