[AccessD] 2 Questions

Max Wanadoo max.wanadoo at gmail.com
Wed Mar 10 09:18:37 CST 2010


Not really, when they click to delete the "header" record they get a msg
saying "xyz, AND ALL TRansaction Records", and if they still want to do it,
they get prompted for a password linked to their login details saying what
they can and cannot do. Only then do i delete it - and sometime,
occasionally, I wrap the delete code inside a BEGIN TRANSACTION END
TRANSACTION.

Max



On 10 March 2010 14:05, Rocky Smolin <rockysmolin at bchacc.com> wrote:

> Cascade delete has it's risks as you point out - but I find it very useful
> from the user's side for certain issues like deleting a purchase order or a
> sales order where, without cascade delete,  the user has to delete each
> detail record from the P.O. or S.O. before they can delete the header
> record.
>
> Rocky
>
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
> Sent: Wednesday, March 10, 2010 5:35 AM
> To: Access Developers discussion and problem solving
>  Subject: Re: [AccessD] 2 Questions
>
> Tony,
>
> Referential integrity is the foundation of a database.  Without it you are
> hopelessly lost.
>
> 1) Referential integrity essentially says that you can't have a child
> without having a parent (makes sense right?).
>
> So... If you have clients and orders, you can't have an order without
> having
> a client.  More importantly, you can't have an order without selecting a
> SPECIFIC client.  Referential integrity says that you can't DELETE a client
> without deleting all of that client's orders.  Again, makes sense right?
>  If
> you are allowed to delete clients without deleting that client's orders
> then
> you have orders with no clients (see one above).  This just hoses
> everything.  You do reports of all your orders and where they shipped to...
> ooops these orders don't have a client so we can't tell where we shipped
> them to.  We count orders not paid for yet.  Ooops we have orders with no
> client so there is no way to determine that they were paid for.  ANYTHING
> that you have to have the Client record to report on gets trashed.
>
> It's just a bad thing, having orders with no client.  Or any other child
> record without a parent.
>
> This condition is called "orphaned records" because a child with no parent
> is an orphan.  Orphans are "lost", they just cause a raft of issues, all of
> them BAD!
>
> Referential integrity is the business of the database engine, NOT the FE or
> application.  Every database engine, whether Jet, SQL Server, Oracle or any
> other has powerful mechanisms built in for maintaining referential
> integrity.
>
> I mentioned that RE is not the business of the FE, and the reason is
> simple.
> If you have to handle RE then you are CONSTANTLY checking in code whether
> you performed all of the steps necessary to maintain RE.  Furthermore, you
> place that same burden on any other developer accessing your data.
> Suddenly ANY developer trying to update, add or delete records has to be
> concerned with RE.  Most of us developers simply are not trained to do RE
> right, and even if we are, human error creeps in.
> Even worse, I EXPECT that you will use RE, EVERYONE USES RE.  So if you
> don't, and I expect that you are, I don't bother to even attempt to handle
> RE issues and suddenly I am trashing data.
>
> BELIEVE ME (and the other developers on the list should chime in), RE is
> the
> business of the database engine, NOT the developer!
>
> Creating the relationships in the relationship window is how you turn on
> RE.
>
> 1) Open your relationship window.  Click, drag and drop from the PK in the
> parent to the FK in the child.  An "edit relationships" dialog opens.  The
> top check box underneath says "Enforce referential integrity.  Check that
> box.  THAT is what causes JET to perform all of the checks to prevent
> ORPHANS.
>
> 2) The next check says "cascade update...".  This has to do with cascading
> updates to the data in the PK down into the child.  If you use autonumbers
> (surrogate keys) for PKs (and you should), then the PK is never updated and
> you do not need to check this box.  If you use natural keys, then the PK
> data can and will change, and those changes have to be rippled down into
> the
> child FKs.  Cascade update causes JET to do that "cascade" update to the
> child FK fields.
>
> 3) The last check box says "Cascade delete...".  This has to do with
> whether
> you want the database to automatically delete child records if the parent
> record is deleted.  Like everything else, this is fiercely debated but my
> opinion is that this is a BAD idea. The reason is simply that users tend to
> ignore "are you sure" messages.  The more junior the user, the more they
> ignore the "are you sure" messages.  Cascade delete on means that if the
> user accidentally deletes that client record, the orders will just be
> automatically deleted.  The checks, invoices, communications, whatever else
> you have child to client will be automatically deleted.  With one simple
> delete of one teeny little record you can rip huge chunks of your database
> out.
>
> It is a PITA but my method of handling this is to have a delete button
> which
> only specific groups (supervisors / managers etc) can even see.  That
> button
> does the "are you sure" prompt, then runs delete queries which delete the
> child records in the correct order back up to the parent.
>
> Again, this is fiercely debated but how you handle it is less important
> than
> that you UNDERSTAND what this stuff does and why you would or would not use
> it.  After that, it is on your head.
>
> John W. Colby
> www.ColbyConsulting.com <http://www.colbyconsulting.com/>
>
>
> Tony Septav wrote:
> > Hey Asger
> > I am not trying to start a debate. But if I do my joins in a query
> > (with many many tables joined), if  I visually check my results  and
> > find an error (or add code to test for errors), I can strip everything
> > down  and rebuild it back up step by step.  This way I can verify my
> > results and ensure referential integrity. If  1 does not equal 1 then I
> am
> in trouble.
> >
> > Asger Blond wrote:
> >
> >> 2. I use Tools | Relationship to create foreign key constraints
> ("enforce
> referential integrity"). Without foreign key constraints the data will soon
> loose consistency.
> >>
> >> Asger
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
> Version: 9.0.733 / Virus Database: 270.14.129/2605 - Release Date: 03/08/10
> 23:33:00
>
> --
>  AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>



More information about the AccessD mailing list