On Sat, Jan 24, 2009 at 06:07:12PM -0500, Michael LeSauvage wrote:
> All help appreciated.  The following is my data model.  The idea here is
> that a *Story* can be comprised of many pages.  One, and only one, of those
> pages may be the starting point of the story.  I attempted to model this via
> a MultipleJoin (pages in a story), a ForeignKey(to map to a single page for
> a story), and a link back from the Page using a ForeignKey.
> 
> class Story(SQLObject):
>     """
>     Contains the first page, and meta about a story.
>     """
>     title=UnicodeCol(alternateID=True, length=100)
>     summary=UnicodeCol()
>     pages=MultipleJoin('Page')
>     first_page=ForeignKey('Page', default=None)  #without this, model works
>     #alternate, but feels like a kludge: first_page=IntCol(default=0)
> 
> class Page(SQLObject):
>     """
>     A page in a story.
>     """
>     short_title=UnicodeCol(alternateID=True, length=20)
>     text=UnicodeCol()
>     story=ForeignKey('Story', default=None)
> 
> I clearly don't understand what's going on under the hood.
...
> Heh.  OK, more detail.  The *problem* is that when I generate the database
> (using Turbogears, so automatic via tg-admin sql create), I get told I have
> a circular dependency between Page and Story.  Do I really?i

   Yes, you have. It is easy to see what is going on if you add '?debug=1'
to the database URI and watch the output (or logs - I don't know where TG
puts stdout/stderr).

 1/QueryR  :  CREATE TABLE story (
    id SERIAL PRIMARY KEY,
    title VARCHAR(100) NOT NULL UNIQUE,
    summary TEXT,
    first_page_id INT
)
 1/COMMIT  :  auto
 1/QueryR  :  ALTER TABLE story ADD CONSTRAINT first_page_id_exists FOREIGN
KEY (first_page_id) REFERENCES page (id) 
 1/COMMIT  :  auto

   See? SQLObject created one table and tried to create a constraint - and
failed because there is no the other table.

> Is this
> something I have to worry about?

   No, at least not with SQLObject - don't know about TG. There is a way in
SQLObject to defer constraint creation until all tables are created. I will
show you the way. Later.

   Now I see a problem in your model, and I consider the problem as bigger
problem. After we fix the bigger problem it is possible the problem you
have encountered becomes irrelevant. That's why I said 'later'.
   Let me start with a question that is actually a hint. Is you Story an
*unordered* collection of Pages?! Before answering please remember SQL
doesn't guarantee any order of rows until a query specifies an order.

Oleg.
-- 
     Oleg Broytmann            http://phd.pp.ru/            p...@phd.pp.ru
           Programmers don't die, they just GOSUB without RETURN.

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to