@ Adrian Klaver: Oh, so you're suggesting I make separate tables for
kingdoms, classes and on down to species. I'll research foreign keys and
see what I can come up with. I hope I can make separate tables for mammal
species, bird species, fish species, etc. There are just so many species -
especially fish - the spreadsheets I use to organize them are just about
maxed out as it is.

I've been using the Catalogue of Life as a guide, but I'm limited because I
can never get their downloads to work. So all I can do is go to their
website and copy a bunch of genera and species at a time.

However, I did open up some of the tables I downloaded and was amazed at
how apparently amateurish they are. Yet their site works just fine and is
fast enough.

@ Alban Hertroys: What does EOL mean? It reminds me of Encyclopedia of
Life, which is doing what I was attempting to do years ago.

On Sun, Oct 25, 2015 at 2:07 PM, Alban Hertroys <haram...@gmail.com> wrote:

>
> > On 25 Oct 2015, at 19:38, Adrian Klaver <adrian.kla...@aklaver.com>
> wrote:
> >
> > On 10/25/2015 11:12 AM, David Blomstrom wrote:
> >> I'm sorry, I don't know exactly what you mean by "definitions." The
> >> fields Taxon and Parent are both varchar, with a 50-character limit.
> >> ParentID is int(1).
> >
> > By definition I meant the schema, so from the below:
> >
> > CREATE TABLE t (
> > N INT(6) default None auto_increment,
> > Taxon varchar(50) default NULL,
> > Parent varchar(25) default NULL,
> > NameCommon varchar(50) default NULL,
> > Rank smallint(2) default 0
> > PRIMARY KEY (N)
> > ) ENGINE=MyISAM
>
> That can indeed be solved using a hierarchical query (provided you have a
> suitable table in PG); something akin to:
>
> WITH RECURSIVE taxons AS (
> --  Hierarchical root nodes
>         SELECT N AS id, Taxon, Rank, 1 AS level, '' || N AS Path -- A
> useful addition explained further down
>         FROM t
>         WHERE ParentID IS NULL
>
> -- Child nodes
>         UNION ALL
>         SELECT  N AS id, Taxon, Rank, taxons.level +1 AS level,
> taxons.Path || ':' || N AS Path
>         FROM taxons
>         JOIN t ON taxons.id = t.ParentID
> )
> SELECT id, Taxon, Rank, level
> FROM taxons
> ORDER BY Path
> ;
>
> The Path-bit looks complicated, but basically that just appends ID's
> within the same hierarchy such that, when sorted on that field, you get the
> hierarchy in their hierarchical order. What the hierarchy would look like
> if it were shown as a file hierarchy with sub-directories expanded, for
> example. That's pretty much the only viable alternative (alternatives vary
> on the column used to create the hierarchy), which is why I added it to the
> example.
>
> The fun thing with hierarchical queries is that you can add all kinds of
> extra information and make it trickle down to the child nodes, such as the
> items that make up the root of the hierarchy (pretty useful for grouping),
> for example or a field that calculates a string to prepend for indentation,
> etc. Or a computation that depends on values in parent items (I used this
> successfully in a bill of materials to calculate absolute quantities by
> volume, quantities by weight and cost of components in the end product
> where they were given relative to 1 kg of their parent, for example).
>
> It's highly flexible and powerful (and standard SQL), but it takes a bit
> of time to get in the right mindset.
>
> PS. I usually write my hierarchical queries in Oracle, which isn't quite
> as good at them as Postgres is, but it's what we have @work. Hence, I'm not
> sure I got the syntax 100% correct. We're working on getting PG in for a
> project upgrade (replacing RDB on OpenVMS, which will go EOL in <10 years!)
> - fingers crossed.
>
> Cheers!
>
> Alban Hertroys
> --
> If you can't see the forest for the trees,
> cut the trees and you'll find there is no forest.
>
>


-- 
David Blomstrom
Writer & Web Designer (Mac, M$ & Linux)
www.geobop.org

Reply via email to