There was reference to a Joe Celko article where he discussed "a
modified reverse tree transversal algorithm" or something similar,
was also called something like "leaf and node".
Parent and child relationships are tracked in one table. Each
member has two integer references which bound subordinate
member's integers. Relationships are added or changed by
increasing/ decreasing these integers for the effected member and
subordinates. It took an evening of messing around with the
concept to finally "get it", but it's pretty cool.
Searching the archives for Celko will probably dredge it up. If not, I
have some light (very) code I think can find and pass on that would
provide an example (if i remember correctly).
Ben Petersen
On 27 Oct 2002, at 23:43, Bernie Corrigan wrote:
> Hi Tom -
>
> This is the multi-level parts breakout problem. We discussed
> this
> on the list way back when and I can't locate the solution; however,
> there is one and you might already have it in your archive.
>
> Bernie
>
> ----------------------------------------
> At 09:09 AM 10/27/2002 +1100, you wrote:
> >G'day,
> >
> >I said:
> >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >I am wanting to create a parent child relationship
> >between trading entities in the same table so I can
> >allow users to report on just one trading entity or
> >all under multiple levels of holding companies.
> >
> >I have created the table TradingEntity and the PK
> >col is EntityID. I have just programmatically
> >added the col ParentEntityID to the table with a
> >FK on ParentEntityID to reference EntityID.
> >
> >When I try to make another structural change in the
> >object manager (delete SYS_ROWVER) I get the error
> >message [The referenced table TradingEntity does not
> >have a compatible Primary Key.]
> >
> >Which is the bug, allowing me to programmatically
> >create the FK or not allowing me to edit the table
> >after it is done?
> >
> >I know I can do it with a RULE, just interested to
> >know the "proper" way to do it in R:BASE.
> >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >But I was wrong.
> >
> >With this:
> >
> >CREATE TABLE `TradingEntity` +
> >(`EntityID` INTEGER NOT NULL +
> >('Value for EntityID cannot be null.') , +
> > `Org_ID` INTEGER NOT NULL +
> >('Value for Org_ID cannot be null.') , +
> > `HeaderReqs` TEXT (70) , +
> > `EntityName` TEXT (70) , +
> > `AddressID` INTEGER , +
> > `CNRowIDTel` INTEGER , +
> > `CNRowIDFax` INTEGER , +
> > `CNRowIDEmail` INTEGER , +
> > `CNRowIDURL` INTEGER , +
> > `EntityNote` TEXT (200) , +
> > `CrntAvailable` TEXT (1) DEFAULT 'Y' NOT NULL , +
> > `ParentEntityID` INTEGER , +
> > `SYS_ROWVER`= +
> > (IFNULL((SYS_ROWVER+1),0,(SYS_ROWVER+1))+
> >) INTEGER )
> >ALTER TABLE `TradingEntity` ADD PRIMARY KEY +
> >(`EntityID` ) +
> >('Values for rows in TradingEntity must be unique.',+
> > 'Cannot delete - values exist in another table.',+
> > 'Cannot update - values exist in another table.')
> >AUTONUM `EntityID` IN `TradingEntity` USING +
> >4. 1. NONUM
> >RULES 'Value must exist in TradingEntity ' +
> > FOR `TradingEntity` SUCCEEDS +
> > WHERE EXISTS (SELECT EntityID FROM TradingEntity
> > WHERE T+
> >radingEntity.EntityID = TradingEntity.ParentEntity+
> >ID )
> >
> >In the browser I cannot get the existing values
> >for EntityID accepted into ParentEntityID without
> >a rule violation message on exit from the last
> >row in the browser.
> >
> >Any clues?
> >
> >Warmest regards,
> >
> >
> >Tom Grimshaw
> >coy: Just For You Software
> >tel: 612 9552 3311
> >fax: 612 9566 2164
> >mobile: 0414 675 903
> >
> >post: PO Box 470 Glebe NSW 2037 Australia
> >street: 3/66 Wentworth Park Rd Glebe NSW 2037
> >
> >email: [EMAIL PROTECTED]
> >web: www.just4usoftware.com.au
> >
> >"... the control of impulse -- is the first principle of
> >civilization."-- Will Durant, Pulitzer Prize winning philosopher,
> >writer and historian
> >
> >the most needed product in the world can be found at
> >www.thewaytohappiness.org
> >
> >This email and any files transmitted with it are confidential to the
> >intended recipient and may be privileged. If you have received this
> >email inadvertently or you are not the intended recipient, you may
> >not disseminate, distribute, copy or in any way rely on it. Further,
> >you should notify the sender immediately and delete the email from
> >your computer. Whilst we have taken precautions to alert us to the
> >presence of computer viruses, we cannot guarantee that this email and
> >any files transmitted with it are free from such viruses.
> >
> >================================================
> >TO SEE MESSAGE POSTING GUIDELINES:
> >Send a plain text email to [EMAIL PROTECTED]
> >In the message body, put just two words: INTRO rbase-l
> >================================================
> >TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED] In
> >the message body, put just two words: UNSUBSCRIBE rbase-l
> >================================================ TO SEARCH ARCHIVES:
> >http://www.mail-archive.com/rbase-l%40sonetmail.com/
> >
> >================================================
> >TO SEE MESSAGE POSTING GUIDELINES:
> >Send a plain text email to [EMAIL PROTECTED]
> >In the message body, put just two words: INTRO rbase-l
> >================================================
> >TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED] In
> >the message body, put just two words: UNSUBSCRIBE rbase-l
> >================================================ TO SEARCH ARCHIVES:
> >http://www.mail-archive.com/rbase-l%40sonetmail.com/
> >
>
> ================================================
> TO SEE MESSAGE POSTING GUIDELINES:
> Send a plain text email to [EMAIL PROTECTED]
> In the message body, put just two words: INTRO rbase-l
> ================================================
> TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED] In
> the message body, put just two words: UNSUBSCRIBE rbase-l
> ================================================ TO SEARCH ARCHIVES:
> http://www.mail-archive.com/rbase-l%40sonetmail.com/
>
================================================
TO SEE MESSAGE POSTING GUIDELINES:
Send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: INTRO rbase-l
================================================
TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: UNSUBSCRIBE rbase-l
================================================
TO SEARCH ARCHIVES:
http://www.mail-archive.com/rbase-l%40sonetmail.com/