Fwd: Ordered Hierarchies.

Todd Reed <[email protected]> Thu, 18 Jul 2019 08:45:17 -0500
Newsgroups gmane.comp.db.postgresql.sql
Message-ID <CALg7qj2Qf7V1k_5bcfZJA7Y2489Vgtqx-SESNwvMKks2Zm9TQg@mail.gmail.com>
Essentially you will be doing a parent-child recursive lookup.  At a basic
level, you table would look have three columns: [ID], [Name],[ParentID].
From there, you will need to perform a recursive lookup.  This isn't a
PostgreSQL Example, but should give you the theory and idea:
https://www.codeproject.com/Articles/818694/SQL-Queries-to-Manage-Hierarchical-or-Parent-child.
 I assume that if the ParentID is 0 or null, then it is at the root level.
If it's not going to be sorted by the name (alpha), you may need to add a
'Sort' column, too.

I've done something similar a menu system, but have always limited the
number of recursions.  The only thing you have to watch out for is
orphans.

On Wed, Jul 17, 2019 at 9:46 PM Tim Uckun <[email protected]> wrote:

> Hi all.
>
> I have read articles about handling hierarchies in databases but none of
> them deal with how to keep order in the hierarchy.  For example  take a
> typical outline.
>
> 1
> 1.1
> 1.1.1
> 1.1.2
> 1.2
> 2
>
> etc.
>
> In this scenario the following actions are common.
>
> 1. move the item up.  1.1.2 becomes 1.1.1 and 1.1.1 becomes 1.1.2
> 2 Move the item down.  The opposite of above.
> 3. Move the item left. 1.1.2 becomes 1.2 and 1.2 becomes 1.3 and on down
> the 1.X list.
> 4. Move the item right.  1.2. becomes 1.1.3
> 5. Arbitrarily move an item into a hierarchy.  In this case the item
> becomes the highest numbered child under the target parent and all it's
> previous peers get renumbered.
> 6. Arbitrary insert item into a hierarcy.  It becomes the highest numbered
> child in the target parent.
> 7. Delete an item.  This would renumber all peers in the parent greater
> it's own rank.
>
> In addition there are all the normal access patterns of course.
>
> Has anybody ever done anything like this or read an article about doing
> something like this in an efficient way?
>
>
> I should also add that there are lots of more complicated actions one
> could take based on attributes of the nodes such as inheriting from the
> parent nodes some attributes or checking constraints based on parentage etc.
>
>
>