On Dec 4, 2009, at 9:19 AM, Kieran Kelleher wrote: > Actually, let me rephrase that. My brain was not working earlier since I had > not yet had breakfast :-)
Mmmmm. Guinness! > The lack of deferred constraints prevents one using foreign key constraints > in MySQL (InnoDB specifically supports FK constraints). The problem is that > MySQL will not let you delete related rows during a transaction, rather than > let you execute the full statement and then check for FK integrity afterwards. Exactly, except that if EOF happens to be in a good mood and gets the right sequence by accident then it will work. > Please correct me if I am mistaken in my thinking here, but in WebObjects, > the "Deny" delete rule of a relationship essentially does the same thing. > Also, in java code, we have the ERXGuardedInterface~ (from now on let's say > "~" means "or a class spelled something like that) which implements > canDelete() and that allows us to prevent deletion based on logic. We also > have validateForDelete to prevent deletions in EOF logic. > > Since I have never used FL constraints in MySQL, Chuck or someone else can > explain their exact role/benefit better I am sure. If other things are touching your DB, it protects your referential integrity. I have written apps that have to deal with FKs being invalid due to no constraints and it is a PITA. Doable, especially with Wonder, but still, I like being able to assume that the FK constraint has my back. > Now on the orphan issue. If you have orphans, it means that the FKs did not > get nullified or cascade deleted or sth like that. It means your database did > not roll back the failing transaction fully. The reason transactions protect > you is because when you delete an object and the related items that have a > Nullify relationship Delete rule, WO updates those foreign keys to null in > the same transaction. Or that some other application is touching your DB. > And if you are dealing with orphans on a MySQL database, it means one of > three things are wrong. > > (1) ... > (2) ... > (3) ... > (4) ... (5) You're DB doesn't live in a hermetically sealed environment and other things can change your data without EOF's blessing. Even if the only thing touching my app's DB today is my EOF app, I don't know that that is going to be the case in the future and I can't rely on EOF keeping maintaining Referential Integrity. Call it future-proofing, CYA, Anal Retentiveness, whatever, but if I can enforce referential integrity in the DB, that's where I will do it, and not being able to is a BIG downside to me. Dave > > > On Dec 4, 2009, at 7:57 AM, David Avendasora wrote: > >> >> On Dec 4, 2009, at 7:17 AM, Kieran Kelleher wrote: >> >>> Fair enough. Finally, we have one specific strike against it. ;-) >>> >>> Since we have Delete rules in the EOModel, is this feature a "safety net" >>> that is needed for external non-WO apps that are accessing the database? >> >> What do you mean? That EOF will clean up orphaned objects that didn't get >> cascade-deleted by EOF when the related object was deleted? No. If EOF loads >> rows that have invalid FKs in them, it will create a fault for that object, >> then when you go to try to follow that relationship and the fault is fired, >> you'd get a missing object exception. I've had to deal with this exact >> situation before. >> >>> I have never implemented constraints and have yet to have an orphan record >>> since transactions/rollback protect against that, right? >> >> How would transactions protect you from having an invalid FK if you don't >> have any FK constraints? >> >> Dave >> >> >>> >>> -Kieran >>> >>> On Dec 4, 2009, at 12:39 AM, Chuck Hill wrote: >>> >>>> >>>> On Dec 3, 2009, at 5:44 PM, Lachlan Deck wrote: >>>> >>>>> On 04/12/2009, at 12:25 PM, Kieran Kelleher wrote: >>>>> >>>>>> I was just wondering why people were saying disaster, toy, etc .... >>>>>> wondering if I am missing something and going to lose all my data next >>>>>> week! >>>>>> >>>>>> Like I said, I have not used FrontBase or PostgreSQL in production and >>>>>> have never touched PostgreSQL, so if it is comparison you are after, I >>>>>> don't have one. However I will say that I started using MySQL at 4.0, >>>>>> then 4.1 and now 5.0. Being the stickler for learning as much as I think >>>>>> I need to do something right, I bought the original Jeremy Zawodny book >>>>>> "Advanced MySQL" and that gave me a clear understanding and confidence >>>>>> of how to set the thing up. I have never used the cluster engine >>>>>> (NDB).... yet. I have always used InnoDB. I used MyISAM once for a >>>>>> readonly database (about 5 tables only) that has geocode lookups on >>>>>> tables of about 100 million rows because at the time it appeared faster >>>>>> (with mysql 4.0 at the time) to do points in radius operations which >>>>>> sometimes selected up to 500,000 rows in a select. My main ongoing >>>>>> project is InnoDB and every user is a user that does edits, with a small >>>>>> percentage of users absolutely hammering the database with production >>>>>> processing during business hours each day. I replicate to 3 slaves on >>>>>> that project purely for backup. It runs 24/7 and almost never have any >>>>>> "Scheduled Maintenance" downtime garbage because of the fact that the >>>>>> replication slaves are where the backups happen. One slave is remote and >>>>>> 2 onsite with the master. The binary logs on the master are written to a >>>>>> separate phyaical drive >>>>>> >>>>>> Why do I like it? >>>>>> - It is free >>>>>> - It has never left me down - no data/table corruption >>>>>> - It is simple to set up and configure >>>>>> - replication is a breeze to set up >>>>>> - It has multiple engine types for different scenarios >>>>>> - and finally the reason that most people like what they use: "I am >>>>>> comfortable with it" ;-) >>>>>> >>>>>> >>>>>> What would I like that I think I might be missing? >>>>>> - transactional structure changes (ie., create table and roll back.) >>>>>> transactions in InnoDB only apply to table/record edits themselves. >>>>> >>>>> + Deferred constraints! >>>> >>>> >>>> That is a pretty big strike against MySQL in my books. >>>> >>>> >>>> Chuck >>>> >>>> -- >>>> 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/kieran_lists%40mac.com >>>> >>>> This email sent to kieran_li...@mac.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/webobjects%40avendasora.com >>> >>> This email sent to webobje...@avendasora.com >>> >>> >> >> David Avendasora >> Senior Software Engineer >> K12, Inc. >> >> ***** >> WebObjects Documentation Wiki : >> http://wiki.objectstyle.org/confluence/display/WO/ >> ***** >> WebObjects API: >> http://developer.apple.com/legacy/mac/library/documentation/MacOSXServer/Reference/WO54_Reference/index.html >> ***** >> > > > David Avendasora Senior Software Engineer K12, Inc. ***** WebObjects Documentation Wiki : http://wiki.objectstyle.org/confluence/display/WO/ ***** WebObjects API: http://developer.apple.com/legacy/mac/library/documentation/MacOSXServer/Reference/WO54_Reference/index.html ***** _______________________________________________ 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