<?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 CinéPhil &#187; Conception</title>
	<atom:link href="https://blog.developpez.com/cinephil/pcategory/conception/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/cinephil</link>
	<description>Ce qui se conçoit bien s&#039;énonce clairement...</description>
	<lastBuildDate>Tue, 11 Dec 2012 15:58:32 +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>Installer Open Modelsphere sous Linux</title>
		<link>https://blog.developpez.com/cinephil/p9577/bases-de-donnees/installer_open_modelsphere_sous_linux</link>
		<comments>https://blog.developpez.com/cinephil/p9577/bases-de-donnees/installer_open_modelsphere_sous_linux#comments</comments>
		<pubDate>Wed, 29 Aug 2012 13:05:39 +0000</pubDate>
		<dc:creator><![CDATA[CinePhil]]></dc:creator>
				<category><![CDATA[Bases de données]]></category>
		<category><![CDATA[Conception]]></category>
		<category><![CDATA[Modélisation]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[MISE À JOUR LE 29/08/2012 pour la version 3.2 &#171;&#160;Open ModelSphere est un outil complet de modélisation de données qui prend en charge la modélisation conceptuelle, logique et physique. Il supporte plusieurs formalismes, entre autres: Entité-Association, DATARUN, et Information Engineering. &#8230; <a href="https://blog.developpez.com/cinephil/p9577/bases-de-donnees/installer_open_modelsphere_sous_linux">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>MISE À JOUR LE 29/08/2012 pour la version 3.2</p>
<p>&laquo;&nbsp;Open ModelSphere est un outil complet de modélisation de données qui prend en charge la modélisation conceptuelle, logique et physique. Il supporte plusieurs formalismes, entre autres: Entité-Association, DATARUN, et Information Engineering. Les modèles conceptuels peuvent être convertis en modèles relationnels et vice versa.&nbsp;&raquo;</p>
<p>Avec Open Modelsphere, on peut notamment modéliser des bases de données selon la méthode Merise ou en faisant un diagramme de classes UML.</p>
<p>C&rsquo;est aussi, à ma connaissance, le seul logiciel de modélisation open source qui permette de faire des MCT Merise.</p>
<p>Il est <a href="http://www.modelsphere.org/fr/download.html">téléchargeable</a> sur le <a href="http://www.modelsphere.org/fr/index.html">site officiel</a>.</p>
<p>Vous remarquerez que la version téléchargeable est indiquée pour Windows mais comme il s&rsquo;agit d&rsquo;un programme Java, il fonctionne aussi sous Linux.</p>
<p>Voici les changements à opérer pour que ça fonctionne&#8230;<br />
<span id="more-2"></span></p>
<p>Après téléchargement de &laquo;&nbsp;Open ModelSphere 3.2 sous Windows (fichier zip)&nbsp;&raquo;, décompressez celui-ci dans le répertoire de votre choix, puis donnez-vous éventuellement les droits d&rsquo;accès nécessaires.<br />
Sur ma Mageia Linux 2, je l&rsquo;ai installé dans /usr/share/. Vous aurez alors un répertoire &laquo;&nbsp;Open_ModelSphere_[version]&nbsp;&raquo;. J&rsquo;ai renommé ce répertoire tout simplement en &laquo;&nbsp;modelsphere&nbsp;&raquo; pour éviter des problèmes avec les noms à espaces et autres points.<br />
Dans ce répertoire, vous trouverez un fichier &laquo;&nbsp;modelsphere.bat&nbsp;&raquo; dont le contenu est le suivant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;C:\Program Files\Java\jdk1.7.0_01\jre/bin/javaw.exe&quot; -ms32m -mx1024m -ss16m -classpath &quot;.\modelsphere.jar;.\resources.zip;.\resources;.\targets;.\lib\jakarta-regexp-1.5\jakarta-regexp-1.5.jar;.\lib\velocity-1.6.1\velocity-1.6.1.jar;.\lib\jazzy-core\jazzy-core.jar;.\lib\jgrapht-all\jgrapht-all.jar;.\lib\jython-2.2.1\jython.jar;.\lib\velocity-1.6.1\lib\commons-collections-3.2.1.jar;.\lib\velocity-1.6.1\lib\commons-lang-2.4.jar;.\lib\lablib-checkboxtree-3.0.2.jar;.\lib\antlr-3.3-complete.jar;.\plugins\bin\repository_functions.jar&quot; org.modelsphere.sms.Application</div></td></tr></tbody></table></div>
<p>Ouvrez ce fichier avec un éditeur de texte et transformez-le de cette manière :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/bin/bash <br />
cd `dirname $0` <br />
java -ms64m -mx1024m -ss16m -classpath &quot;.:./modelsphere.jar:./resources.zip:./resources:./targets:./lib/jakarta-regexp-1.5/jakarta-regexp-1.5.jar:./lib/velocity-1.6.1/velocity-1.6.1.jar:./lib/jazzy-core/jazzy-core.jar:./lib/jgrapht-all/jgrapht-all.jar:./lib/jython-2.2.1/jython.jar:./lib/velocity-1.6.1/lib/commons-collections-3.2.1.jar:./lib/velocity-1.6.1/lib/commons-lang-2.4.jar:./lib/lablib-checkboxtree-3.0.2.jar:./lib/antlr-3.3-complete.jar:./plugins/bin/repository_functions.jar&quot; org.modelsphere.sms.Application</div></td></tr></tbody></table></div>
<p>=> Il faut ajouter le descripteur du shell et la commande pour se rendre dans le répertoire  du logiciel, supprimer le chemin Windows vers le programme java et remplacer :<br />
&#8211; les antislashes par des slashes ;<br />
&#8211; les points virgules par des doubles-points.<br />
Vous pouvez copier/coller directement le code ci-dessus pour la version 3.2 mais si vous installez une version ultérieure, appliquez le principe donné juste avant pour faire votre lanceur d&rsquo;application.</p>
<p>Enregistrez-le sous &laquo;&nbsp;modelsphere.sh&nbsp;&raquo;, rendez-le exécutable (<code class="codecolorer text default"><span class="text">chmod a+x modelsphere.sh</span></code>) et servez-vous en pour démarrer Open Modelsphere.</p>
<p>Vous pouvez ensuite faire un raccourci vers le programme. Je l&rsquo;ai placé dans le menu &laquo;&nbsp;Développement&nbsp;&raquo; de KDE en lui associant la commande suivante : <code class="codecolorer text default"><span class="text">/usr/share/modelsphere/./modelsphere.sh</span></code> </p>
<p>Il faut bien sûr que Java soit installé et qu&rsquo;il puisse être activé par la simple commande &laquo;&nbsp;java&nbsp;&raquo; !</p>
<p>PS :<br />
&#8211; Merci à passie pour sa collaboration dans la recherche de la bonne syntaxe en 2009.<br />
&#8211; Un site utile pour utiliser Open Modelsphere : http://www.marco-savard.com/OpenModelSphere/index_fr.html</p>
<p>Bonnes modélisations !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Quand faut-il une table associative ?</title>
		<link>https://blog.developpez.com/cinephil/p10017/bases-de-donnees/quand_faut_il_une_table_associative</link>
		<comments>https://blog.developpez.com/cinephil/p10017/bases-de-donnees/quand_faut_il_une_table_associative#comments</comments>
		<pubDate>Fri, 24 Feb 2012 23:16:46 +0000</pubDate>
		<dc:creator><![CDATA[CinePhil]]></dc:creator>
				<category><![CDATA[Bases de données]]></category>
		<category><![CDATA[Conception]]></category>
		<category><![CDATA[Modélisation]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mise à jour du 11/12/2012 : Ajout des contraintes d&#8217;unicité sur le cas 01. Merci à Richard_35 pour la suggestion et le travail complémentaire. Ceux qui connaissent le modèle conceptuel de données (MCD) de la méthode Merise savent que lorsque &#8230; <a href="https://blog.developpez.com/cinephil/p10017/bases-de-donnees/quand_faut_il_une_table_associative">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong>Mise à jour</strong> du 11/12/2012 : Ajout des contraintes d&rsquo;unicité sur le cas 01. <em>Merci à Richard_35 pour la suggestion et le travail complémentaire.</em></p>
<p>Ceux qui connaissent le modèle conceptuel de données (MCD) de la méthode Merise savent que lorsque les cardinalités maximales d&rsquo;une association sont toutes deux à n, cela entraînera la création d&rsquo;une table associative dans la base de données.</p>
<p>Mais il y a d&rsquo;autres cas et certains suscitent quelques débats au sein des forums.</p>
<p>Examinons tous les cas possibles&#8230;<span id="more-3"></span></p>
<p>Soit deux entités A et B et une association entre elles. Les 16 associations possibles sont les suivantes :<br />
01) A -0,1&#8212;-associer&#8212;-0,1- B<br />
02) A -0,1&#8212;-associer&#8212;-1,1- B<br />
03) A -0,1&#8212;-associer&#8212;-0,n- B<br />
04) A -0,1&#8212;-associer&#8212;-1,n- B<br />
05) A -1,1&#8212;-associer&#8212;-0,1- B<br />
06) A -1,1&#8212;-associer&#8212;-1,1- B<br />
07) A -1,1&#8212;-associer&#8212;-0,n- B<br />
08) A -1,1&#8212;-associer&#8212;-1,n- B<br />
09) A -0,n&#8212;-associer&#8212;-0,1- B<br />
10) A -0,n&#8212;-associer&#8212;-1,1- B<br />
11) A -0,n&#8212;-associer&#8212;-0,n- B<br />
12) A -0,n&#8212;-associer&#8212;-1,n- B<br />
13) A -1,n&#8212;-associer&#8212;-0,1- B<br />
14) A -1,n&#8212;-associer&#8212;-1,1- B<br />
15) A -1,n&#8212;-associer&#8212;-0,n- B<br />
16) A -1,n&#8212;-associer&#8212;-1,n- B</p>
<p>On remarque que les cardinalités de l&rsquo;association 02 sont inversées par rapport à l&rsquo;association 05, de même pour la 03 et la 09, la 04 et la 13, la 07 et la 10, la 08 et la 14, la 12 et la 15.<br />
Il ne reste donc plus que les 10 cas suivants :<br />
01) A -0,1&#8212;-associer&#8212;-0,1- B<br />
02) A -0,1&#8212;-associer&#8212;-1,1- B<br />
03) A -0,1&#8212;-associer&#8212;-0,n- B<br />
04) A -0,1&#8212;-associer&#8212;-1,n- B<br />
06) A -1,1&#8212;-associer&#8212;-1,1- B<br />
07) A -1,1&#8212;-associer&#8212;-0,n- B<br />
08) A -1,1&#8212;-associer&#8212;-1,n- B<br />
11) A -0,n&#8212;-associer&#8212;-0,n- B<br />
12) A -0,n&#8212;-associer&#8212;-1,n- B<br />
16) A -1,n&#8212;-associer&#8212;-1,n- B</p>
<p>Commençons par les cas les plus faciles&#8230;<br />
Comme dit en introduction, il faut une table associative lorsque les cardinalités maximales sont à n. Il s&rsquo;agit ici des 3 derniers cas, 11, 12 et 16.<br />
Lorsque que les cardinalités sont à 1,1 d&rsquo;un côté d&rsquo;une association, il y aura une clé étrangère dans la table issue de l&rsquo;entité située du côté des cardinalités 1,1. Il s&rsquo;agit ici des cas 02, 07 et 08. Le cas 06 appelle des commentaires que je ferai plus tard&#8230;</p>
<p>Inscrivons ces cas simples dans le tableau :<br />
01) A -0,1&#8212;-associer&#8212;-0,1- B<br />
02) A -0,1&#8212;-associer&#8212;-1,1- B =&gt; Clé étrangère dans la table issue de l&rsquo;entité B<br />
03) A -0,1&#8212;-associer&#8212;-0,n- B<br />
04) A -0,1&#8212;-associer&#8212;-1,n- B<br />
06) A -1,1&#8212;-associer&#8212;-1,1- B<br />
07) A -1,1&#8212;-associer&#8212;-0,n- B =&gt; Clé étrangère dans la table issue de l&rsquo;entité A<br />
08) A -1,1&#8212;-associer&#8212;-1,n- B =&gt; Clé étrangère dans la table issue de l&rsquo;entité A<br />
11) A -0,n&#8212;-associer&#8212;-0,n- B =&gt; Table associative<br />
12) A -0,n&#8212;-associer&#8212;-1,n- B =&gt; Table associative<br />
16) A -1,n&#8212;-associer&#8212;-1,n- B =&gt; Table associative</p>
<p>Examinons maintenant les cas qui restent, en commençant par le 06, qui semblerait entrer dans la seconde catégorie des cas faciles&#8230;</p>
<p>Cas 06) A -1,1&#8212;-associer&#8212;-1,1- B<br />
Lorsque les deux couples de cardinalités sont à 1,1, on doit se demander si on peut fusionner les deux entités. Si elles représentent des choses sémantiquement différentes ou si on les conserve pour une raison technique (ajout de table à une BDD existante, amélioration des performances par séparation de données importantes en volume mais rarement lues&#8230;), on a le choix de la table qui accueillera la clé étrangère.</p>
<p>Cas 04) A -0,1&#8212;-associer&#8212;-1,n- B<br />
La clé étrangère ne peut pas aller dans B puisque un B peut être associé à plusieurs A. Mais elle ne peut pas non plus aller dans A puisque un A peut ne pas être associé à un B. Il faut donc une table associative. Et comme un A sera associé au maximum une seule fois à un B, la clé primaire de la table associative sera la clé étrangère référençant A.</p>
<p>Cas 03) A -0,1&#8212;-associer&#8212;-0,n- B<br />
Aucune des deux entités n&rsquo;est systématiquement associée à l&rsquo;autre (cardinalités minimales à 0). Il faut donc une table associative dont la clé primaire sera, pour la même raison que dans le cas 04, la clé étrangère référençant A.</p>
<p>Cas 01) A -0,1&#8212;-associer&#8212;-0,1- B<br />
Pour la même raison que dans le cas 03, il faut une table associative. Et pour la même raison que dans le cas 06, on a le choix de la clé étrangère qui sera également clé primaire, l&rsquo;autre clé étrangère devant être munie d&rsquo;une contrainte d&rsquo;unicité.</p>
<p>Complétons le tableau :<br />
01) A -0,1&#8212;-associer&#8212;-0,1- B =&gt; Table associative avec le choix de la clé primaire.</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
<li><strong>AB</strong> (<em><u>#IdA</u>, #IdB</em>, &#8230;) + index unique sur #IdB<br />
ou <strong>AB</strong>(<em><u>#IdB</u>, #IdA</em>, &#8230;) + index unique sur #IdA.</li>
</ul>
<p>02) A -0,1&#8212;-associer&#8212;-1,1- B =&gt; Clé étrangère dans la table issue de l&rsquo;entité B</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, <em>#IdA</em>, &#8230;).</li>
</ul>
<p>03) A -0,1&#8212;-associer&#8212;-0,n- B =&gt; Table associative dont la clé primaire référence A</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
<li><strong>AB</strong> (<u>#IdA</u>, #IdB, &#8230;).</li>
</ul>
<p>04) A -0,1&#8212;-associer&#8212;-1,n- B =&gt; Table associative dont la clé primaire référence A</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
<li><strong>AB</strong> (<u>#IdA</u>, #IdB, &#8230;).</li>
</ul>
<p>06) A -1,1&#8212;-associer&#8212;-1,1- B =&gt; Fusion des deux entités ou clé étrangère dans A ou B</p>
<ul>
<li><strong>AB</strong> (<u>IdAB</u>, {attributs de A}, {attributs de B}, &#8230;).</li>
</ul>
<p>ou :</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, <em>#IdB</em>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;).</li>
</ul>
<p>ou</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, <em>#IdA</em>, &#8230;).</li>
</ul>
<p>07) A -1,1&#8212;-associer&#8212;-0,n- B =&gt; Clé étrangère dans la table issue de l&rsquo;entité A</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, <em>#IdB</em>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
</ul>
<p>08) A -1,1&#8212;-associer&#8212;-1,n- B =&gt; Clé étrangère dans la table issue de l&rsquo;entité A</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, <em>#IdB</em>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
</ul>
<p>11) A -0,n&#8212;-associer&#8212;-0,n- B =&gt; Table associative</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
<li><strong>AB</strong> (<u><em>#IdA, #IdB</em></u>, &#8230;).</li>
</ul>
<p>12) A -0,n&#8212;-associer&#8212;-1,n- B =&gt; Table associative</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
<li><strong>AB</strong> (<u><em>#IdA, #IdB</em></u>, &#8230;).</li>
</ul>
<p>16) A -1,n&#8212;-associer&#8212;-1,n- B =&gt; Table associative</p>
<ul>
<li><strong>A</strong> (<u>IdA</u>, &#8230;) ;</li>
<li><strong>B</strong> (<u>IdB</u>, &#8230;) ;</li>
<li><strong>AB</strong> (<u><em>#IdA, #IdB</em></u>, &#8230;).</li>
</ul>
<p>Sur 10 cas, il y en a donc 6 qui nécessitent une table associative !</p>
<p>== Mise à jour du 20/09/2011 ==<br />
Suite à <a href="http://www.developpez.net/forums/d1132688/bases-donnees/mysql/requetes/primary-key-foreign-key/#post6249319">une question</a> posée par cretthie dans une discussion du forum MySQL/Requêtes, j&rsquo;apporte des précisions pour les cas demandant une table associative.</p>
<p>01) Il y aura une clé étrangère référençant A et une autre référençant B. On a le choix de décider quelle clé étrangère constituera également, toute seule, la clé primaire de la table. L&rsquo;autre colonne portant la seconde clé étrangère sera en plus munie d&rsquo;une contrainte d&rsquo;unicité (index de type UNIQUE chez MySQL) pour respecter la cardinalité 0,1.<br />
03) et 04) Là aussi, la clé primaire n&rsquo;est constituée que d&rsquo;une seule des deux clés étrangères : celle référençant A. L&rsquo;autre est une clé étrangère &laquo;&nbsp;ordinaire&nbsp;&raquo;.<br />
11), 12) et 16) Dans ces trois cas, la clé primaire de la table associative est composée des clés étrangères référençant A et B.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Règle de gestion bien écrite =&gt; Modélisation des données facile</title>
		<link>https://blog.developpez.com/cinephil/p10397/bases-de-donnees/regle_de_gestion_bien_ecrite_g_modelisat</link>
		<comments>https://blog.developpez.com/cinephil/p10397/bases-de-donnees/regle_de_gestion_bien_ecrite_g_modelisat#comments</comments>
		<pubDate>Fri, 17 Feb 2012 13:14:16 +0000</pubDate>
		<dc:creator><![CDATA[CinePhil]]></dc:creator>
				<category><![CDATA[Bases de données]]></category>
		<category><![CDATA[Conception]]></category>
		<category><![CDATA[Modélisation]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Même si vous débutez en modélisation de base de données, en écrivant correctement les règles de gestion des données, vous pourrez facilement créer votre MCD (ou votre diagramme de classes si vous préférez UML). La méthode que je décris ci-après &#8230; <a href="https://blog.developpez.com/cinephil/p10397/bases-de-donnees/regle_de_gestion_bien_ecrite_g_modelisat">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Même si vous débutez en modélisation de base de données, en écrivant correctement les règles de gestion des données, vous pourrez facilement créer votre MCD (ou votre diagramme de classes si vous préférez UML).</p>
<p>La méthode que je décris ci-après devrait vous aider beaucoup pour apprendre à modéliser correctement.<br />
<span id="more-4"></span></p>
<p><strong>1) Écrire une règle de gestion</strong><br />
L&rsquo;exercice consiste à écrire en français (ou dans la langue de votre choix) une phrase décrivant comment sont associés deux concepts.</p>
<p>Par exemple, on vous demande de modéliser les données nécessaires à une gestion de projets et on vous dit, entre autres, qu&rsquo;<em>il y a toujours une personne qui est nommée chef de projet pour un projet et que plusieurs personnes travaillent sur un projet</em>.</p>
<p>L&rsquo;extrait en italique de la phrase précédente pourrait suffire à un concepteur habitué à la modélisation des données pour produire un MCD correct et possible mais il manque des informations pour ne pas faire d&rsquo;erreur :<br />
&#8211; est-ce qu&rsquo;une personne est obligatoirement chef de projet au moins une fois ?<br />
&#8211; est-ce que toute personne enregistrée dans le système travaille sur au moins un projet ?<br />
&#8211; est-ce qu&rsquo;une personne ne peut travailler que sur un seul projet à la fois ?</p>
<p>Muni des réponses à ces questions, vous pouvez écrire vos règles de gestion relatives aux associations entre les personnes et les projets. Par exemple, les réponses peuvent vous amener à écrire à coup sûr ces deux règles de gestion :<br />
1) Un projet est dirigé par une seule personne (nommée &laquo;&nbsp;chef de projet&nbsp;&raquo; pour ce projet) et une personne peut diriger plusieurs projets (en étant nommée &laquo;&nbsp;chef de projet&nbsp;&raquo; pour chacun d&rsquo;eux).<br />
2) Un projet fait travailler de une à plusieurs personnes et une personne peut travailler sur plusieurs projets.</p>
<p>Il faut écrire la phrase en partant d&rsquo;une personne et décrire son association avec les projets (diriger) et compléter la phrase en partant cette fois du projet et décrire l&rsquo;association inverse vers les personnes.</p>
<p><strong>2) Le passage au MCD</strong><br />
Des règles de gestion écrites précédemment, il est très facile d&rsquo;en déduire le MCD :<br />
<strong>personne</strong> -0,n&#8212;-diriger&#8212;-1,1- <strong>projet</strong><br />
|&#8212;&#8212;&#8212;0,n&#8212;-travailler&#8212;-1,n&#8212;|</p>
<p>Comment ai-je fait ?<br />
Examinons la première règle de gestion :<br />
1) Un <strong>projet</strong> <em>est</em> <u>dirigé</u> par <em>une seule</em> <strong>personne</strong> (nommée &laquo;&nbsp;chef de projet&nbsp;&raquo; pour ce projet) et une <strong>personne</strong> <em>peut</em> <u>diriger</u> <em>plusieurs</em> <strong>projets</strong> (en étant nommée &laquo;&nbsp;chef de projet&nbsp;&raquo; pour chacun d&rsquo;eux).</p>
<p>Les termes en gras représentent les entités types du MCD : <strong>personne</strong> et <strong>projet</strong>. Ce sont, dans les règles de gestion, généralement des noms communs qui font ou qui subissent une action.</p>
<p>Les termes soulignés représentent l&rsquo;association : <u>diriger</u>. Ce sont généralement des verbes, le plus souvent conjugués une fois à la forme active ([peut] &laquo;&nbsp;diriger&nbsp;&raquo;, ou bien &laquo;&nbsp;dirige&nbsp;&raquo;) et une fois à la forme passive (&laquo;&nbsp;est dirigé par&nbsp;&raquo;). Dans le MCD, on laissera ce verbe à l&rsquo;infinitif pour pouvoir lire l&rsquo;association dans les deux sens plus facilement.</p>
<p>Les termes en italique sont un guide pour déterminer les cardinalités de l&rsquo;association :<br />
&#8211; &laquo;&nbsp;est dirigé&nbsp;&raquo; indique une obligation, donc une cardinalité minimale de 1 ;<br />
&#8211; &laquo;&nbsp;un seul&nbsp;&raquo; indique une cardinalité maximale de 1 ;<br />
&#8211; &laquo;&nbsp;peut [diriger]&nbsp;&raquo; indique une possibilité, donc aussi la possibilité qu&rsquo;une personne ne dirige aucun projet, soit une cardinalité minimale de 0 ;<br />
&#8211; &laquo;&nbsp;plusieurs&nbsp;&raquo; indique une cardinalité maximale de n.</p>
<p>Examinez la seconde règle de gestion et vous verrez que cela fonctionne de la même manière.</p>
<p>Au bout de quelques exercices de formalisation de règles de gestion de la sorte, vous passerez tellement facilement à la génération du MCD que vous finirez par vous passer de l&rsquo;écriture des règles de gestion et vous contenterez seulement d&rsquo;y penser quand vous dessinerez directement le MCD.</p>
<p><strong>3) Petit exercice</strong><br />
Comment modéliseriez-vous le fait qu&rsquo;un projet est dirigé obligatoirement par une personne ayant le titre de chef de projet et que d&rsquo;autres personnes peuvent travailler sur le projet ?</p>
<p>Écrivez une ou des règles de gestion possibles puis passez au MCD.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
