Hi all-

Looking for advice on the following scenario: consider an object graph made up of entities called "stations" (i.e. like subway stations all over town). Each station has two or more "port" entities (i.e. the openings in and out of the station), which each have one or more "pipe" entities (i.e. the tunnels that connect the stations to one another). A single port might have more than one pipe in the case that there is a fork in the tunnel, and a train exiting the port could end up in one of a variety of stations.

The station has a to-many "ports" relationship with a cascade delete rule, and the port has a to-one "station" relationship with a cascade delete rule - these are inverses on one another. So now, if I delete a station, all of its ports will also be deleted from the object graph. Deleting a port, on the other hand, will remove it from the ports relationship on the station, but leave the station otherwise intact.

My trouble comes in relating the ports and the pipes. I'd like to model the pipe by having a to-one "sourcePort" relationship (to represent the port at the start of the tunnel - note: all of my tunnels are one-way) and a to-one "targetPort" relationship to represent the port at the end of the tunnel. A port would have a to- many relationship with pipe as the target entity. The difficulty comes in specifying an inverse... for the port's "pipes" relationship, I'm forced to choose from either the sourcePort or the targetPort as the inverse, and for the pipe's sourcePort or targetPort relationships, setting either to port's "pipes" breaks the inverse setting of the other.

I can model this many-to-many between ports and pipes with some cardinality rules for the pipe (only two ports for a pipe), but then it feels like I'm doing extra work in code by having to determine which of a pipe's ports is the sourcePort, and which is the targetPort. Alternately, I could leave the relationships unidirectional and be sure to delete attached pipes when deleting a port, and remove attached pipes from port's pipes set when deleting a pipe.

The core data documentation speaks strongly against unidirectional relationships... can anyone suggest better modeling for this scenario? Or testify to the soundness of unidirectional relationships if managed as described? Any help is appreciated!

John


John Pannell
Positive Spin Media
http://www.positivespinmedia.com
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to