I'm happy to model an optional to-one as a to-many. It almost always results in a superior data model because it moves contention off the, e.g., Part, table. That is good and sometimes very good (my example is a User table with lots of rows and optional to-one's that grow like topsy as marketeers devise new user attributes to add). Good data design vs. the cost of a few lines of code for cover methods is a win every time.

I think you need a better example because I'm left wondering how/when PartAttribute and Part rows get created and deleted. If some process outside your control is doing that the to-many is off the table and there are other issues that need to be addressed. If there aren't other processes outside your control, why not right the wrongs of the original design?

        Tom


On Jan 13, 2010, at 4:01 PM, Lon Varscsak wrote:

Okay, let me try to give an example (although a contrived example).

Entity:  Part (PK: partNumber)
Entity:  PartAttributes (PK: partNumber)

It's a to-one relationship from Part to PartAttributes, but the part_attributes table doesn't have to have a row for a given part. If this were a to-many relationship this would result in just an empty NSArray<PartAttributes>. I want partAttributes() to return null.

In the old days the only way to model this was to have a to-many relationship with methods that allow the user to access the data in a to-one way ([[somePart partAttributes] lastObject]). Or you could but an exception handler in:

- (PartAttributes *)partAttributes {
    NS_DURING
        [partAttributes self]; //this would catch the exception thrown
    NS_HANDLER
        [partAttributes release]; //throws away the fault
        partAttributes = nil; //sets the ivar to nil
    NS_ENDHANDLER

    return partAttributes;
}

I was just wondering if this concept of a PK to PK to-one relationship was possible these days without jumping through hoops. For this example I probably wouldn't setup the tables this way in RL, but there are situations where it is valuable and when dealing with legacy table structures you don't usually have a choice.

-Lon


On Wed, Jan 13, 2010 at 4:49 PM, Chuck Hill <ch...@global- village.net> wrote: Modelling it as FK to PK seems like the way to go, unless I am misunderstanding what you need.



On Jan 13, 2010, at 3:24 PM, Lon Varscsak wrote:

Yes it is the same PK in both tables but there are no rows in the relationship. This is a pretty common practice and I just hate modeling a to-many and then provide interfaces as a to-one.

On Wed, Jan 13, 2010 at 4:14 PM, Travis Britt <tbr...@phigment.org> wrote: Short answer: no. Is the PK not really a PK? If it is a real PK, how are there rows without it?

On Jan 13, 2010, at 5:53 PM, Lon Varscsak wrote:
> Is there a way to model an optional to-one relationship from the primary key to a primary key of another object?

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/chill% 40global-village.net

This email sent to ch...@global-village.net

--
Chuck Hill             Senior Consultant / VP Development

Practical WebObjects - for developers who want to increase their overall knowledge of WebObjects or who are trying to solve specific problems.
http://www.global-village.net/products/practical_webobjects








 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/blenko% 40martingalesystems.com

This email sent to ble...@martingalesystems.com

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to