<?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>DÃ©couvertes et RÃ©flexion... &#187; SQL</title>
	<atom:link href="http://www.jean-francoismathieu.com/category/developpement/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jean-francoismathieu.com</link>
	<description>RÃ©flexions, outils et astuces par Jean-Francois Mathieu</description>
	<lastBuildDate>Tue, 09 Aug 2011 01:05:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Simplification des proc&#233;dures stock&#233;es</title>
		<link>http://www.jean-francoismathieu.com/2007/03/simplification-des-procdures-stockes/</link>
		<comments>http://www.jean-francoismathieu.com/2007/03/simplification-des-procdures-stockes/#comments</comments>
		<pubDate>Sun, 01 Apr 2007 03:26:46 +0000</pubDate>
		<dc:creator>jfmathieu</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.jean-francoismathieu.com/2007-03-31-simplification-des-procdures-stockes/</guid>
		<description><![CDATA[Si vous avez déjà fait des &#8220;stores procedure&#8220;, vous avez sûrement rencontré, à un moment ou à un autre, une procédure comme celle-ci:
IF(NOT @yard_id IS NULL)
BEGIN
SELECT * FROM Yards WHERE yard_id = @yard_id AND year = @year;
END
ELSE
BEGIN
SELECT * FROM Yards WHERE year = @year;
END
Cette situation arrive, entre autres, lorsque nous avons un paramètre &#8220;optionnel&#8221; et [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous avez déjà fait des &#8220;<strong>stores procedure</strong>&#8220;, vous avez sûrement rencontré, à un moment ou à un autre, une procédure comme celle-ci:</p>
<blockquote><p>IF(NOT @yard_id IS NULL)<br />
BEGIN<br />
SELECT * FROM Yards WHERE yard_id = @yard_id AND year = @year;<br />
END<br />
ELSE<br />
BEGIN<br />
SELECT * FROM Yards WHERE year = @year;<br />
END</p></blockquote>
<p>Cette situation arrive, entre autres, lorsque nous avons un paramètre &#8220;optionnel&#8221; et que nous voulons qu&#8217;il n&#8217;influence pas le résultat lorsqu&#8217;il est absent.</p>
<p>Une autre version de cette même requête serait alors</p>
<blockquote><p>SELECT * FROM Yards<br />
WHERE yard_id = <strong>COALESCE(@yard_id, dbo.YardReport.yard_id)</strong><br />
AND year = @year;</p></blockquote>
<p>où <strong>COALESCE</strong>, qui semble être la traduction de FUSIONNER, fait en sorte de retourner le <strong>premier paramètre non nul</strong> de ses arguments. Dans notre situation, si @yard_id est nul, <strong>COALESCE</strong> vas retourner la valeur de la ligne en cours, ce qui est toujours vrai.</p>
<p>Parmis les avantages de cette utilisation, les plus intéressantes sont la <strong>maintenance du code</strong> et la <strong>lisibilité</strong>. Effectivement, dans des requêtes plus complexes, la deuxième représentation sera beaucoup plus facile à maintenir.</p>
<p><em>Bonne pratique</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jean-francoismathieu.com/2007/03/simplification-des-procdures-stockes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attention au Null avec MySQL</title>
		<link>http://www.jean-francoismathieu.com/2006/10/attention-au-null-avec-mysql/</link>
		<comments>http://www.jean-francoismathieu.com/2006/10/attention-au-null-avec-mysql/#comments</comments>
		<pubDate>Sun, 29 Oct 2006 00:58:56 +0000</pubDate>
		<dc:creator>jfmathieu</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.jean-francoismathieu.com/2006/10/28/attention-au-null-avec-mysql/</guid>
		<description><![CDATA[Tous les SGBD ne sont pas créés égaux ! Récemment, j&#8217;ai vécu un problème d&#8217;une requête SQL qui ne désirait pas faire ce qu&#8217;elle devait faire. Effectivement, avec MySQL 4.1, il y avait un requête de type &#8220;update&#8221; récalcitrante qui ne faisait pas la mise à jour d&#8217;un champ de la db.


Voici la requête en [...]]]></description>
			<content:encoded><![CDATA[<p>Tous les SGBD ne sont pas créés égaux ! Récemment, j&#8217;ai vécu un problème d&#8217;une requête SQL qui ne désirait pas faire ce qu&#8217;elle devait faire. Effectivement, avec MySQL 4.1, il y avait un requête de type &#8220;update&#8221; récalcitrante qui ne faisait pas la mise à jour d&#8217;un champ de la db.</p>
<p><span id="more-30"></span></p>
<blockquote></blockquote>
<p>Voici la requête en question:</p>
<blockquote><p>UPDATE Table_1<br />
SET Champ_1 = Champ_1 + 1<br />
WHERE Id = 123;</p></blockquote>
<p>où le Champ_1 est un champ numérique permettant les &#8220;null&#8221;. Lors de l&#8217;exécution de cette requête, même si la ligne 123 existait dans la DB la mise à jour du Champ_1 ne s&#8217;effectuait pas et phpMyAdmin donnait 0 ligne modifiée.</p>
<p>Que ce passe-t-il ?</p>
<p>Tout ici ce joue autour du champ numérique qui supports les &#8220;null&#8221;. Le fait que le Champ_1 support le nul et qu&#8217;il a la valeur nulle fait en sorte que l&#8217;ajout de 1 à &#8220;null&#8221; donne &#8220;null&#8221; et fait en sorte que la ligne &#8220;n&#8217;est pas mise à jour&#8221;.</p>
<p>happy programming</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jean-francoismathieu.com/2006/10/attention-au-null-avec-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comment convertir facilement un &#8216;bit&#8217; en SQL Server</title>
		<link>http://www.jean-francoismathieu.com/2006/03/comment-convertir-facilement-un-bit-en-sql-server/</link>
		<comments>http://www.jean-francoismathieu.com/2006/03/comment-convertir-facilement-un-bit-en-sql-server/#comments</comments>
		<pubDate>Sun, 19 Mar 2006 03:19:01 +0000</pubDate>
		<dc:creator>jfmathieu</dc:creator>
				<category><![CDATA[Developpement]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.jean-francoismathieu.com/?p=5</guid>
		<description><![CDATA[Le type de donnée booléen n&#8217;est pas disponible comme telle dans le système de SGBD MS SQL Server. Le type de donnée &#8220;bit&#8221; est utilisé pour représenter ce type de donneé booléen.
Par exemple, en .NET (C#) on pourrait utiliser la commande suivante pour inverser un booléen:
myVar = false;
myVar = !myVar;

Pour SQL Server nous devons utiliser [...]]]></description>
			<content:encoded><![CDATA[<p>Le type de donnée booléen n&#8217;est pas disponible comme telle dans le système de SGBD MS SQL Server. Le type de donnée &#8220;bit&#8221; est utilisé pour représenter ce type de donneé booléen.</p>
<p>Par exemple, en .NET (C#) on pourrait utiliser la commande suivante pour inverser un booléen:</p>
<blockquote><p>myVar = false;<br />
myVar = !myVar;</p></blockquote>
<p><span id="more-5"></span></p>
<p>Pour SQL Server nous devons utiliser l&#8217;opérateur binaire XOR (^) :</p>
<blockquote><p>declare @var_bit bit;<br />
print &#8216;Set à 0&#8242;<br />
set @var_bit = 0;<br />
print @var_bit<br />
set @var_bit = @var_bit ^ 1<br />
print @var_bit<br />
print &#8216;Set à 1&#8242;<br />
set @var_bit = 1;<br />
print @var_bit<br />
set @var_bit = @var_bit ^ 1<br />
print @var_bit</p></blockquote>
<p>Résultat:</p>
<blockquote><p>Set à 0<br />
0<br />
1<br />
Set à 1<br />
1<br />
0</p></blockquote>
<p>Voilà&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jean-francoismathieu.com/2006/03/comment-convertir-facilement-un-bit-en-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conseils de nomenclature SQL</title>
		<link>http://www.jean-francoismathieu.com/2005/02/conseils-nomenclature-sql/</link>
		<comments>http://www.jean-francoismathieu.com/2005/02/conseils-nomenclature-sql/#comments</comments>
		<pubDate>Thu, 24 Feb 2005 16:44:53 +0000</pubDate>
		<dc:creator>jfmathieu</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[GÃ©nÃ©ral]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.jean-francoismathieu.com/?p=336</guid>
		<description><![CDATA[Peu importe le type de base de donnÃ©es que vous utiliser (mssql database, mysql database, oracle) l&#8217;ensemble des concepts de base de donnÃ©es revientÂ toujours Ã Â des tables, des lignes et des colonnes.
Les tables
Que les tables que nous crÃ©ons respectent les formes normales ou non, elles doivent avoir un nom qui est significatif pour le contenu qu&#8217;elles [...]]]></description>
			<content:encoded><![CDATA[<p>Peu importe le type de base de donnÃ©es que vous utiliser (mssql database, mysql database, oracle) l&#8217;ensemble des concepts de base de donnÃ©es revientÂ toujours Ã Â des tables, des lignes et des colonnes.</p>
<p><strong>Les tables</strong></p>
<p>Que les tables que nous crÃ©ons respectent les formes normales ou non, elles doivent avoir un nom qui est significatif pour le contenu qu&#8217;elles reprÃ©sentent.</p>
<p>RÃ¨gle gÃ©nÃ©rale, je nomme les tables avec un &#8220;s&#8221; Ã  la fin pour indiquÃ© que la table contient plusieurs Ã©lÃ©ments ce qui est Ã  premiÃ¨re vu Ã©vident. Cependant, dans un environnement de groupe avoir un standard pour la crÃ©ation des noms de table aide Ã  la rapiditÃ© du dÃ©veloppement et Ã  la lecture.</p>
<p>Par exemple, la table Ã©vÃ©nement s&#8217;Ã©criraitÂ &#8221;evenements&#8221;.</p>
<p>En rÃ¨gle gÃ©nÃ©ral, les tables dites de jointure se composent des noms des autres tables qu&#8217;elle fait la jointure.</p>
<p>Par exemple, la table &#8220;activites&#8221; Ã  une table de jointure avec &#8220;evenements&#8221; qui se nomme &#8220;evenementActivites&#8221;.</p>
<p>Dans ce dernier exemple, on peut comprendre qu&#8217;un <span style="text-decoration: underline;">Ã©vÃ©nement</span> Ã  plusieurs <span style="text-decoration: underline;">ActivitÃ©s.</span></p>
<p><strong>Les colonnes &gt; </strong>La colonne identitÃ©</p>
<p>Comment choisir la taille de notre colonne identitÃ© que l&#8217;on dÃ©finit avec un chiffre &#8220;auto-increment&#8221; ? Est-ce que l&#8217;on choisi BigInt (2^63), Int (2 147 483 648 = 2^31), SmallInt (32 768 = 2^15), TinyInt (256 = 2^8 valeurs) ?</p>
<p>Pour nous aider dans notre choix, nous devons analyser et estimer la quantitÃ© d&#8217;enregistrement qui sera crÃ©Ã© dans cette table.</p>
<p>Par exemple, si nous avons 50 enregistrements par jour Ã  raison de 7 jours semaine pour 52 semaines cela nous fais 18 200 enregistrements par annÃ©e.<br />
Si on utilise pour cette colonne un SmallInt, ceci veux dire que notre table va pouvoir contenir 1.8 annÃ©e d&#8217;information ce qui estÂ dÃ©finitivement pas suffisant pour un systÃ¨me de gestion d&#8217;information.Â  Si on utiliseÂ un Int alorsÂ elle pourraÂ contenir 117 993 annÃ©es d&#8217;information ce qui est plus que suffisant. <img src='http://www.jean-francoismathieu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dans le cas des valeurs de clÃ© primaire &#8220;auto-number&#8221; on peut ce permettre d&#8217;utiliser des types de donnÃ©es non-signÃ© (unsigned). Ceci nous permet de contenir deux fois plus d&#8217;information dans le mÃªme type de donnÃ©es.</p>
<p>Nous pourrions aussi toujours mettre un format de donnÃ©es Int ou Bigint cependant nous ne pourrions pas considÃ©rer que notre travail est bien fait et optimal.</p>
<p><strong>Le nom des champs</strong></p>
<p>La nomenclature des champs est importante et doit Ãªtre standardisÃ©e dans l&#8217;entreprise. Donc pour faciliter la lecture, il est prÃ©fÃ©rable que la premiÃ¨re lettre de chaque mot soit en majuscule sauf pour le premier mot de la sÃ©quence. Ceci permet une meilleure lecture des titres et n&#8217;a pas l&#8217;inconvÃ©nient de prendre plus d&#8217;espace comme la mÃ©thode des traits de soulignement &#8220;_&#8221;.</p>
<p>Par exemple, numeroEvenement et non Numero_Evenement.</p>
<p><strong>Conclusion</strong></p>
<p>On doit toujours Ã©valuer au meilleur de notre connaissance les donnÃ©es que nous traitons pour fournir les systÃ¨mes les plus performants possible avec la meilleure configuration possible.</p>
<p><em>Note les types de valeurs reprÃ©sentent SQL Server 2000.</em></p>
<p><em>Bonne programmation</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jean-francoismathieu.com/2005/02/conseils-nomenclature-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

