Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: Tree Structure and Db

by SimonClinch (Deacon)
on Jul 06, 2005 at 13:35 UTC ( #472793=note: print w/replies, xml ) Need Help??

in reply to Tree Structure and Db

1) The standard solution is to use a link table from the main table to itself. The link table contains two foreign keys from the same main table, i.e. the main table has TWO one-to-many relationships to the link table, one for parent relation and the other for child relation.

2) But to get performance out of this, it is best to write some access stored procedures (and in some cases perhaps views) which include a GetChild and a GetParent along with any procedures or triggers for insert, update and delete that may be required to simplify and unify access, but which otherwise hide (or rather make it unnecessary to expose) the link-table implementation to the database user ("user" includes any perl code that transacts with it).

One world, one people

Replies are listed 'Best First'.
Re^2: Tree Structure and Db
by simonm (Vicar) on Jul 06, 2005 at 16:26 UTC
    In a tree-wise data structure, with only one parent per child, what is the perceived advantage of using this linking table rather than just adding the parent ID to the main table?
      A link table is the normal way to enforce referential integrity in many to many relationships (0 or 1 counts as many for these purposes) and in this case prevents orphans; it also enables you to define different types of relationship without putting more illegal or awkwardly-implemented constraints (and adding maybe-null foreign keys for them) on the master table.

      One world, one people

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://472793]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2018-06-20 02:56 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (116 votes). Check out past polls.