<?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>blog de f-leb &#187; Modélisation des données</title>
	<atom:link href="https://blog.developpez.com/f-leb/pcategory/access/modelisation-des-donnees/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/f-leb</link>
	<description></description>
	<lastBuildDate>Thu, 24 Oct 2013 17:46:38 +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>[Access] La relation de type « un à un » (suite)</title>
		<link>https://blog.developpez.com/f-leb/p10126/access/access_la_relation_de_type_l_un_a_un_r_s</link>
		<comments>https://blog.developpez.com/f-leb/p10126/access/access_la_relation_de_type_l_un_a_un_r_s#comments</comments>
		<pubDate>Tue, 12 Jul 2011 21:57:52 +0000</pubDate>
		<dc:creator><![CDATA[f-leb]]></dc:creator>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Modélisation des données]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[suite à l&#8217;article: [Access] La relation de type « un à un », voici pourtant ce qu’on peut lire dans le livre : Access 2007 et VBA (paru en 03/2008) par Bernard Minot, Jean-Michel Léry dont l’extrait ci-dessous est disponible chez Google books à la page 42: Les relations de 1 à 1 Nous supposons [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>suite à l&rsquo;article: <a href="http://blog.developpez.com/f-leb/p9637/access/la-relation-de-type-l-un-a-un-r">[Access] La relation de type « un à un »</a>,</p>
<p>voici pourtant ce qu’on peut lire dans le livre : Access 2007 et VBA (paru en 03/2008)<br />
par Bernard Minot, Jean-Michel Léry</p>
<p>dont l’extrait ci-dessous est disponible chez <a href="http://books.google.com/books?id=1dIika_ZI9kC&amp;pg=PA42&amp;lpg=PA42&amp;dq=%22un+%C3%A0+un%22+access&amp;source=bl&amp;ots=2r6oTZWcRG&amp;sig=fe-MgaVJjn2redMugR7IfWp5J04&amp;hl=en&amp;ei=GzYcTqSfB8PCtAbj17nmBg&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=2&amp;ved=0CBwQ6AEwATge#v=onepage&amp;q&amp;f=false">Google books à la page 42</a>:</p>
<blockquote><p><strong>Les relations de 1 à 1</strong><br />
Nous supposons la présence de deux tables contenant des données relatives, par exemple, à vos contacts professionnels, d’une part, et à vos contacts personnels, d’autre part. La conjugaison de ces deux tables peut se décliner ainsi :<br />
&#8211; Un contact professionnel correspond soit à zéro, soit à un et au plus un contact personnel (un partenaire commercial peut aussi être un ami !) ;<br />
&#8211; Un contact personnel correspond soit à zéro, soit à un et au plus un contact personnel (même raison).<br />
Nous sommes ici devant une relation de un à un. A priori, et pourvu que les uns et les autres n’aient pas de rôle particulier à jouer dans le système d’information à mettre en place, il n’y a aucune raison pour ne pas fusionner purement et simplement les deux fichiers. La seule opération à mettre en place avant ladite fusion consiste à créer une propriété particulière à la table qui fusionne les deux fichiers pour distinguer les « commerciaux » des « amis personnels ». <strong>Cet exemple peut être généralisé : les relations de un à un dans une base bien conçue n’existent pas(1).</strong><br />
<strong><br />
(1). Seul cas de figure possible : si la table doit compter plus de 255 colonnes, il sera nécessaire de créer une table « fille ».</strong></p></blockquote>
<p>grrrmffff&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Access] La relation de type « un à un »</title>
		<link>https://blog.developpez.com/f-leb/p9637/access/la_relation_de_type_l_un_a_un_r</link>
		<comments>https://blog.developpez.com/f-leb/p9637/access/la_relation_de_type_l_un_a_un_r#comments</comments>
		<pubDate>Wed, 05 Jan 2011 22:26:42 +0000</pubDate>
		<dc:creator><![CDATA[f-leb]]></dc:creator>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Modélisation des données]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[…ou réhabilitation de la relation de type « un à un » sous Access (modeste tentative): Résumé: Autant le dire tout de suite. La relation de type « un à un » (-1&#8212;&#8212;-1-) n’a pas la cote chez les développeurs Access et est souvent ignorée chez le débutant qui n’y verrait de toute façon qu’une [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>…ou réhabilitation de la relation de type « un à un » sous Access  (modeste tentative):</strong><br />
<em><br />
<strong>Résumé:</strong> Autant le dire tout de suite. La relation de type « un à un » (<strong>-1</strong>&#8212;&#8212;-<strong>1-</strong>) n’a pas la cote chez les développeurs Access et est souvent ignorée chez le débutant qui n’y verrait de toute façon qu’une source de complications supplémentaires dans ses développements.<br />
Tantôt perçue comme une « erreur de conception », tout au plus un artifice permettant de franchir la barre des 255 champs pour une table Access (ce qui rend pourtant la conception suspecte), la relation « un à un » sera ignorée aux profits de traitements peut être allégés  mais souvent aux dépends de l’intégrité, de la cohérence des données et des performances.</em><br />
<span id="more-2"></span></p>
<p>Prenons la classique table des commandes telle qu’on la trouve dans la base type « les comptoirs »:</p>
<blockquote><p>Commande(<strong>idCommande</strong>, #idClient,# idEmploye, dateCommande, AlivrerAvant,DateEnvoi,…, PaysLivraison,…)</p></blockquote>
<p>Chaque commande est passée par un client et est saisie par un employé.<br />
Pour illustrer notre démonstration, supposons que les clients puissent annuler leurs commandes et qu’on souhaite conserver l’historique des commandes annulées.<br />
Comme l’annulation ne doit pas entraîner la suppression physique de la ligne dans la table des commandes, c’est au plan conceptuel  puis logique que nous devrons mettre en place notre solution d’annulation des commandes.</p>
<p>Nous pensons tout de suite à un champ de type « oui/non » (booléen) :</p>
<blockquote><p>Commande(<strong>idCommande</strong>, #idClient,#idEmploye, dateCommande, AlivrerAvant,DateEnvoi,…, PaysLivraison,…, <strong>AnnulationCommande</strong>)</p></blockquote>
<p>AnnulationCommande=Vrai si la commande est annulée.</p>
<p>Mais supposons que lorsqu’une commande est annulée, on veuille connaître certaines informations supplémentaires comme :<br />
&#8211; La date d’annulation (type « date »)<br />
&#8211; Le motif de l’annulation (type « texte» ou « mémo »)<br />
&#8211; L’employé qui a validé l’annulation (identifiant de l’employé de type « numérique- entier long »)</p>
<p>La solution qui saute aux yeux:</p>
<blockquote><p>Commande(<strong>idCommande</strong>, #idClient,# idEmploye, dateCommande, AlivrerAvant,DateEnvoi,…, PaysLivraison,…, <em>AnnulationCommande, DateAnnulation, MotifAnnulation, #idEmployeAnnulation</em>)</p></blockquote>
<p>Si on suppose qu’une minorité de commandes sont annulées dans la pratique, nous nous retrouvons avec une palanquée de champs vides dans la table.<br />
Or lorsque le volume de données devient significatif, une  flopée de champs vides peut poser des problèmes de performances. Le fichier Access grossit car l’emplacement mémoire réservé pour le stockage des données numériques est effectif même si le contenu est vide.</p>
<p>Le développeur doit également prendre les précautions nécessaires afin d’éviter des saisies du type :<br />
<img src="http://blog.developpez.com/media/i1_01.PNG" width="938" height="62" alt="" /></p>
<p>Dans le 1er cas, s’agit-il d’une commande annulée mais dont on ne connait pas les {DateAnnulation, MotifAnnulation, idEmployeAnnulation} ou bien d’une commande annulée par erreur ?<br />
Dans le 2ème cas, que vient faire l&rsquo;employé Davolio si la commande n’a pas été annulée ?</p>
<p>Notez également que si vos règles de gestion imposent que lors d’une annulation de commande, les attributs {DateAnnulation, MotifAnnulation, idEmployeAnnulation} doivent obligatoirement être renseignés, vous ne pouvez plus vous tourner vers une contrainte forte au niveau du moteur d’Access en mettant la propriété « Null interdit » à « Oui ».</p>
<p><strong>Retour à la modélisation…</strong></p>
<p>Retournons aux fondamentaux de la modélisation des données.<br />
Mettons en œuvre dans notre modélisation le concept de commande annulée via l’entité-type « CommandeAnnulee » et écrivons les règles de gestion :<br />
&#8211; Une commande peut être une commande annulée<br />
&#8211; Une commande annulée est une commande</p>
<p>La traduction avec les cardinalités façon MERISE nous donne le bout de MCD :</p>
<blockquote><p>Commande&#8212;&#8212;0,1&#8212;&#8212;-<em>être</em>&#8212;&#8212;&#8211;1,1&#8212;&#8212;-CommandeAnnulee</p></blockquote>
<p>Puis au niveau logique :</p>
<blockquote><p>
CommandeAnnulee(<strong>#idCommande</strong>, DateAnnulation, MotifAnnulation, #idEmployeAnnulation)</p></blockquote>
<p>Ce qui nous donne le schéma Access  (dans la fenêtre des relations):</p>
<blockquote><p>Commande<strong>-1</strong>&#8212;&#8212;&#8212;&#8211;<strong>1-</strong>CommandeAnnulee</p></blockquote>
<p>Malgré l’apparente symétrie du schéma qui ne fait pas apparaître les cardinalités minimales du MCD, nous avons bien une table référencée (Commande) et une table référençante (CommandeAnnulee) avec la clé idCommande  à la fois clé primaire et étrangère.</p>
<p><strong>Commande:</strong><br />
<img src="http://blog.developpez.com/media/i2.PNG" width="562" height="112" alt="" /></p>
<p><strong>CommandeAnnule:</strong><br />
<img src="http://blog.developpez.com/media/i3.PNG" width="387" height="42" alt="" /></p>
<p>Seule la commande n°10249 est annulée puisque le n° de commande est dupliqué dans la table CommandeAnnule.</p>
<p>Notez également que si vos règles de gestion imposent que lors d’une annulation de commande, les attributs {DateAnnulation, MotifAnnulation, idEmployeAnnulation} doivent obligatoirement être renseignées, vous pouvez assurément vous tourner vers une contrainte forte au niveau du moteur d’Access en mettant simplement la propriété « Null interdit » à « Oui » dans la table CommandeAnnule.</p>
<p>Voilà, les Null inutiles deviennent interdits de séjour dans les tables…</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
