• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: many-to-many relationships and object design
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: many-to-many relationships and object design


  • Subject: Re: many-to-many relationships and object design
  • From: mmalcolm crawford <email@hidden>
  • Date: Thu, 17 Jun 2004 20:28:39 -0700

On Jun 17, 2004, at 6:39 PM, Todd Ransom wrote:

My current model is simple - I have an NSDocument subclass. This class has arrays of objects for actors and scenes. This works great until I want to create a relationship between the two. An actor can participate in multiple scenes and a scene can contain multiple actors.

I have considered creating a relationship class that would act as a table (like a relationship table in a RDBMS) but this seemed like it would be complicated to implement. I tried storing an array of actors in each scene object but then I needed a way for the scene to resolve actor ids to actor objects. Since the actor objects only know about themselves I put this in the NSDocument subclass. But now I can't seem to think of a reasonable way for the scene objects to know which instance of the NSDocument subclass they belong to. I get the feeling that I am trying to work my way through a problem that has a fairly simple solution if only I had more experience with OO design.

Any pointers to info, suggested solutions, or links to source on this would be greatly appreciated. I looked at Apple's docs on "object modeling" but I couldn't turn the abstract information there into any real ideas on how to implement this.

It's reasonable to model the many-to-many directly as arrays (although you might instead use sets):

Actor <<->> Scene


@interface Actor : NSObject
{
NSMutableArray *scenes;
}

@interface Scene : NSObject
{
NSMutableArray *actors;
}


The main conceptual hurdle comes in manipulating the relationship. In the RDBMS relationships are "implicit," so to find out what actors are in a given scene you do a join. To manipulate relationships you "simply" either add or remove records from the join table. In the object world as suggested above relationships are "explicit," represented by arrays. Therefore to add an actor to a scene you cannot simply add the actor to the scene's 'actors' array, to maintain consistency of your object graph you must also ensure that the scene is added to the actor's 'scenes' array. If you cut an actor from the scene, you must ensure that both actor and scene are aware of the deletion. It's not that difficult to implement, but takes a little care and thinking about.

For more about object-relational mapping, you might care to browse through
<http://developer.apple.com/documentation/WebObjects/ Enterprise_Objects/index.html>

mmalc
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.


  • Follow-Ups:
    • Re: many-to-many relationships and object design
      • From: "Thomas L. Davis" <email@hidden>
    • Re: many-to-many relationships and object design
      • From: Todd Ransom <email@hidden>
References: 
 >many-to-many relationships and object design (From: Todd Ransom <email@hidden>)

  • Prev by Date: NSOutlineView problems
  • Next by Date: Window drawing speed
  • Previous by thread: Re: many-to-many relationships and object design
  • Next by thread: Re: many-to-many relationships and object design
  • Index(es):
    • Date
    • Thread