<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle - Concepts et Exemples &#187; foreign key</title>
	<atom:link href="https://blog.developpez.com/pachot/tag/foreign-key/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/pachot</link>
	<description>Les fonctionalités et concepts d&#039;Oracle à partir de traductions et de démos</description>
	<lastBuildDate>Sun, 03 Apr 2016 20:36:21 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Il faut toujours déclarer les Foreign Key</title>
		<link>https://blog.developpez.com/pachot/rely_constraint/</link>
		<comments>https://blog.developpez.com/pachot/rely_constraint/#comments</comments>
		<pubDate>Wed, 23 Oct 2013 14:45:09 +0000</pubDate>
		<dc:creator><![CDATA[pachot]]></dc:creator>
				<category><![CDATA[MicroLearning]]></category>
		<category><![CDATA[foreign key]]></category>
		<category><![CDATA[Materialized Views]]></category>
		<category><![CDATA[novalidate]]></category>
		<category><![CDATA[rely]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/pachot/?p=861</guid>
		<description><![CDATA[Les contraintes d&#8217;intégrité ne servent pas seulement à vérifier l&#8217;intégrité. Même si vous êtes sûrs de l&#8217;intégrité des données (parce que le chargement ETL le garantit par exemple), il faut déclarer les Foreign Key. C&#8217;est une information que l&#8217;on donne &#8230; <a href="https://blog.developpez.com/pachot/rely_constraint/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Les contraintes d&rsquo;intégrité ne servent pas seulement à vérifier l&rsquo;intégrité.<br />
Même si vous êtes sûrs de l&rsquo;intégrité des données (parce que le chargement ETL le garantit par exemple), il faut déclarer les Foreign Key. C&rsquo;est une information que l&rsquo;on donne à l&rsquo;Optimiseur sur l&rsquo;état de nos données, et qui lui permettra de choisir un meilleur plan d&rsquo;exécution.</p>
<p>La performance des chargement n&rsquo;est pas une raison valable pour ne pas déclarer les foreign Key:
<ul>
<li>On peut choisir de ne pas valider les données existantes (NOVALIDATE) et la création de la clé étrangère sera instantanée</li>
<li>On peut choisir de ne pas vérifier les données futures (DISABLE) et les DML futurs ne seront pas pénalisés.</li>
</ul>
<p>Mais il faut alors garantir l&rsquo;intégrité des données à Oracle en mettant la contrainte en RELY et mettant le Query Rewrite à TRUSTED</p>
<p><ins datetime="2013-10-23T14:29:24+00:00">La <a href="http://ora-demo.pachot.net/rely_constraint.html" title="demo" target="_blank">demo</a> présente deux cas.</ins><br />
Un premier cas de Query Rewrite où l&rsquo;utilisation de la vue matérialisée est rendue possible par la Foreign Key (soit en RELY NOVALIDATE avec query_rewrite_integrity=TRUSTED, soit en VALIDATE avec query_rewrite_integrity=enforced)<br />
Un deuxième cas où l&rsquo;optimiseur évite de faire une jointure lorsque la Foreign Key est en RELY NOVALIDATE.<br />
Et si ce n&rsquo;est pas suffisant pour justifier la création de Foreign Key en datawarehouse (où la validation est inutile vu qu&rsquo;on a probablement passé des jobs de Data Quality) il faut savoir que l&rsquo;optimisation STAR TRANSFORMATION sur un modèle dimensionnel ne peut se faire que si les Foreign Key vers les dimensions sont déclarées.</p>
<p>Bien sûr, il ne faut pas mentir à l&rsquo;optimiseur, et être certain de l&rsquo;intégrité de nos données. Sinon on aura un résultat faux.</p>
<p><strong>Pourquoi cette demo en 11.2.0.3 ?</strong><br />
Je n&rsquo;ai pas réussi à faire fonctionner la demo en 11.2.0.4 ni en 12.1.0.1 car le query rewrite ne se fait pas: QSM-01219: no suitable materialized view found to rewrite this query<br />
Un SR est ouvert&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>12c: faibles améliorations sur les verrous en intégrité référentielle</title>
		<link>https://blog.developpez.com/pachot/lock_dml_behaviour/</link>
		<comments>https://blog.developpez.com/pachot/lock_dml_behaviour/#comments</comments>
		<pubDate>Sat, 10 Aug 2013 19:47:52 +0000</pubDate>
		<dc:creator><![CDATA[pachot]]></dc:creator>
				<category><![CDATA[12c]]></category>
		<category><![CDATA[foreign key]]></category>
		<category><![CDATA[lock]]></category>
		<category><![CDATA[Row-X]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/pachot/?p=625</guid>
		<description><![CDATA[En 11g les verrous Row-S posés sur la table opposée lors de DML sur une table ayant un intégrité référentielle sont devenus des Row-X Et cela a amené pas mal de régression: lorsqu&#8217;il y a des tables verrouillées en Share &#8230; <a href="https://blog.developpez.com/pachot/lock_dml_behaviour/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>En 11g les verrous Row-S posés sur la table opposée lors de DML sur une table ayant un intégrité référentielle sont devenus des Row-X<br />
Et cela a amené pas mal de régression: lorsqu&rsquo;il y a des tables verrouillées en Share (à cause de foreign key non indexées) l&rsquo;impact est devenu beaucoup plus important. Cette régression a été introduite pour corriger un bug: Bug 5909305 &#8211; Change to DML (TM) lock modes for foreign key constraints (Doc ID 5909305.8)</p>
<p>Il semble qu&rsquo;en 12c ce soit un peu mieux: Certains Row-X redeviennent des Row-S, verrous légers qui ne bloquent aucun DML.</p>
<ul>
<li>Sur insert dans table parente. C&rsquo;est maintenant un Rows-S qui est posé sur les tables filles, comme avant la 11g</li>
<li>Lorsqu&rsquo;on fait un delete sur une table fille on retrouve un Row-S sur la table parent comme avant la 11g</li>
</ul>
<p>Par contre, on a toujours un Row-X sur la table parent lorsqu&rsquo;on insert dans la table fille ou qu&rsquo;on update la foreign key.</p>
<p><ins datetime="2013-08-09T15:08:34+00:00">La liste complète des verrous posés par différentes opérations dans la <a href="https://googledrive.com/host/0Bxhrc9V4eGzdd3liTDMwdmFmM2s/lock_dml_behaviour.html" title="demo" target="_blank">demo</a></ins>.</ins></p>
<p>Les explications de ces verrous dans la préz (11g): <a href="http://prezi.com/uzdd5ttg4cu0/indexing-foreign-keys-in-oracle/" title="indexing-foreign-keys-in-oracle">http://prezi.com/uzdd5ttg4cu0/indexing-foreign-keys-in-oracle/</a></p>
<p>Et une explication sur les modes de verrous: <a href="http://www.soug.ch/fileadmin/user_upload/Newsletter/NL_public/NL_2013_1_Award_Article.pdf"> http://www.soug.ch/fileadmin/user_upload/Newsletter/NL_public/NL_2013_1_Award_Article.pdf</a> et <a href="http://prezi.com/cdckwsgqxeyi/oracle-table-lock-modes/"> http://prezi.com/cdckwsgqxeyi/oracle-table-lock-modes/</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
