<?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>Dans la tête de Doc Malkovich &#187; modélisation</title>
	<atom:link href="https://blog.developpez.com/jmalkovich/pcategory/modelisation/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/jmalkovich</link>
	<description>Réflexions et humeurs sur la Business Intelligence</description>
	<lastBuildDate>Tue, 26 Aug 2014 11:54:41 +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>Des tables de faits sans faits</title>
		<link>https://blog.developpez.com/jmalkovich/p9205/modelisation/des_tables_de_faits_sans_faits</link>
		<comments>https://blog.developpez.com/jmalkovich/p9205/modelisation/des_tables_de_faits_sans_faits#comments</comments>
		<pubDate>Mon, 16 Aug 2010 11:58:20 +0000</pubDate>
		<dc:creator><![CDATA[doc malkovich]]></dc:creator>
				<category><![CDATA[définitions]]></category>
		<category><![CDATA[humeurs]]></category>
		<category><![CDATA[modélisation]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il y a des expressions décisionnelles qui me donnent des boutons, limite la varicelle. Par exemple, le fait qu&#8217;il existe des tables de faits sans faits &#8230; C&#8217;est un peu comme si on avait des moules sans frites, une bière &#8230; <a href="https://blog.developpez.com/jmalkovich/p9205/modelisation/des_tables_de_faits_sans_faits">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Il y a des expressions décisionnelles qui me donnent des boutons, limite la varicelle.</p>
<p>Par exemple, le fait qu&rsquo;il existe <em>des tables de faits sans faits</em> &#8230;<br />
C&rsquo;est un peu comme si on avait des moules sans frites, une bière sans mousse, un avion sans ailes, un film de Tim Burton sans Johnny Deep ou une version de BO sans bug &#8230;<br />
<span id="more-33"></span><br />
Je n&rsquo;invente rien, tout est expliqué là, in french :<br />
<a href="http://libd.isnetne.ch/cours/decisionnel/Version2/03_Modelisation/modelisation_dimensionnnelle_3pp.pdf">Cours de modélisation décisionnelle</a></p>
<p>En résumé il s&rsquo;agit tout simplement de tables de faits sans mesures ( ou sans indicateurs ).<br />
On trouvera ce type de table pour représenter surtout l&rsquo;absence d&rsquo;événements ( produits qui ne se sont pas vendus lors d&rsquo;une promotion par exemple ). On répertorie ces tables en tables de suivi d&rsquo;événements ou tables de couverture, c&rsquo;est beau à dire et ça fait cultivé mais bon je m&rsquo;éloigne là &#8230;</p>
<p>Alors pour moi un fait est un événement, par exemple une vente.<br />
Un fait par homonymisme c&rsquo;est &laquo;&nbsp;ce qui a été fait&nbsp;&raquo;, ou &laquo;&nbsp;sera fait&nbsp;&raquo;  &#8230;<br />
Une table de faits correspond à une table d&rsquo;événements, ces événéments correspondant au croisement des dimensions dans l&rsquo;espace temps. Par exemple on aurait les ventes au mois par vendeur et par produit.<br />
Mais on a toujours des faits dans une table, même si on n&rsquo;a pas forcément d&rsquo;indicateurs / de mesures.<br />
Par exemple si on prend les absences d&rsquo;élèves, on aurait une table de faits sans mesures, mais pourtant on a bien des faits dans la table &#8211; l&rsquo;absence est un fait, on est sur le fait qu&rsquo;un élève est absent tel jour de la semaine &#8230;</p>
<p>Mais voilà on a des tables de faits sans faits.<br />
On aurait pu dire &laquo;&nbsp;tables de faits sans indicateurs&nbsp;&raquo; ou &laquo;&nbsp;tables de faits sans mesures&nbsp;&raquo;, mais non pourquoi faire simple, autant semer le doute dans les esprits &#8230; On notera que les tables de dimension sans dimensions n&rsquo;existent pas, mais les tables de faits sans faits si !</p>
<p>Evidemment les puristes diront que dans sa définition originale un fait est une mesure, alors qu&rsquo;une table de faits n&rsquo;est pas qu&rsquo;une table de mesures &#8230; Du coup les esprits les plus alertes pourraient se dire, c&rsquo;est une erreur de traduction, mais non pas du tout. On trouve des factless fact tables de l&rsquo;autre côté de notre planète.</p>
<p>Moi j&rsquo;aurais tendance à dire que le mal est fait &#8230;</p>
<p>Merci Ralphy</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Un conseil sur les colonnes de type date sous Oracle &#8230;</title>
		<link>https://blog.developpez.com/jmalkovich/p8924/oracle/un_conseil_sur_les_colonnes_de_type_date</link>
		<comments>https://blog.developpez.com/jmalkovich/p8924/oracle/un_conseil_sur_les_colonnes_de_type_date#comments</comments>
		<pubDate>Fri, 14 May 2010 20:45:27 +0000</pubDate>
		<dc:creator><![CDATA[doc malkovich]]></dc:creator>
				<category><![CDATA[business objects]]></category>
		<category><![CDATA[modélisation]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les colonnes date sous Oracle permettent de stocker des dates &#171;&#160;simples&#160;&#187;, sans heure, et aussi des dates avec l&#8217;heure. C&#8217;est sympa, mais cela provoque vite des erreurs dans les traitements d&#8217;alimentation ou dans les univers BO quand on effectue une &#8230; <a href="https://blog.developpez.com/jmalkovich/p8924/oracle/un_conseil_sur_les_colonnes_de_type_date">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Les colonnes date sous Oracle permettent de stocker des dates &laquo;&nbsp;simples&nbsp;&raquo;, sans heure, et aussi des dates avec l&rsquo;heure. C&rsquo;est sympa, mais cela provoque vite des erreurs dans les traitements d&rsquo;alimentation ou dans les univers BO quand on effectue une jointure sur des colonnes de ce type contenant effectivement des heures.</p>
<p>Par exemple nous avons une table VENTES et la table calendrier TEMPS.<br />
La table TEMPS est au jour, la PK est JOUR de type date &#8211; sans heure<br />
La table VENTES a plusieurs dates, dont la date de vente ( colonne DATE_VENTE ) qui est aussi de type date, mais avec l&rsquo;heure.<br />
On a tendance à lier directement les tables sur les 2 colonnes, mais cela ne ramène aucune donnée car d&rsquo;un côté on a l&rsquo;heure, de l&rsquo;autre on ne l&rsquo;a pas &#8230;</p>
<p>Pire, une requête sur la table calendrier avec la date d&rsquo;aujourd&rsquo;hui ( <strong>sysdate</strong> ) semble légitime pour un utilisateur, mais la requête suivante ne renvoie rien !</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SELECT * FROM TEMPS WHERE JOUR=SYSDATE</div></div>
<p>Il faut &laquo;&nbsp;enlever&nbsp;&raquo; l&rsquo;heure avec la fonction <strong>trunc()</strong> pour avoir un résultat :<br />
<code class="codecolorer text default"><span class="text">SELECT * FROM TEMPS WHERE JOUR=trunc(SYSDATE)</span></code></p>
<p>Généralement quand je n&rsquo;ai pas la main sur le modèle je mets des <strong>trunc()</strong> un peu partout pour blinder les choses, mais c&rsquo;est mieux quand en amont la conception et les normes sont bien faites et bien pensées, et que les noms des colonnes permettent de distinguer les dates avec heure et les dates sans.</p>
<p>Par exemple on peut nommer les colonnes avec heure en préfixant par<br />
<strong>DATE_HEURE_</strong> et les dates sans heure par DATE_ uniquement &#8230;<br />
( ou <strong>DATE_</strong> et <strong>DATH_</strong> ou &#8230; cela dépend des normes of course &#8230; )<br />
Idem pour l&rsquo;univers BO, il est utile de préciser dans le nom des colonnes si on a affaire à une date avec heure ou sans.</p>
<p>Ainsi on sait tout de suite s&rsquo;il faut rajouter un <em>trunc()</em> dans les jointures, et cela évite bien des erreurs &#8230;</p>
<p>Il reste le problème des dates qui contiennent des dates avec heure ET des dates sans heure, mais c&rsquo;est une autre histoire &#8230; </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>starschema  vs snowflake</title>
		<link>https://blog.developpez.com/jmalkovich/p8718/modelisation/modele_en_etoile_ou_en_flocons</link>
		<comments>https://blog.developpez.com/jmalkovich/p8718/modelisation/modele_en_etoile_ou_en_flocons#comments</comments>
		<pubDate>Fri, 12 Mar 2010 12:29:36 +0000</pubDate>
		<dc:creator><![CDATA[doc malkovich]]></dc:creator>
				<category><![CDATA[modélisation]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Que faut-il choisir entre Un modèle en étoile ou un modèle en flocons ? On se pose tous la même question quand on commence la conception, sans avoir d&#8217;éléments de réponse. Je vais essayer ici de donner les différences entre &#8230; <a href="https://blog.developpez.com/jmalkovich/p8718/modelisation/modele_en_etoile_ou_en_flocons">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<blockquote><p>Que faut-il choisir entre Un modèle en étoile ou un modèle en flocons ?</p></blockquote>
<p>
On se pose tous la même question quand on commence la conception, sans avoir d&rsquo;éléments de réponse.<br />
Je vais essayer ici de donner les différences entre les deux types de modélisation, et mon point de vue sur la question.</p>
<p>Mais avant quelques rappels :</p>
<p><strong>Le schéma en étoile :</strong><br />
Les dimensions sont dénormalisées afin de concentrer toutes les informations en une seule table. Cela implique qu&rsquo;on y retrouve certaines colonnes ayant plusieurs fois les mêmes valeurs.<br />
Elles sont disposées autour d&rsquo;une table de faits, à la manière d&rsquo;une étoile.<br />
<img src="http://blog.developpez.com/media/modele_etoile_01.gif" width="443" height="276" alt="starschema" /></p>
<p><strong>Le schéma en flocons :</strong><br />
Seules les dimensions changent par rapport au modèle en étoile.<br />
Dans le schéma en flocons, elles sont normalisées. Au lieu de tout concentrer en une seule table on a plusieurs tables liées en une arborescence, chaque niveau de la hiérarchie donnant lieu à une table.<br />
><img src="http://blog.developpez.com/media/modele_flocons.gif" width="831" height="468" alt="snowflake" /></p>
<p><strong>Les différences :</strong></p>
<p><strong>1/ Performances</strong><br />
<em>Avantage : &#8212; étoile ? &#8211;</em><br />
On dit souvent que le modèle en étoile est plus performant. Cela est dû au fait qu&rsquo;il y a moins de jointures à faire que sur un modèle en flocons.<br />
Je dirais que c&rsquo;était vrai il y a quelques années, quand les SGBD étaient moins performants.<br />
Mais actuellement la différence est minime, les SGBD gérant mieux les jointures multiples. De plus les jointures supplémentaires mettent en oeuvre généralement des tables à faible volumétrie. Cependant il suffit que les stats Oracle soient mal calculées pour obtenir des plans d&rsquo;exécution erronés et plomber un modèle en flocons.</p>
<p><strong>1bis/ Contre-performance :</strong><br />
Une table de dimension en jointure réflexive dans un modèle en flocons est à proscrire.<br />
Par exemple si on a une table de hierarchie décrivant la structure de l&rsquo;entreprise, une colonne &laquo;&nbsp;père&nbsp;&raquo; permettant de faire le lien sur la même table<br />
<img src="http://blog.developpez.com/media/hierarchie3.gif" width="402" height="95" alt="" /><br />
Le SGBD va lire plusieurs fois la même table, les accès concurrents se faisant sur le même disque les performances seront très dégradées.<br />
Il vaut mieux créer plusieurs tables différentes, chacune représentant un niveau de la hiérarchie.</p>
<p><strong>2/ Volumétries</strong><br />
<em>Avantage : &#8212; flocons &#8211;</em><br />
Si la dimension a de nombreux attributs, on a une table qui prend plus d&rsquo;espace pour le modèle en étoile.<br />
Il vaut mieux choisir un modèle en étoile sur de grosses volumétries quand le ratio devient faible ( 1:50 ), sinon en aplatissant en une seule table les redondances seront trop nombreuses.</p>
<p><strong>3/ Compréhension</strong><br />
<em>Avantage : &#8212; flocons &#8211;</em><br />
Certains disent que les modèles en étoile sont plus compréhensibles au premier abord car ils sont plus lisibles, aérés.<br />
Pourtant les hiérarchies sont plus compréhensibles par les utilisateurs dans un modèle en flocons, puisqu&rsquo;elles sont représentées par les jointures. Alors que dans un modèle en étoile on a plus de mal à voir quel attribut est avant l&rsquo;autre &#8230;</p>
<p><strong>4/ Modèles spécifiques</strong><br />
<em>Avantage : &#8212; flocons &#8211;</em><br />
Le modèle en flocons est plus adapté pour les relations n n.<br />
Par exemple si on prend la dimension Compte/Client dans le secteur bancaire, 1 compte a 2 clients, et 1 client a plusieurs comptes &#8230;</p>
<p><strong>5/ Tables agrégées</strong><br />
<em>Avantage : &#8212; flocons &#8211;</em><br />
Le modèle en flocons est adapté aux tables agrégées comme les vues matérialisées d&rsquo;Oracle.<br />
Prenons par exemple une table ventes à volumétrie importante.<br />
Pour des raisons de performance on l&rsquo;a agrégée suivant la semaine, le mois et l&rsquo;année. Ainsi en fonction de la granularité utilisée, on utilisera la table à la plus faible volumétrie.<br />
Avec le modèle en flocons, les jointures sur les dimensions se font simplement.<br />
Par contre avec le modèle en étoile, avec une seule dimension calendrier ayant le jour en point d&rsquo;entrée, il faudra :<br />
&#8211; soit créer des vues sur la table calendrier au niveau semaine, mois et année et qui dédoublonneront les lignes ( avec un distinct ) pour ne pas multiplier les résultats.<br />
&#8211; soit bricoler les jointures dans l&rsquo;applicatif de restitution ( par exemple lier une table agrégée au mois sur le 1er jour du mois )</p>
<p><strong>6/ Attributs partagés</strong><br />
<em>Avantage : &#8212; flocons &#8211;</em><br />
On a souvent des niveaux partagés entre plusieurs dimensions comme le pays dans notre exemple.<br />
Dans un modèle en étoile ces niveaux sont dupliqués dans chaque table, ce qui implique de bons process pour synchroniser les données dans toutes les tables.<br />
Dans un modèle en flocons on n&rsquo;a pas ce problème car on n&rsquo;a qu&rsquo;une seule table.</p>
<p><strong>5/ Applicatifs</strong><br />
<em>Avantage : &#8212; aucun &#8211;</em><br />
Certaines applications comme Microstrategy DSS nécessite un modèle en flocons &#8230; J&rsquo;ai vu un modèle en étoile sur lequel on définissait des vues pour le transformer en flocons &#8230; c&rsquo;est dommage non ?</p>
<p><strong>6/ SCD</strong><br />
<em>Avantage : &#8212; flocons &#8211;</em><br />
On peut scinder une dimension en SCD dans un modèle en flocons, ce qui est idéal pour de grosses volumétries ou une dimension avec de nombreux attributs.</p>
<p><strong>7/ Simplicité</strong><br />
<em>Avantage : &#8212; étoiles &#8211;</em><br />
Le modèle en étoile est plus un modèle &laquo;&nbsp;de fainéants&nbsp;&raquo; &#8230;<br />
Les requêtes SQL sont + faciles à écrire, puisqu&rsquo;il y a moins de jointures. De même la modélisation est plus simple et plus rapide.</p>
<p><strong>Conclusion</strong><br />
Il est difficile de choisir entre les 2 types de modèles quand il n&rsquo;y a pas d&rsquo;applicatifs ou de fonctionnements spécifiques.<br />
D&rsquo;expérience on part souvent sur un modèle en étoile à la Kimball qui est réputé performant et pratque en décisionnel. Et puis on revient sur des parties de dimension qui sont partagées, et qu&rsquo;on &laquo;&nbsp;dénormalise&nbsp;&raquo; en parties de modèle en étoiles.<br />
A mon avis c&rsquo;est surement la meilleure solution, un modèle hybride qui fait du flocon sur des parties spécifiques ( SCD, niveaux partagés ) et de l&rsquo;étoile pour le reste &#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
