I'm not following you on this part:

Having real children with real parents then the parent-child relationship is incorrect on many levels - because as I said before "a parent can die" and you don't want the children records to disappear!!!!

Are you talking real life parents and children, or data? If data, in a parent/child relationship, the child record is dependent on the parent, and does not exist on it's own. If you're wanting to keep the orphaned records when the parent record is deleted, then a parent/child relationship may not be the appropriate setup. Then again, you could disable cascading deletes, at least with other db's, and I assume with Cache.

For relationships, are they defined in the classes (parent/child)? Something like:

In the parent table:

Relationship MyChild As ABCCompany.Data.Parents.Kids [ Cardinality = children, Inverse = ParentsInfo ];

and in the child table:

Relationship ParentsInfo As ABCCompany.Data.Parents [ Cardinality = parent, Inverse = MyChild ];

Then, just select from whichever table you need, and join on the relationship field. I typically select from the child table and use the arrow syntax ( ->) to get the parent data for each entry.