Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Mailing Lists -> Oracle-L -> Re[2]: Limits on referential integrity
Agree on both counts. The simple solution, which I believe is stated in the
Oracle Concepts manuals is that all foreign keyed columns should also be
indexed. A step sadly not taken in this particular case. Love it when you can
make a simple suggestion & fix the problem!!
Dick Goulet
____________________Reply Separator____________________ Author: orantdba <orantdba_at_netscape.net> Date: 1/22/2002 8:07 AM
Hi Dennis,
Agreed this was not the developers fault, it was the DBA's! I don't blame
this on RI being handled by constraints, but on a DBA that doesn't
understand
the consequences, the resulting table level lock could have also been a
problem :-).
BTW, if RI had been handled via the application they would have had the
same
problem.
John
dgoulet_at_vicr.com wrote:
>John,
>
> I have only seen one situation where referential integrity has caused a
>problem that the developer could not prevent. That case involved a foreign key
>with the 'on delete cascade' option turned on and the key column in the child
>table was NOT indexed. OH, BTW the child table was well lets just say VERY
>large (2 billion rows).
>
>Dick Goulet
>
>____________________Reply Separator____________________
>Subject: Re: Limits on referential integrity
>Author: orantdba <orantdba_at_netscape.net>
>Date: 1/22/2002 5:40 AM
>
>
>--------------020102080806060304030001
>Content-Type: text/plain; charset=us-ascii; format=flowed
>Content-Transfer-Encoding: 7bit
>
>Hi Dennis,
>
>Just my opinion but I tried to follow these rules as a DBA.
>
>1. If the business rule can be implemented with pk, fk, unique or check
>constraints I do it as such
>2. If the business rule can be implemented as a trigger I code it as a
>trigger
>3. If none of the above, I implement as a stored procedure and try to
>insure that every developer uses this procedure.
>
>Occasionally I have heard the "performance discussion" in regards to
>constraints. In 5 years of consulting I have never had constraints be
>THE problem. But if I was a developer that had written some of the
>awful SQL I have seen, I might have tried [:-)] . Constraints do put a
>premium on error checking by the application on inserts/updates.
>
>Hope this helps,
>John
>
>
>
>DWILLIAMS_at_LIFETOUCH.COM wrote:
>
>>Jared - I wasn't clear, but then again it is Monday. I have a team of
>>inexperienced developers starting a big, new Java application. They have a
>>good, experienced data model consultant helping them create the data model.
>>They are eager to include referential integrity. So eager it has me a little
>>worried. My question: "Is there too much of a good thing?". In Oracle 7,
>>sometimes sites would remove RI to ensure good performance (we are starting
>>this project on Oracle9i). Has anyone encountered problems with too many
>>constraints? Any guidelines you use with developers? Thanks.
>>Dennis Williams
>>DBA
>>Lifetouch, Inc.
>>dwilliams_at_lifetouch.com
>>
>>
>>-----Original Message-----
>>Sent: Monday, January 21, 2002 4:16 PM
>>To: Multiple recipients of list ORACLE-L
>>
>>
>>I would be you lunch that what they are implementing in their
>>code is not actually RI. They may be implementing code to
>>ensure things get inserted in the right order, and that child rows
>>have a parent.
>>
>>This is a very weak form of RI. Oracle is very good at implementing
>>RI, and it is not dependent on an application. RI in the database
>>is the route to choose unless there is some good reason not to.
>>
>>RI in the database will prevent orphaned data created through
>>updates, deletes or even ( gasp! ) bugs in the app.
>>
>>Programmers tend to dislike RI in the database because it
>>forces them to maintain data integrity in a transaction. This is
>>not a bad thing, it just forces them to have a good understanding
>>of their transactions.
>>
>>Point out to them that it is less code to write as well. :)
>>
>>Jared
>>
>>
>>
>>
>>
>>
>>
>>DENNIS WILLIAMS <DWILLIAMS_at_LIFETOUCH.COM>
>>Sent by: root_at_fatcity.com
>>01/21/02 01:35 PM
>>Please respond to ORACLE-L
>>
>>
>> To: Multiple recipients of list ORACLE-L <ORACLE-L_at_fatcity.com>
>> cc:
>> Subject: Limits on referential integrity
>>
>>
>>How much referential integrity should be implemented in Oracle? We are
>>starting a large new Java project. Our current applications keep their
>>referential integrity inside their own dictionary, so I haven't had to
>>deal
>>much with referential integrity recently. Can there be too much of a good
>>thing? What guidelines do you tend to use? At this point the developers
>>are
>>designing the data model so they are busily linking all the little boxes.
>>My
>>attitude at this point is "implement what you've got and if there are
>>performance problems we'll deal with them when they arise". Can anyone
>>give
>>me a better motto?
>>Thanks.
>>Dennis Williams
>>DBA
>>Lifetouch, Inc.
>>dwilliams_at_lifetouch.com
>>
>
>
>--------------020102080806060304030001
>Content-Type: multipart/related;
> boundary="------------InterScan_NT_MIME_Boundary"
>
>
>
>--------------InterScan_NT_MIME_Boundary
>Content-Type: multipart/alternative;
>boundary="------------020102080806060304030001"
> boundary="------------070606010707000609020708"
>
>--------------070606010707000609020708
>Content-Type: text/html; charset=us-ascii
>Content-Transfer-Encoding: 7bit
>
><html>
><head>
></head>
><body>
><pre wrap="">Hi Dennis,
>
>Just my opinion but I tried to follow these rules as a DBA.
>
>1. If the business rule can be implemented with pk, fk, unique or check
>constraints I do it as such
>2. If the business rule can be implemented as a trigger I code it as a
>trigger
>3. If none of the above, I implement as a stored procedure and try to
>insure that every developer uses this procedure.
>
>Occasionally I have heard the "performance discussion" in regards to
>constraints. In 5 years of consulting I have never had constraints be
>THE problem. But if I was a developer that had written some of the
>awful SQL I have seen, I might have tried <img
>src="chrome://editor/content/images/smile_n.gif" alt=":-)"
class="moz-txt-smily"
>height="19" width="19" align="Center">. Constraints do put a
>premium on error checking by the application on inserts/updates.
>
>Hope this helps,
>John</pre>
><br>
><br>
><a class="moz-txt-link-abbreviated"
>href="mailto:DWILLIAMS_at_LIFETOUCH.COM">DWILLIAMS_at_LIFETOUCH.COM</a> wrote:<br>
><blockquote type="cite" cite="mid:md5%3A64756D6D79206D657373616765206964">
> <pre wrap="">Jared - I wasn't clear, but then again it is Monday. I have a
>team of<br>inexperienced developers starting a big, new Java application. They
>have a<br>good, experienced data model consultant helping them create the data
>model.<br>They are eager to include referential integrity. So eager it has me a
>little<br>worried. My question: "Is there too much of a good thing?". In Oracle
>7,<br>sometimes sites would remove RI to ensure good performance (we are
>starting<br>this project on Oracle9i). Has anyone encountered problems with too
>many<br>constraints? Any guidelines you use with developers? Thanks.<br>Dennis
>Williams<br>DBA<br>Lifetouch, Inc.<br><a class="moz-txt-link-abbreviated"
>href="mailto:dwilliams_at_lifetouch.com">dwilliams_at_lifetouch.com</a><br><br><br>--
-
>--Original Message-----<br>Sent: Monday, January 21, 2002 4:16 PM<br>To:
>Multiple recipients of list ORACLE-L<br><br><br>I would be you lunch that what
>they are implementing in their<br>code is not actually R
>I. They may be implementing code to <br>ensure things get inserted in the
right
>order, and that child rows<br>have a parent.<br><br>This is a very weak form of
>RI. Oracle is very good at implementing<br>RI, and it is not dependent on an
>application. RI in the database<br>is the route to choose unless there is some
>good reason not to.<br><br>RI in the database will prevent orphaned data
created
>through <br>updates, deletes or even ( gasp! ) bugs in the
>app.<br><br>Programmers tend to dislike RI in the database because it<br>forces
>them to maintain data integrity in a transaction. This is<br>not a bad thing,
>it just forces them to have a good understanding<br>of their
>transactions.<br><br>Point out to them that it is less code to write as well.
>:)<br><br>Jared<br><br><br><br><br><br><br><br>DENNIS WILLIAMS <a
>class="moz-txt-link-rfc2396E"
>href="mailto:DWILLIAMS_at_LIFETOUCH.COM"><DWILLIAMS_at_LIFETOUCH.COM></a><br>Sen
>t by: <a class="moz-txt-link-abbreviated" href="mailto:r!
>o !
>!
>ot_at_fatcity.com">root_at_fatcity.com</a><br>01/21/02 01:35 PM<br>Please respond to
>ORACLE-L<br><br> <br> To: Multiple recipients of list ORACLE-L <a
>class="moz-txt-link-rfc2396E"
>href="mailto:ORACLE-L_at_fatcity.com"><ORACLE-L_at_fatcity.com></a><br>
>cc: <br> Subject: Limits on referential integrity<br><br><br>How
>much referential integrity should be implemented in Oracle? We are<br>starting
a
>large new Java project. Our current applications keep their<br>referential
>integrity inside their own dictionary, so I haven't had to <br>deal<br>much
with
>referential integrity recently. Can there be too much of a good<br>thing? What
>guidelines do you tend to use? At this point the developers
<br>are<br>designing
>the data model so they are busily linking all the little boxes.
><br>My<br>attitude at this point is "implement what you've got and if there
>are<br>performance problems we'll deal with them when they arise". Can anyone
><br>give<br>me a better motto?
><br>Thanks.<br>Dennis Williams<br>DBA<br>Lifetouch, Inc.<br><a
>class="moz-txt-link-abbreviated"
>href="mailto:dwilliams_at_lifetouch.com">dwilliams_at_lifetouch.com</a><br><br></pre>
> </blockquote>
> <br>
> </body>
> </html>
>
>--------------070606010707000609020708--
>
>--------------020102080806060304030001--
>
<html> <head> </head> <body>
case involved a foreign key<br>with the 'on delete cascade' option turned on and the key column in the child<br>table was NOT indexed. OH, BTW the child table was well lets just say VERY<br>large (2 billion rows).<br><br>Dick Goulet<br><br>____________________Reply Separator____________________<br>Subject: Re: Limits on referentialintegrity<br>Author: orantdba <a class="moz-txt-link-rfc2396E" href="mailto:orantdba_at_netscape.net"><orantdba_at_netscape.net></a><br>Date:
1/22/2002 5:40
AM<br><br><br>--------------020102080806060304030001<br>Content-Type:
text/plain; charset=us-ascii; format=flowed<br>Content-Transfer-Encoding:
7bit<br><br>Hi Dennis,<br><br>Just my opinion but I tried to follow these rules
as a DBA. <br><br>1. If the business rule can be implemented with pk, fk,
unique or check <br>constraint
s I do it as such<br>2. If the business rule can be implemented as a trigger I
code it as a <br>trigger<br>3. If none of the above, I implement as a stored
procedure and try to <br>insure that every developer uses this
procedure.<br><br>Occasionally I have heard the "performance discussion" in
regards to <br>constraints. In 5 years of consulting I have never had
constraints be <br>THE problem. But if I was a developer that had written some
of the <br>awful SQL I have seen, I might have tried [:-)] . Constraints do
put a <br>premium on error checking by the application on
inserts/updates.<br><br>Hope this helps,<br>John<br><br><br><br><a
class="moz-txt-link-abbreviated"
href="mailto:DWILLIAMS_at_LIFETOUCH.COM">DWILLIAMS_at_LIFETOUCH.COM</a>
wrote:<br><br></pre>
<blockquote type="cite">
<pre wrap="">Jared - I wasn't clear, but then again it is Monday. I have a
team of<br>inexperienced developers starting a big, new Java application. They
have a<br>good, experienced data model consultant helping them create the data model.<br>They are eager to include referential integrity. So eager it has me a little<br>worried. My question: "Is there too much of a good thing?". In Oracle7,<br>sometimes sites would remove RI to ensure good performance (we are starting<br>this project on Oracle9i). Has anyone encountered problems with too many<br>constraints? Any guidelines you use with developers? Thanks.<br>Dennis Williams<br>DBA<br>Lifetouch, Inc.<br><a class="moz-txt-link-abbreviated" href="mailto:dwilliams_at_lifetouch.com">dwilliams_at_lifetouch.com</a><br><br><br>--- --Original Message-----<br>Sent: Monday, January 21, 2002 4:16 PM<br>To: Multiple recipients of list ORACLE-L<br><br><br>I would be you lunch that what they are implementing in their<br>code is not actually RI. They may be implementing code to <br>ensure things get inserted in the right order, and that child rows<br>have a parent.<br><br>This is a very weak form of RI. Oracle is very good at implementing<br>RI, and it is not dependent on an application. RI in the database<br>is the route to choose unless there is some good reason not to.<br><br>RI in the database will prevent orphaned data created through <br>updates, deletes or even ( gasp! ) bugs in the app.<br><br>Programmers tend to dislike RI in the database because it<br>forces them to maintain data integrity in a transaction. This is<br>not a bad thing, it just forces them to have a good understanding<br>of their transactions.<br><br>Point out to them that it is less code to write as well. :)<br><br>Jared<br><br><br><br><br><br><br><br>DENNIS WILLIAMS <a class="moz-txt-link-rfc2396E"
href="mailto:ORACLE-L_at_fatcity.com"><ORACLE-L_at_fatcity.com></a><br> cc: <br> Subject: Limits on referential integrity<br><br><br>Howmuch referential integrity should be implemented in Oracle? We are<br>starting a large new Java project. Our current applications keep their<br>referential integrity inside their own dictionary, so I haven't had to <br>deal<br>much with referential integrity recently. Can there be too much of a good<br>thing? What guidelines do you tend to use? At this point the developers <br>are<br>designing the data model so they are busily linking all the little boxes. <br>My<br>attitude at this point is "implement what you've got and if there are<br>performance problems we'll deal with them when they arise". Can anyone <br>give<br>me a better motto?!
</blockquote>
<pre
wrap=""><!----><br><br>--------------020102080806060304030001<br>Content-Type:
multipart/related;<br>
boundary="------------InterScan_NT_MIME_Boundary"<br><br><br><br>--------------I
nterScan_NT_MIME_Boundary<br>Content-Type:
multipart/alternative;<br>boundary="------------020102080806060304030001"<br>
boundary="------------070606010707000609020708"<br><br>--------------07060601070
7000609020708<br>Content-Type: text/html;
charset=us-ascii<br>Content-Transfer-Encoding:
7bit<br><br><html><br><head><br></head><br><body><br><
;pre wrap="">Hi Dennis,<br><br>Just my opinion but I tried to follow these
rules as a DBA. <br><br>1. If the business rule can be implemented with pk, fk,
unique or check <br>constraints I do it as such<br>2. If the business rule can
be implemented as a trigger I code it as a <br>trigger<br>3. If none of the
above, I implement as a stored procedure and try to <br>insure that every
developer uses this procedure.<br!
><br>Occasionally I have heard the "performance discussion" in regards to
<br>constraints. In 5 years of consulting I have never had constraints be <br>THE problem. But if I was a developer that had written some of the <br>awful SQL I have seen, I might have tried <img<br>src=<aclass="moz-txt-link-rfc2396E"
class="moz-txt-link-rfc2396E"
href="mailto:DWILLIAMS_at_LIFETOUCH.COM"><DWILLIAMS_at_LIFETOUCH.COM></a></a&
gt;<br>Sen<br>t by: <a class="moz-txt-link-abbreviated" href="<a
class="moz-txt-link-freetext" href="mailto:r">mailto:r</a>!<br>o !<br>!<br><a
class="moz-txt-link-abbreviated"
href="mailto:ot_at_fatcity.com">ot_at_fatcity.com</a>"><a
class="moz-txt-link-abbreviated"
href="mailto:root_at_fatcity.com">root_at_fatcity.com</a></a
><br>01/21/02 01:35 PM<br>Please respond
to<br>ORACLE-L<br><br> <br> To: Multiple recipients
of list ORACLE-L <a<br>class="moz-txt-link-rfc2396E"<br>href=<a
class="moz-txt-link-rfc2396E" href="mailto:ORACLE-L_at_fatcity.com">"mailto:ORACLE-L_at_fatcity.com"</a>><a class="moz-txt-link-rfc2396E" href="mailto:ORACLE-L_at_fatcity.com"><ORACLE-L_at_fatcity.com></a></a>< ;br> <br>cc: <br> Subject: Limits on referentialintegrity<br><br><br>How<br>much referential integrity should be implemented in Oracle? We are<br>starting a<br>large new Java project. Our current applications keep their<br>referential<br>integrity inside their own dictionary, so I haven't had to <br>deal<br>much with<br>referential integrity recently. Can there be too much of a good<br>thing? What<br>guidelines do you tend to use? At this point the developers <br>are<br>design ing<br>the data model so they are busily linking all the little boxes.<br><br>My<br>attitude at this point is "implement what you've got and if there<br>are<br>performance problems we'll deal with them when they arise". Can anyone<br><br>give<br>me a better motto? <br><br>Thanks.<br>Dennis Williams<br>DBA<br>Lifetouch, Inc.<br><a<br>class="moz-txt-link-abbreviated"<br>href=<a class="moz-txt-link-rfc2396E"
</blockquote> <br> </body> </html>Received on Tue Jan 22 2002 - 10:28:46 CST