Université de Cergy Pontoise 2004/2005 Site Saint-Martin Maîtrise d informatique Auteurs : ZIGHA Mustapha HESSAS Yacine LI Yong RAPPORT DU PROJET Cours théorique : Travaux pratiques :
M. M. Pages n : Introduction 2 I- Modélisation du système d information opérationnel (S.I.O) 3 A- Détermination de la liste des entités. B- Détermination des attributs et des identifiant. C- Détermination des relations entre les entités. D- Détermination des caractéristiques des relations. E- Schéma final de l opérationnel. II- Modélisation du système d information décisionnel (S.I.D) 7 A- Comment obtenir le schéma en étoile? B- Schéma en étoile. C- Comment obtenir le schéma en flocon? D- Schéma en flocon. E- Synthèse du décisionnel. III- Modèle physique du S.I.O et S.I.D et remplissage du S.I.O avec un jeu d essai. 12
IV- ETL (Extract, Transform and Load) 14 A- Etapes du programme. B- Exemple. C- Difficultés rencontrées. Conclusion 15 Introduction On s intéresse à la ligue de tennis du val d Oise qui souhaite informatiser la gestion des matchs organisés par ses clubs. L objectif de ce projet est de modéliser l opérationnel de l entreprise jusqu à génération du script SQL pour générer le schéma de la base. Ainsi, on pourra modéliser le Data house correspondant et préparer sous forme de procédure PL/SQL, l alimentation de données de l opérationnel vers le Data house. Pour cela, il sera nécessaire de faire la liaison entre les deux bases à l aide de l ETL. L objectif final sera de répondre à des requêtes telles que : - Le nombre de matchs gagnés et le nombre de maths effectuées - par adhérent, par catégorie, par club et par sexe - par semaine, par mois et par année - Le nombre de spectateur - par match, par club, catégorie - par semaine, par mois et par année - Le nombre de matchs organisés - par club, - par semaine, par mois et par année Ainsi, le responsable de la ligue pourra étudier les statistiques qu il désir et prendre les mesure qui s impose pour gérer au mieux la ligue de tennis du val d Oise.
I- Modélisation du système d information opérationnel (S.I.O) Pour la conception du diagramme de l opérationnel sous le logiciel Rational Rose, nous avons pu déterminer 5 classes distinctes que nous allons détailler. 1. Détermination de la liste des entités Les entités «ADHÉRENT» et «CLUB» ont une existence propre et s'impose d'euxmêmes. En considérant plus finement l'entité «ADHÉRENT» on distingue certaines caractéristiques générales telle que: son nom, son prénom, son adresse etc... et certaines caractéristiques propres au joueur, comme le résultat du match qui peut varier d'un joueur à l'autre. «ADHERENT» est décrit par un certain nombre de caractéristiques structurées comme le match ou le tournoi auxquelles ils participent. On fait donc deux entités supplémentaires «MATCH» et «TOURNOI» Ensuite, on ajoute la classe «DATE» pour pouvoir gérer les dates des différents matchs. 2. Détermination des attributs et des identifiant Grâce à la lecture de l'énoncé on peut identifier les attributs suivant: *Pour caractériser le «CLUB» on a: -son numéro
-son nom -son adresse -son téléphone *L' «ADHERENT» est caractérisé par: -son numéro d adhérent -son nom -son adresse -sa situation matrimoniale -son nombre d'enfant -son sexe -son numéro de licence Pour les attributs «MATCH» et «TOURNOI» rien n'est spécifié clairement dans l'énoncé sauf le numéro du match. Il faut donc éventuellement s'interroger sur les besoins en information des utilisateurs concernant ces entités. *Pour le «TOURNOI», on peut proposer: -le nom du tournoi -le numéro du tournoi *Pour le «MATCH» on a: -le numéro du match *Enfin, pour la «DATE» on ajoute l attribut : -Id_Date 3. Détermination des relations entre les entités Il existe des liens naturels entre certaines entités. Par exemple un «ADHERENT» appartient à un «CLUB. Un «MATCH» se déroule à une date précise. De plus, un «TOURNOI» est composé de plusieurs «MATCH» Enfin, on peut distinguer des «CLUB» qui organisent des «TOURNOI» et des «CLUB» qui sont invité aux «TOURNOI. 4. Détermination des caractéristiques des relations La relation «déroule» Elle n'a pas d'attributs propres. Sa dimension est deux. Elle relie «MATCH» à «DATE»
Elle est de cardinalité M..N puisqu un «MATCH» peut se dérouler à une ou plusieurs «DATE», cependant à la même «DATE» il peut y avoir plusieurs «MATCH» La relation «appartient» Elle n'a pas d'attribut propre. Sa dimension est deux. Elle relie «ADHERENT» à un «CLUB» Elle est de cardinalité 1..N puisqu un «ADHERENT» ne peut appartenir qu'a un seul «CLUB», en revanche dans un club il y a plusieurs adhérents. La relation «composé» Elle n'a pas d'attribut propre. Sa dimension est deux. Elle relie «TOURNOI» à ««MATCH» Elle est de cardinalité 1..N car un «TOURNOI» est composé de plusieurs «MATCH», cependant un «MATCH» appartient à un seul «TOURNOI» La relation «perdant» Elle n'a pas d'attribut propre. Sa dimension est deux. Elle relie «ADHERENT» à ««MATCH» Elle est de cardinalité M..N car un «ADHERENT» peut perdre plusieurs «MATCH» et un «MATCH» ne peut être perdu que par un seul «ADHERENT» Même raisonnement pour la relation «gagnant» La relation «perdant» Elle n'a pas d'attribut propre. Sa dimension est deux. Elle relie «ADHERENT» à ««MATCH» Elle est de cardinalité M..N car un «ADHERENT» peut perdre plusieurs «MATCH» et un «MATCH» ne peut être perdu que par un seul «ADHERENT» Même raisonnement pour la relation «gagnant» La relation «organise» Elle n'a pas d'attribut propre. Sa dimension est deux. Elle relie «CLUB» à «TOURNOI» Elle est de cardinalité M..N car un «CLUB» peut organiser plusieurs «TOURNOI», et un «TOURNOI» peut être organisé par plusieurs «CLUB» Même raisonnement pour la relation «invité» 5. Schéma final de l opérationnel
Enfin, grâce au logiciel Rational Rose, ce diagramme a pu être retranscrit en script SQL pour créer les tables correspondantes sous ORACLE. DATE (from Package_Opérationnal) Id_Date : Date déroule ADHERENT (from Package_Opérationnal) numéro_adhérent : Integer nom_adhérent : String prénom_adhérent : String adresse_adhérent : String situation_matrimoniale : String nbr_enfant : Integer sexe : String numéro_licence : Integer perdant gagnant MATCH (from Package_Opérationnal) numéro_match : Integer appartient composé CLUB (from Package_Opérationnal) numéro_club : Integer nom_club : String adresse_club : String téléphone_club : String organise invité TOURNOI (from Package_Opérationnal) numéro_tournoi : Integer nom_tournoi : String II- Modélisation du système d information décisionnel (S.I.D) 1. Comment obtenir le schéma en étoile?
Le schéma en étoile s appui sur les classes mis en évidence lors de la modélisation de l opérationnel, ainsi on retrouve les tables : -«ADHERENT» -«CLUB» -«TOURNOI» -«MATCH» -«DATE» On a au milieu, une table de faits connectée à l ensemble des tables de dimensions : -«Table de faits Tennis» Les tables autours de la table de faits sont toute repéré par un identifiant unique, on retrouve également ces identifiant dans la table de faits. Ainsi la table : «ADHERENT» a pour identifiant numéro_adhérent «CLUB» a pour identifiant numéro_club «TOURNOI» a pour identifiant numéro_tournoi «MATCH» a pour identifiant numéro_match «DATE» a pour identifiant Id_Date La table de faits contient également une série d attribut qui représente les mesures c est à dire ce que l on veut calculer et mémoriser pour étudier les différentes caractéristiques des matchs de tennis. Selon ce que veut étudier le responsable de la ligue, on distingue les attributs suivant : -nombre_match_gagné -nombre_match_effectué -nombre_spectateur -nombre_match_organisé
2. Schéma en étoile TOURNOI numéro_tournoi : Integer nom_tournoi : String ADHERENT numéro_adhérent : Integer nom_adhérent : String sexe : String Table de fait "Tennis" nbr_match_gagné : Integer nbr_match_effectué : Integer nbr_spectateur : Integer nbr_match_organisé : Integer MATCH numéro_match : Integer CLUB numéro_club : Integer nom_club : String cathégorie_club : String DATE Id_Date : String semaine : Integer mois : Integer année : Integer
3. Comment obtenir le schéma en flocon? Le schéma en flocon n est qu une évolution du schéma en étoile. En effet, le schéma en flocon est un raffinement du précédent où certaines tables de dimensions sont normalisées (donc décomposées) On a donc normalisé les trois tables suivantes : -«ADHERENT» -«CLUB» -«DATE» De la table «CLUB», on a mis en évidence une table : -«CATHEGORIE» De la table «ADHERENT», on a mis en évidence la tables : -«SEXE» De la table «DATE», on a mis en évidence une table : -«MOIS» Les attributs des nouvelles tables sont des attributs évident. La table de faits reste inchangée. 4. Schéma en flocon
TOURNOI numéro_tournoi : Integer nom_tournoi : String ADHERENT numéro_adhérent : Integer nom_adhérent : String Id_Sexe : String Table_de_fait_Tennis nbr_match_gagné : Integer nbr_match_effectué : Integer nbr_spectateur : Integer nbr_match_organisé : Integer MATCH numéro_match : Integer SEXE Id_Sexe : String féminin : String masculin : String CLUB numéro_club : Integer nom_club : String Id_Cathégorie : String CATHEGORIE Id_Cathégorie : String junior : String senior : String SEMAINE Id_Semaine : String semaine : Integer mois : Integer année : Integer Id_Mois : String MOIS Id_Mois : String mois : Integer année : Integer Id_Année : String ANNEE Id_Année : String année : Integer 5. Synthèse du décisionnel La base décisionnelle, conçue à partir de la base opérationnelle, va permettre de répondre aux requêtes désirées : Nombre de matches gagnés et nombre de matches effectués : - par adhérent, par catégorie, par club, par sexe - par semaine, par mois, par année Nombre de matches organisés : - par club - par semaine, par mois, par année Nombre de spectateurs - par match, par club, par catégorie
- par semaine, par mois, par année? Nous avons donc une première table, «Table de faits Tennis», qui contient les indicateurs qui nous permettront de répondre aux questions suivantes : Table de faits Tennis Nombre de matches gagnés Nombre de matches effectués Nombre de matches organisés Nombre de spectateurs? Notre table «CLUB» permettra de répondre aux requêtes par club : CLUB Numéro du club Nom du club Identifiant de la catégorie? Notre table «ADHERENT» permettra tout particulièrement de répondre aux requêtes par adhérent : ADHERENT Numéro de l adhérent Nom de l adhérent Identifiant du sexe? Notre table «SEXE» permettra de répondre aux requêtes par sexe : SEXE Identifiant du sexe féminin masculin? La table «MATCH» permettra de calculer le nombre de matches : MATCH Numéro de match? La suivante regroupera les réponses par catégorie : CATEGORIE Identifiant de la catégorie Junior Senior? Les tables «SEMAINE», «MOIS» et «ANNEE» nous permettront de regrouper les réponses par semaine, par mois ou par année : SEMAINE Identifiant de la semaine Numéro de la semaine Numéro du mois Numéro de l année
Identifiant de la date MOIS ANNEE Identifiant du mois Numéro du mois Numéro de l année Identifiant de la semaine Identifiant de l année Numéro de l année Identifiant du mois III- Modèle physique du S.I.O et S.I.D et remplissage du S.I.O avec un jeu d essai. Le SIO est remplit avec le jeu d'essai suivant:
INSERT INTO T_TOURNOI (numéro_tournoi, nom_tournoi) VALUES (1, 'Rolland Garos'); INSERT INTO T_TOURNOI (numéro_tournoi, nom_tournoi) VALUES (2, 'Open d'autralie'); INSERT INTO T_TOURNOI (numéro_tournoi, nom_tournoi) VALUES (3, 'Tournoi des nul'); INSERT INTO T_TOURNOI (numéro_tournoi, nom_tournoi) VALUES (4, 'Tournoi des fort'); INSERT INTO T_TOURNOI (numéro_tournoi, nom_tournoi) VALUES (5, 'Tournoi à deux balle'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (1, 'Legrand', 'son_sexe'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (2, 'Lepetit', 'son_sexe'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (3, 'Lebalise', 'son_sexe'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (4, 'Lenul', 'son_sexe'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (5, 'Legrand', 'son_sexe'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (6, 'Lepetit', 'son_sexe'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (7, 'Lebalaise', 'son_sexe'); INSERT INTO T_ADHERENT (numero_adhérent, nom_adhérent, Id_Sexe) VALUES (8, 'Lenul', 'son_sexe'); INSERT INTO T_MATCH (numero_match) VALUES (1); INSERT INTO T_MATCH (numero_match) VALUES (2); INSERT INTO T_MATCH (numero_match) VALUES (3); INSERT INTO T_MATCH (numero_match) VALUES (4); INSERT INTO T_MATCH (numero_match) VALUES (5); INSERT INTO T_MATCH (numero_match) VALUES (6); INSERT INTO T_MATCH (numero_match) VALUES (7); INSERT INTO T_MATCH (numero_match) VALUES (8); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie) VALUES (1, 'Cergy'); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie)
VALUES (2, 'Paris', 'la_cathégorie'); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie) VALUES (3, 'Amiens', 'la_cathégorie'); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie) VALUES (4, 'Aubervillier', 'la_cathégorie'); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie) VALUES (5, 'Creil', 'la_cathégorie'); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie) VALUES (6, 'Beauvais', 'la_cathégorie'); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie) VALUES (7, 'Lille', 'la_cathégorie'); INSERT INTO T_CLUB (numéro_club, nom_club, Id_Cathégorie) VALUES (8, 'Beauvais', 'la_cathégorie'); INSERT INTO T_DATE (Id_Date, jour, Id_Mois, année) VALUES ('1ere_journe', 01, 'le_mois', 2005); INSERT INTO T_DATE (Id_Date, jour, Id_Mois, année) VALUES ('2eme_journe', 02, 'le_mois', 2005); INSERT INTO T_DATE (Id_Date, jour, Id_Mois, année) VALUES ('3eme_journe', 03, 'le_mois', 2005); INSERT INTO T_DATE (Id_Date, jour, Id_Mois, année) VALUES ('4eme_journe', 04, 'le_mois', 2005); INSERT INTO T_DATE (Id_Date, jour, Id_Mois, année) VALUES ('5eme_journe', 05, 'le_mois', 2005); INSERT INTO T_DATE (Id_Date, jour, Id_Mois, année) VALUES ('6ere_journe', 06, 'le_mois', 2005); INSERT INTO T_DATE (Id_Date, jour, Id_Mois, année) VALUES ('7ere_journe', 07, 'le_mois', 2005); INSERT INTO T_SEXE (Id_Sexe, féminin, masculin) VALUES ('son_sexe', 'oui', 'non'); INSERT INTO T_SEXE (Id_Sexe, féminin, masculin) VALUES ('son_sexe', 'non', 'oui'); INSERT INTO T_CATHEGORIE (Id_Cathégorie, junior, senior) VALUES ('la_cathégorie', 'oui', 'non'); INSERT INTO T_CATHEGORIE (Id_Cathégorie, junior, senior) VALUES ('la_cathégorie', 'non', 'oui'); INSERT INTO T_MOIS (Id_Mois, année) VALUES ('le_mois', 2005); INSERT INTO T_MOIS (Id_Mois, année) VALUES ('le_mois', 2006); INSERT INTO T_MOIS (Id_Mois, année) VALUES ('le_mois', 2007); INSERT INTO T_MOIS (Id_Mois, année) VALUES ('le_mois', 2008);
http://www.google.fr/ IV- ETL (Extract, Transform and Load) 1. Etapes du programme. 2. Exemple. 3. Difficultés rencontrées. Conclusion