Michael Glassford wrote:
> 
> 
> hcarvalhoalves wrote:
>> On Aug 14, 11:48 pm, Russell Keith-Magee 
>> <freakboy3...-re5jqeeqqe8avxtiumwx3w-xmd5yjdbdmrexy1tmh2...@public.gmane.org>
>> wrote:
>>> On Sat, Aug 15, 2009 at 8:09 AM, 
>>> hcarvalhoalves<hcarvalhoal...-re5jqeeqqe8avxtiumwx3w-xmd5yjdbdmrexy1tmh2...@public.gmane.org>
>>>  wrote:
>>>
>>>> On Aug 13, 9:30 am, Russell Keith-Magee 
>>>> <freakboy3...-re5jqeeqqe8avxtiumwx3w-xmd5yjdbdmrexy1tmh2...@public.gmane.org>
>>>> wrote:
>>>>> On Thu, Aug 13, 2009 at 12:04 AM, Michael 
>>>>> Glassford<glassfo...-re5jqeeqqe8avxtiumw...@public.gmane.org> wrote:
>>>>> Secondly: I'm sensitive to the extent that 'on delete cascade' et al
>>>>> are phrased in SQL specific terms. I fully acknowledge the use case -
>>>>> what happens to a FK when the object it points to is deleted - but I
>>>>> want to make sure that we phrase it in a way that makes sense with
>>>>> non-SQL backends. Have you had any thoughts about this?
>>>> Maybe using the UML terms to declare these associations, as it makes
>>>> sense in an ORM environment, and is not SQL specific.
>>>> ForeignKey(composition=True)
>>>> Strong association -> relates to SQL's CASCADE or similar behavior on
>>>> custom backends
>>>> ForeignKey(aggregation=True)
>>>> Weak association -> relates to SQL's SET_NULL or similar behavior on
>>>> custom backends
>>>> ForeignKey(restrict=True)
>>>> Optional restrict to raise Exception on delete -> relates to SQL's
>>>> RESTRICT
>>> This is an interesting idea - it's nicely object-based, and it gets
>>> around the SQL-specific terminology. However, it does introduce some
>>> nasty term-overloading with the phrase "aggregation".
>>>
>> This is UML, so anyone familiar with it understands Composition vs
>> Aggregation. It doesn't help if the person doesn't know UML, of
>> course, but I'm not just coming up with names of my own - it's an
>> industry standard. OTH, WEAK and STRONG are terms used neither by SQL
>> or UML, so I would be less in favor of using something like this.
>>
>> I only see two options: either use standard terms that appear in
>> literature (hence my idea for UML terms), or phrase it in a way that
>> makes very clear what happens. E.g.:
>>
>> ForeignKey(..., propagate_on_delete=True)
>> CASCADE
>>
>> ForeignKey(..., propagate_on_delete=False, null=False)
>> RESTRICT
>>
>> ForeignKey(..., propagate_on_delete=False, null=True)
>> SET NULL
>>
>> ForeignKey(..., propagate_on_delete=False, default=XXX)
>> SET DEFAULT
>>
>> ForeignKey(..., propagate_on_delete=False)
>> Raises Exception, need to define either "null" or "default"

Drat, my email client sent this before I was finished with it. I was 
going to say:

This eliminates the possibility of RESTRICT (not CASCADE) when null=True 
or default=xxx
are specified, which I think goes to far. I prefer either Russell 
Keith-Magee's original suggestion:

ForeignKey(XXX, association=STRONG)
   - The current arrangement, equivalent to SQL ON DELETE CASCADE

ForeignKey(XXX, association=WEAK, null=True)
   - The equivalent of SQL ON DELETE SET NULL

ForeignKey(XXX, association=WEAK, default=xxx)
   - The equivalent of SQL ON DELETE SET DEFAULT

ForeignKey(XXX, association=PROTECTED)
   - The equivalent of SQL ON DELETE RESTRICT. Deletion is prevented.

Or my original suggestion (using on_delete=CASCADE, SET_NULL, 
SET_DEFAULT, PREVENT) or a modified version of my original suggestion to 
make it more like the above by combining SET_NULL and SET_DEFAULT into a 
single SET_VALUE (which would use default if available, otherwise would 
set to None if null=True).

Drat


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

Reply via email to