IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Merise Discussion :

Projet CMDB : Vérification MCD MLD avant création de la base


Sujet :

Merise

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut Projet CMDB : Vérification MCD MLD avant création de la base
    Bonjour,

    Je vais crerer un site en php permettant de gérer les applications et serveurs de ma société.

    Le principe est tres simple, le but est de faire un "mapping" serveur -> applis et applis -> serveur :
    - Savoir quelle application est hébergée sur quel serveur ...
    - Quel serveur héberge quelle appli

    Pouvez vous me confirmer que le mcd et MLD sont valides svp avant d'aller plus loin. Pour moi tout semble ok.

    Ci-dessous le MCD :



    et le MLD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SERVER (#ID_SERVER, NAME_SERVER, DESC_SERVER, COM_SERVER, DATE_SERVER)
    APPLICATION (#ID_APP, NAME_APP, DESC_APP, DOC_APP, COM_APP, DATE_APP)
    RPA (#ID_RPA, NAME_RPA, COM_RPA, DATE_RPA)
    ENV (#ID_ENV, NAME_ENV, DESC_ENV, COM_ENV)
    HOST (#ID_SERVER,# ID_APP)
    RESPONSIBLE (#ID_APP, #ID_RPA)
    LOCATION (#ID_APP, #ID_ENV)
    Toutes les cardinalités sont en 0,N mais c'est volontaire.

    Egalement le script de création de ma base sous mysql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    CREATE DATABASE CMDB;
    
    USE CMDB;
    
    CREATE TABLE SERVER (
    ID_SERVER INT NOT NULL AUTO_INCREMENT,
    NAME_SERVER VARCHAR(50),
    DESC_SERVER VARCHAR(500),
    COM_SERVER VARCHAR(500),
    DATE_SERVER TIMESTAMP NOT NULL DEFAULT NOW(),
    PRIMARY KEY (ID_SERVER),
    UNIQUE KEY (NAME_SERVER)
    );
    
    CREATE TABLE APPLICATION (
    ID_APP INT NOT NULL AUTO_INCREMENT,
    NAME_APP VARCHAR(50),
    DESC_APP VARCHAR(500),
    DOC_APP VARCHAR(500),
    COM_APP VARCHAR(500),
    DATE_APP TIMESTAMP NOT NULL DEFAULT NOW(),
    PRIMARY KEY (ID_APP),
    UNIQUE KEY (NAME_APP)
    );
    
    CREATE TABLE RPA (
    ID_RPA INT NOT NULL AUTO_INCREMENT,
    NAME_RPA VARCHAR(50),
    COM_RPA VARCHAR(500),
    DATE_RPA TIMESTAMP NOT NULL DEFAULT NOW(),
    PRIMARY KEY (ID_RPA),
    UNIQUE KEY (NAME_RPA)
    );
    
    CREATE TABLE ENV (
    ID_ENV INT NOT NULL AUTO_INCREMENT,
    NAME_ENV VARCHAR(50),
    DESC_ENV VARCHAR(500),
    COM_ENV VARCHAR(500),
    PRIMARY KEY (ID_ENV),
    UNIQUE KEY (NAME_ENV)
    );
    
    CREATE TABLE HOST (
    ID_SERVER INT NOT NULL,
    ID_APP INT NOT NULL,
    FOREIGN KEY (ID_SERVER) REFERENCES SERVER(ID_SERVER),
    FOREIGN KEY (ID_APP) REFERENCES APPLICATION(ID_APP),
    PRIMARY KEY (ID_SERVER, ID_APP)
    );
    
    CREATE TABLE RESPONSIBLE(
    ID_APP INT NOT NULL,
    ID_RPA INT NOT NULL,
    FOREIGN KEY (ID_APP) REFERENCES APPLICATION(ID_APP),
    FOREIGN KEY (ID_RPA) REFERENCES RPA(ID_RPA),
    PRIMARY KEY (ID_APP, ID_RPA)
    );
    
    CREATE TABLE LOCATION(
    ID_APP INT NOT NULL,
    ID_ENV INT NOT NULL,
    FOREIGN KEY (ID_APP) REFERENCES APPLICATION(ID_APP),
    FOREIGN KEY (ID_ENV) REFERENCES ENV(ID_ENV),
    PRIMARY KEY (ID_APP, ID_ENV)
    );
    Merci d'avance à vous ....
    Images attachées Images attachées  

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Bonjour B.gaumard,

    Citation Envoyé par B.gaumard
    Toutes les cardinalités sont en 0,N mais c'est volontaire.
    ==> : eh bien, pas de problème, alors... les tables correspondent bien au MCD.

    Si tu crées toutes tes relations en 0,n, donc "au pire", "au maximum", je ne sais trop comment nommer cette approche, toute modélisation devient inutile. C'est vrai que, par cette méthode, tu te donnes le moyen de gérer la modélisation "a posteriori" en remplissant ou pas, les tables associatives. Mais bon... je ne suis pas certain que ce soit la bonne méthode.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    Merci richard pour ta réponse, effectivement je n'avais pas vu ca sous cet angle, que préconise tu alors comme cardinalités ?

    Si j'ai mis du 0,N partout c'est que pour moi :

    -Un serveur peut heberger 0 ou N applications (mutulsalisation)
    -Une application peut etre hébergée sur 0 ou N serveurs (cluster)

    -Une application peut avoir 0 ou N responsables
    -Un responsable peut gérer 0 ou N applications

    - Une application se trouve dans 0 ou N environnements
    - Un env contient 0 ou N applications

    Je suis preneur si vous avez des idées de cardinalités différentes pour que la modélisation soit la plus logique possible.

    Merci encore ...

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Dans ce cas, effectivement, ton MCD correspond bien aux règles de gestion que tu as mentionnées. En conséquence, les tables aussi : 3 tables associatives pour gérer les n,n.

    Citation Envoyé par B.gaumard
    Je suis preneur si vous avez des idées de cardinalités différentes pour que la modélisation soit la plus logique possible.
    ==> c'est la modélisation la plus logique possible, compte tenu des règles de gestion.

    Citation Envoyé par B.gaumard
    Toutes les cardinalités sont en 0,N mais c'est volontaire.
    ==> je pensais que tu avais créé toutes les cardinalités en 0,n pour ne pas te prendre la tête (mauvais esprit de ma part , désolé).

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    lol
    je pensais que tu avais créé toutes les cardinalités en 0,n pour ne pas te prendre la tête (mauvais esprit de ma part , désolé).
    Merci, sauf qu'avec des cardinalités 0,N je ne vois pas comment faire la liaison, je suis un peu perdu

    Si je veux faire une requete SQL pour savoir quelle application est installé sur le serveur X comment je fais ?

    Avec du 1N c'est facile mais la .... en plus l'école c'est loin maintenant

    Merci en tout cas ...

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Citation Envoyé par B.gaumard
    Si je veux faire une requete SQL pour savoir quelle application est installé sur le serveur X comment je fais ?
    ==> il faudra toujours passer par la table associative. Il y a également la possibilité de créer des vues SQL.

    Pour répondre précisément à ta question, il faudra créer une requête (ou une vue) qui analyse SERVER (FROM) lié à HOST (FROM) via ID_SERVER (JOIN/LEFTJOIN) avec HOST (FROM) lié à APPLICATION via ID_APP (JOIN/LEFTJOIN) : le SELECT te donnera les informations que tu souhaites.

    Mais, c'est une autre histoire que de la modélisation : il s'agit de l'exploitation des données et cela dépend de ton SGBD.

    Ce qui est certain, tous SGBD confondus, c'est que la modélisation des données doit être "béton" pour être exploitable.

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    Bon deja je ne vois pas comment remplir ma table associsative ...

    ex : j'ai un formulaire pour ajouter un serveur avec 6 champs :

    ID_SERVER INT NOT NULL AUTO_INCREMENT,
    NAME_SERVER VARCHAR(50),
    DESC_SERVER VARCHAR(500),
    COM_SERVER VARCHAR(500),
    DATE_SERVER TIMESTAMP NOT NULL DEFAULT NOW(),

    + une liste déroulante qui permet de selectionner mon appli associée au serveur.

    Pour remplir mes champs serveur no pb :

    ("INSERT INTO server (NAME_SERVER, DESC_SERVER, COM_SERVER) VALUES('$NAME_SERVER','$DESC_SERVER', '$COM_SERVER')");

    Le $ correspond à la valeur tapée dans les champs ...

    par contre pour renseigner ma table HOST, il faut que j'insère ID_SERVER et ID APP qui sont générés en auto increment donc la je suis perdu

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Tu abordes, maintenant, le développement pur et dur : quel langage/logiciel de programmation utilises-tu ?

    Le principe général est le suivant :
    • dans ton formulaire SERVER, pour 1 SERVER (déjà créé, donc ID_SERVER existant), tu saisis les APPLICATION hébergées ==> le couple ID_SERVER/ID APP est généré dans HOST ;
    et/ou
    • dans ton formulaire APPLICATION, pour 1 APPLICATION (déjà créée, donc ID APP existant), tu saisis les SERVER qui l'héberge ==> le couple ID_SERVER/ID APP est généré dans HOST.

    Dans le détail, cela dépend beaucoup du langage/logiciel de programmation que tu utilises. Le mieux, est de poster dans le forum adéquat, tu bénéficieras, de ce fait, de l'aide des spécialistes de ce langage/logiciel de programmation.

  9. #9
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 209
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Une fois que vous avez inséré les lignes qui vont bien dans les tables SERVEUR et APPLI, pour associer un serveur et une application vous pouvez vous inspirer d’une approche SQL Server (désolé, je n’utilise pas MySQL, je n’arrive pas à l’installer...) :

    Déclaration de variables et affectation des valeurs utilisées pour un nom de serveur et un nom d’application (ces noms sont des clés candidates selon votre code) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DECLARE @sn as VARCHAR(20), @ap as VARCHAR(20), @snId as INT, @apId as INT ;
    SET @sn = 'serveur 01' ; SET @ap = 'appli X' ;

    Connaissant maintenant les noms du serveur @sn et de l’application @ap à associer, on récupère les valeurs correspondantes des identifiants (clés) correspondants :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SET @snId = (SELECT ID_SERVER FROM SERVEUR WHERE NAME_SERVER = @sn) ;
    SET @apId = (SELECT ID_APP FROM APPLI WHERE NAME_APP = @ap) ;
     
    INSERT INTO HOST (ID_SERVER, ID_APP) VALUES (@snId, @apId) ;

    Ou, variante de l’INSERT :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO HOST (ID_SERVER, ID_APP) 
           SELECT x.ID_SERVER, y.ID_APP 
           FROM   SERVEUR AS x, APPLI AS y 
           WHERE  x.NAME_SERVER = @sn
           AND    y.NAME_APP = @ap ;

    La performance des opérations reste évidemment à vérifier.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    bonjour,

    Merci à vous 2 pour vos réponses c'est super ...

    J'ai opté pour faire 2 requetes SELECT + récuperer le résultat pour faire un insert ...

    SET @snId = (SELECT ID_SERVER FROM SERVEUR WHERE NAME_SERVER = @sn) ;
    SET @apId = (SELECT ID_APP FROM APPLI WHERE NAME_APP = @ap) ;

    INSERT INTO HOST (ID_SERVER, ID_APP) VALUES (@snId, @apId) ;

    J'ai quelques problèmes de variables PHP mais ca fonctionne du tonnerre ...

    Je vous tiens au courant merci merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/09/2014, 12h25
  2. [MCD] aide pour la création d'un MCD/MLD pour site Web
    Par eXiDiZeR dans le forum Schéma
    Réponses: 2
    Dernier message: 16/06/2012, 18h17
  3. Passage Mcd Mld
    Par crazychris64 dans le forum Schéma
    Réponses: 10
    Dernier message: 27/06/2006, 14h54
  4. Diagramme de classes (MCD, MLD) depuis IBConsole
    Par skeut dans le forum Outils
    Réponses: 2
    Dernier message: 10/01/2006, 17h41
  5. [MySQL] Vérification de doublons avant insertion
    Par Nicos77 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 09/12/2005, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo