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

各子ノードに最大で1つの親がある場合は、個別のテーブルで関係をモデル化する必要はありません。また、ルートの変更を遅くする代わりにツリーのロードを速くするには、すべての行にルートノードのIDを格納します。これにより、1つの高速クエリでツリーのすべてのノードをロードし、クライアントでツリーを構築できます。

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 に答える