On Wed, 2009-09-16 at 17:15 -0500, Javier Guerra wrote:
> On Wed, Sep 16, 2009 at 1:01 PM, PlanetUnknown
> <nikhil.kodil...@gmail.com> wrote:
> >
> > Thanks Karen.
> > Let me explain it a bit more.
> > e.g.
> > All CONTACT details are present in one table - email, home address,
> > work address, home phone, work phone etc.
> > Forget about the statement about growing for now.
> > Since each user "has-a" contact it is a pure one-to-one relationship
> > and not a one-to-many or many-to-one; each user in the USER table will
> > have only one corresponding entry in the CONTACT table.
> > Does this help explaining the issue ?
> > The above is just an example, the main question is how does one
> > usually implement a "has-a" relationship in dJango.
> 
> 
> i think a big part of your problem is that you're using java-inspired
> OOP terminology.  it's much easier if you use RDBMS terminology (after
> all, it will all be stored in a RDBMS).  I guess that the Oracle/Java
> systems you're used to show the DB as a persistence system for
> objects, while Django's ORM creates classes that represent the DB.
> same thing, different philosophies.
> 
> the many-to-one relationship is exactly what you said you used in
> Oracle: a user-id field on the Contact table.

To me that indicates the wrong relationship. The OP said that all Users
have exactly one Contact. He didn't say that Contacts have users. He
could have a Business model, which could have many contacts etc.

I would implement this as ForeignKey to Contact on the User model, with
a unique constraint.

> 
> the one-to-one relationship is the same thing, but with an added
> UNIQUE constraint on that key, so that you can have only one contact
> for each user.  it has nothing to do with inheritance.  the fact that
> inheritance is implemented with one-to-one relationships is just
> incidental.
> 
> in most cases, you want the possibility of several contacts per user,
> so you can use the many-to-one.  the only drawback if that you get an
> extra step to go from user to contact: "User.contact_set.all()". if
> you use one-to-one, the ORM lets you skip that step and write simply
> "User.contact".
> 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to