Orgnode Nested Set
A nested set is a tree data structure that is particularly suited for hierarchical data representation, such as organization structures, categories, or directories. In the context of the OrgNode entity, the nested set model is used to represent an organizational hierarchy.
The nested set model has the following key properties:
Each node in the tree has a left value (lft) and a right value (rgt). These values are integers, unique to each node, and are used to determine the parent-child relationships between nodes. For each node, its lft value is always less than its rgt value. A node is a descendant of another node if the descendant’s lft value is greater than the ancestor’s lft value and the descendant’s rgt value is less than the ancestor’s rgt value. The root_id attribute is used to identify the root node of the tree. All nodes within the same tree share the same root_id. The level attribute indicates the depth of a node in the tree. The root node has a level of 0, and each child node has a level one greater than its parent node. Advantages of the nested set model:
Fast retrieval of hierarchical data: Nested sets enable efficient querying of the tree, such as retrieving all descendants or all ancestors of a node with a single query. Efficient storage: The nested set model allows for compact storage of hierarchical data, as it requires only two additional numeric columns (lft and rgt) to represent the tree structure. Disadvantages of the nested set model:
Slow updates: Modifying the tree structure, such as inserting, deleting, or moving nodes, can be relatively slow due to the need to update the lft and rgt values of multiple nodes. Complexity: The nested set model can be more challenging to understand and implement compared to other tree representations, such as the adjacency list model (where each node only stores a reference to its parent). In summary, the OrgNode nested set model is a tree data structure that provides an efficient way to represent and query hierarchical data, such as organizational structures. It uses lft and rgt values to encode the relationships between nodes and enables fast retrieval of hierarchical data at the cost of slower updates and increased complexity.