And for clarity:

Product
-----------
productkey (PK)

Page
-------
productkey (PK :: o2m child FK to Product)
pageno (PK)

Text
-------
productkey (PK :: o2m child FK to Page)
pageno (PK :: o2m child FK to Page)
textno (PK)

As you can see, the PKs are the FKs to the next parent, plus some
additional identifier.  The product contains pages, which contain text
elements.  If I need to get all the text elements for a product, I can
build the TQL query easily enough.

Ken

On Dec 18, 9:00 am, Ken Cummins <[email protected]> wrote:
> I actually agree with you, I've just been working with the schema as
> it was given to me.  I'll have to work out how the change may impact
> other parts of the application.
>
> It would be nice to have composite FKs, and/or be able to use a column
> for more than one relationship...  ;)
>
> Ken
>
> On Dec 17, 5:15 pm, "Mark Mandel" <[email protected]> wrote:
>
> > This right?
>
> > Product
> > -------------------
> > ProductID
>
> > Page
> > -------------------
> > ProductID (FK to product)
> > PageNumber
>
> > Text
> > -------------------
> > ProductID (FK to product)
> > PageNumber (FK to Page:PageNumber)
>
> > Why not map this as:
>
> > Product
> > -------------------
> > ProductID (PK)
>
> > Page
> > -------------------
> > PageID (PK)
> > ProductID (FK to product)
> > PageNumber
>
> > Text
> > -------------------
> > PageID(PK, FK to Page)
>
> > And everyone is happy, and it is a helleva lot easier to map in Transfer.
>
> > Mark
>
> > On Thu, Dec 18, 2008 at 10:04 AM, Ken Cummins <[email protected]> 
> > wrote:
>
> > > Ah!  There can be any number of text elements per page, depending on
> > > the format of that particular page.  And the user can change the
> > > format of the page on the fly.  Therefore, you need to know which text
> > > element of which page of the product.  And the pages do not have a
> > > monolithic PK, as you can have any number of pages per product.
>
> > > Here's a very fast (and likely ugly) attempt at an ER diagram...
>
> > > Product | ProductID  <------<<  Page | ProductID* | PageNumber <------
> > > << Text | ProductID** | PageNumber** | TextElementNumber
>
> > > * FK from page to product (o2m for Product.getPageArray())
> > > ** FK from text element to page (o2m for Page.getTextArray())
>
> > > There is also a o2m from Product to Text with a condition of
> > > Text.PageNumber = 0 (I'd rather set up a page 0, but I have to deal
> > > with a manager...)
>
> > > Ken
>
> > > On Dec 17, 4:54 pm, "Mark Mandel" <[email protected]> wrote:
> > >> Sorry.. still not getting it.
>
> > >> Why not just have a FK -> PK relationship between Page and Text?
> > >> That's not hard coded.
>
> > >> It seems that there would only be one Text element per page? or am I
> > >> misunderstanding? I don't know what the ER diagram is.
>
> > >> Mark
>
> > >> On Thu, Dec 18, 2008 at 8:46 AM, Ken Cummins <[email protected]> 
> > >> wrote:
>
> > >> > Because each page could have a different layout, and the number of
> > >> > text blocks could differ.  So I need to track which text block on
> > >> > which page for which product.  If it helps you visualize the issue,
> > >> > there will also be image components on each page...
>
> > >> > These are user-designed products, so they are highly dynamic.  Hard-
> > >> > coding a solution isn't going to work...  :P
>
> > >> > Ken
>
> > >> > On Dec 17, 3:41 pm, "Mark Mandel" <[email protected]> wrote:
> > >> >> I'm trying to work my way through your mapping....
>
> > >> >> Why not just link the page directly to a specific text? How come you
> > >> >> need all the messing about with products and page numbers?
>
> > >> >> Mark
>
> > >> >> On Thu, Dec 18, 2008 at 3:23 AM, Ken Cummins 
> > >> >> <[email protected]> wrote:
>
> > >> >> > Gah!  Yet again, I post before my coffee activates...
>
> > >> >> > The link for the example object *should* be:
>
> > >> >> > <link column="productkey" to="Products.Text" />
>
> > >> >> > The idea is that the text objects are part of a o2m relationship 
> > >> >> > with
> > >> >> > the product, but that also reference the pageno.  Now, I'd like to
> > >> >> > have a o2m relationship from product to page, then another o2m
> > >> >> > relationship from page to text. This will be extended to other 
> > >> >> > objects
> > >> >> > as well.
>
> > >> >> > Would I be better off scrapping the direct o2m product to text, and
> > >> >> > adding a function into the decorator? Or can I get transfer to 
> > >> >> > handle
> > >> >> > the complex data modelling?
>
> > >> >> > Ken
>
> > >> >> > On Dec 17, 10:02 am, Ken Cummins <[email protected]> wrote:
> > >> >> >> I'm looking (still) at a table with a compositeid that I want to be
> > >> >> >> the parent of a onetomany relationship. I am considering using one
> > >> >> >> portion of the compositekey as the o2m key, and adding a condition 
> > >> >> >> to
> > >> >> >> filter it to the second part of the key.
>
> > >> >> >> My question (and this is without a lengthy bout of of my usual 
> > >> >> >> test/
> > >> >> >> alter/test/alter/test/try to remember where I was/alter several 
> > >> >> >> things/
> > >> >> >> test/wish I had backed things up/drink more coffee cycle) is if I 
> > >> >> >> can
> > >> >> >> reference the current object in my where clause.  i.e.:
>
> > >> >> >> <object name="page" table="productpages" decorator="BaseDecorator">
> > >> >> >>         <compositeid>
> > >> >> >>                 <parentonetomany class="Products.Product" />
> > >> >> >>                 <property name="pageno" />
> > >> >> >>         </compositeid>
> > >> >> >>         <property name="stylekey" type="numeric" />
> > >> >> >>         <onetomany name="text" lazy="true">
> > >> >> >>                 <link column="productkey" to="Products.Product" />
> > >> >> >>                 <collection type="array">
> > >> >> >>                         <condition where="pageno = {pageno}"/>
> > >> >> >>                         <order property="textno" />
> > >> >> >>                 </collection>
> > >> >> >>         </onetomany>
> > >> >> >> </object>
>
> > >> >> >> This also brings up the problem of using the key for a o2m child as
> > >> >> >> part of the o2m parent relationship...  Grrr...
>
> > >> >> >> Ken
>
> > >> >> --
> > >> >> E: [email protected]
> > >> >> W:www.compoundtheory.com
>
> > >> --
> > >> E: [email protected]
> > >> W:www.compoundtheory.com
>
> > --
> > E: [email protected]
> > W:www.compoundtheory.com
--~--~---------~--~----~------------~-------~--~----~
Before posting questions to the group please read:
http://groups.google.com/group/transfer-dev/web/how-to-ask-support-questions-on-transfer

You received this message because you are subscribed to the Google Groups 
"transfer-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/transfer-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to