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

Schéma Discussion :

Du MCD AU MPD [MCD]


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Du MCD AU MPD
    Bonsoir je voudrais avoir votre avis sur mes modèles
    et surtout savoir si je n'ai pas fait d'erreur.

    Voici mon mcd (voir lien)

    http://www.esinger.fr/projetschema2.jpg

    Grâce à ce modèle je suis passé au MLD

    organism (organism_id, organism_name, organism_compagny, organism_email_address,
    organism_siret, organism_telephone, organism_fax, organism_tva_intracom,
    #customers_id)

    personal (personal_id, personal_gender, personal_firstname, personal_lastname,
    personal_dob, personal_email_address, personal_telephone, #customers_id)

    customers ( customers_id, customers_password, customers_validation_code,
    customers_validation)

    customers_address (customers_address_id, customers_id, address_id)

    address (address_id, address_street_address, address_suburb, address_postcode,
    address_city, address_state, #countries_id)

    countries (countries_id, countries_name, countries_iso_code_2, countries_iso_code_3,
    #address_format_id)

    address_format (address_format_id, address_format, address_summary)

    orders ( orders_id, payment_method, date_purchased, last_modified, orders_date_finished)

    orders_status_history (orders_status_history_id, orders_id, orders_status_id,
    customer_notified, comments)

    orders_status (orders_status_id, orders_status_name)

    orders_invoice ( orders_invoice_id, date_invoice, #orders_id)

    orders_products (orders_products _id, orders_id, products_id, products_name, final_price, products_tax)

    products (products_id, products_quantity, products_model, products_image, products_price,
    products_price_cost, products_cost, products_date_added, products_last_modified,
    products_date_available, products_weight, products_status, products_ordered,
    products_compare_status, products_compare_expedition)

    orders_total ( orders_total_id, title, text, value, class, #orders_id)


    Pour finir par réaliser ce MPD (voir lien)

    http://www.esinger.fr/projetschema3.jpg


    je vous remercie par avance de l'aide que vous pouvez m'apporter.


  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Comme organism et personal héritent de customers, je n'aurais pas créé d'id spécifique aux tables filles. C'est même à la limite dangereux de faire ainsi car le modèle n'interdit pas à #customers_id de figurer plusieurs fois dans la table organism ou personal, c'est à dire d'être associé à plusieurs lignes des tables filles.
    L'identifiant d'une table fille est l'identifiant de la table mère en tant que clé primaire et étrangère dans la table fille :
    organism (#customers_id, organism_name, organism_compagny, organism_email_address,
    organism_siret, organism_telephone, organism_fax, organism_tva_intracom
    )

    personal (#customers_id, personal_gender, personal_firstname, personal_lastname,
    personal_dob, personal_email_address, personal_telephone)

    customers ( customers_id, customers_password, customers_validation_code,
    customers_validation)
    A noter pour l'implémentation plus tard : prévoir une contrainte d'exclusion mutuelle entre organism et personal : un client est soit une personne, soit un organisme mais pas les deux. Enfin c'est mon avis.
    Noralement, un bon mécanisme de création de client devrait rendre inutile cette contrainte :
    On crée un client de type organisme -
    - en créant le 'customer' ;
    - en récupérant l'id nouvellement créé ;
    - en créant 'organism' avec lid précédemment récupéré.

    customers_address est une table associative matérialisant l'association de type (n,m) entre customers et address. Sa clé primaire doit donc être composée des identifiants des tables entrant en jeu dans l'association et elle ne doit pas avoir d'identifiant propre :
    customers_address (customers_id, address_id)
    un 'orders' ne dépend que d'un seul 'cutomers'. Il manque donc la clé étrangère identifiant le 'customers' dans la table 'orders'.
    orders ( orders_id, payment_method, date_purchased, last_modified, orders_date_finished, customers_id)
    orders_status_history est une table associative. Idem customers_address ; on supprime orders_status_history_id :
    orders_status_history (orders_id, orders_status_id,
    customer_notified, comments)
    orders_products idem ; on supprime orders_products_id.
    products_name ne devrait pas y figurer puisqu'on obtient le nom du produit par association avec la table produts :
    orders_products (orders_id, products_id, final_price, products_tax)
    La quantité n'a rien à faire dans la table products (sauf si c'est la quantité en stock ; et encore c'est plutôt une quantité calculée) mais doit figurer dans la table associative orders_products puisqu'il me semble qu'il s'agit de la quantité d'un produit dans une commande.
    Par contre il vaut mieux y mettre le nom du produit :
    products (products_id, products_name, products_model, products_image, products_price,
    products_price_cost, products_cost, products_date_added, products_last_modified,
    products_date_available, products_weight, products_status, products_ordered,
    products_compare_status, products_compare_expedition)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 7
    Points
    7
    Par défaut merci
    Bonjour et merci encore une fois à Cinephil.

    Comme organism et personal héritent de customers, je n'aurais pas créé d'id
    En fait si je comprends bien, il n’y a pas d’id car un client et soit un organisme soit une personne mais pas les deux

    L'identifiant d'une table fille est l'identifiant de la table mère en tant que clé primaire et étrangère dans la table fille
    J’ai compris le sans de la phrase mais (je vais passer encore pour un idiot) je ne connais pas la définition de table mère/fille (j’ai cherché sur mes bouquins et sur Google en vain).

    pour l'implémentation plus tard : prévoir une contrainte d'exclusion mutuelle entre organism et personal
    Je verrais lors de l'implémentation mais je sens déjà que ça va me poser des difficultés. De plus le script que génère Amcdesigner n’est pas correct (il me met des index).


    customers_address est une table associative
    orders_status_history est une table associative.
    Oui en effet on ne met pas d’id dans les associations.

    un 'orders' ne dépend que d'un seul 'cutomers'
    C’est une faute d’inattention ,car j’ai bien mis #customers dans le Mpd mais je l’ai oublié dans le Mld (je dois être blond des fois).

    orders_products idem ; on supprime orders_products_id.
    products_name ne devrait pas y figurer
    La quantité n'a rien à faire dans la table products
    J’ai inversé les propriétés et j’ai supprimé l’id en plus.

    Après modifications voici les nouveaux MCD, MLD et MPD

    mcd
    http://www.esinger.fr/projetschema2.jpg

    mld
    organism (#customers_id, organism_name, organism_compagny, organism_email_address,
    organism_siret, organism_telephone, organism_fax, organism_tva_intracom)

    personal (#customers_id, personal_gender, personal_firstname, personal_lastname,
    personal_dob, personal_email_address, personal_telephone)

    customers ( customers_id, customers_password, customers_validation_code,
    customers_validation)

    customers_address (customers_id, address_id)

    address (address_id, address_street_address, address_suburb, address_postcode,
    address_city, address_state, #countries_id)

    countries (countries_id, countries_name, countries_iso_code_2, countries_iso_code_3,
    #address_format_id)

    address_format (address_format_id, address_format, address_summary)

    orders ( orders_id, payment_method, date_purchased, last_modified, orders_date_finished,
    #customers_id)

    orders_status_history (orders_id, orders_status_id, customer_notified, comments)

    orders_status (orders_status_id, orders_status_name)

    orders_invoice ( orders_invoice_id, date_invoice, #orders_id)

    orders_products (orders_id, products_id, products_quantity, final_price, products_tax)

    products (products_id, , products_name, products_model, products_image, products_price,
    products_price_cost, products_cost, products_date_added, products_last_modified,
    products_date_available, products_weight, products_status, products_ordered,
    products_compare_status, products_compare_expedition)

    orders_total ( orders_total_id, title, text, value, class, #orders_id)
    et mpd

    http://www.esinger.fr/projetschema3.jpg

    Merci de me dire si je n’ai pas fait d’erreur.

    p.s pour cinephile : merci énormément sans vous je n’y serais jamais arrivé.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par bad111 Voir le message
    En fait si je comprends bien, il n’y a pas d’id car un client et soit un organisme soit une personne mais pas les deux
    Plus exactement, et comme je l'ai modéliser dans mon précédent message, l'identifiant de la table 'organism' ou de la table 'personal' est le même que l'identifiant de la table 'customers'.

    J’ai compris le sens de la phrase mais (je vais passer encore pour un idiot) je ne connais pas la définition de table mère/fille (j’ai cherché sur mes bouquins et sur Google en vain).
    Nous sommes ici dans un cas d'héritage où 'personal' et 'organism' héritent de 'customers'. Une fille hérite de sa mère non ? Donc 'personal' et 'organism' sont les tables filles et 'customers' est la table mère. C'est pas plus compliqué que ça !
    Cette notion d'héritage vient du monde objet et d'UML. Tu aurais cherché avec 'classe fille', tu aurais trouvé.

    Je verrais lors de l'implémentation mais je sens déjà que ça va me poser des difficultés. De plus le script que génère Amcdesigner n’est pas correct (il me met des index).
    Je ne connais pas AMC Designor. Peut-être met-il des index sur les clés primaires et étrangères ?

    Les schémas semblent bons.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Futur Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 7
    Points
    7
    Par défaut dictionnaire du mcd
    bonsoir tout le monde

    maintenant que j'ai fini mes modèles, je me suis remis à travailler sur mon dictionnaire.

    Voici ce que ça donne pour l'entité address.


    Entité Address (adresse)


    Nom : address_street_address (rue)
    Format : an
    Taille : jusqu’à 64 caractères.
    Description : Contient le numéro ainsi que la rue du client.

    Nom : address_suburb (Banlieue)
    Format : an
    Taille : jusqu’à 32 caractères.
    Description : Non utilisé.

    Nom : address_postcode (code postale)
    Format : an
    Taille : jusqu’à 10 caractères.
    Description : Contient le code postal du client provenant de divers pays.

    Nom : address_city (ville)
    Format : an
    Taille : jusqu’à 32 caractères.
    Description : Contient la ville de provenance du client.
    Nom : address_state (pays)
    Format : an
    Taille : jusqu’à 32 caractères.
    Description : Contient le pays sélectionné par le client.


    Merci de me dire ce que vous en pensez.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans quel but fais-tu ceci ?

    Si le but est d'aider les développeurs et mainteneurs, ne vaudrait-il pas mieux faire un catalogue des tables (nom, utilité, liste des colonnes)
    et un catalogue des colonnes (nom de colonne, nom de table, type, utilité, référence à clé étrangère éventuelle, contraintes, index ou non, commentaire éventuel).

    Tu peux même faire ça dans une partie de la base de données en tant que méta-données ou utiliser directement le catalogue de ton SGBD (la base information_schema).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Futur Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci de ta réponse


    D'après ce que j'ai pu comprendre le dictionnaire de donné a pour bût d'aider à la modélisation du mcd (voir lien)

    http://www.phportail.net/articles/46-methode-merise.php


    Mais il y a très peu d'explication à ce sujet donc j'ai pris comme exemple le dictionnaire de donné de atos (société de paiement par cb).


    Merci de ton aide.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par bad111 Voir le message
    D'après ce que j'ai pu comprendre le dictionnaire de donné a pour bût d'aider à la modélisation du mcd (voir lien)
    Et le MCD, tu l'as déjà fait !
    Donc tu peux zapper cette étape si c'est la seule utilité que tu lui trouves !

    Pour info, j'ai fait un dictionnaire de données pour l'application sur laquelle je travaille parce que j'ai fait de la rétro ingénierie afin de créer une nouvelle base de données normalisée pour remplacer l'ancienne qui ne l'était pas.
    J'ai mis dans un classeur Excel :
    - la liste des bases de données utiles à l'application ;
    - la liste des tables ;
    - la liste des colonnes avec un commentaire expliquant ce qu'elles stockent et parfois les valeurs qu'elles peuvent prendre.

    J'ai fait la même chose pour la nouvelle base et j'ai mis dans une colonne la correspondance entre les deux schémas.

    Je m'en sers maintenant lorsque je modifie les programmes pour les adapter à la nouvelle base de données pour savoir par quoi remplacer les requêtes SQL existantes dans le code.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. [Win'Design] Du MCD au MPD
    Par kitsune dans le forum Autres
    Réponses: 8
    Dernier message: 21/07/2009, 12h26
  2. recherche d'un logiciel de modelisation des MCD et MPD
    Par amira2006 dans le forum Outils
    Réponses: 1
    Dernier message: 09/04/2007, 14h08
  3. Quelques rappels pour réaliser un MCD et MPD.
    Par ginette13 dans le forum Schéma
    Réponses: 4
    Dernier message: 07/09/2006, 09h09
  4. MCD vers MPD
    Par ducker88 dans le forum PowerAMC
    Réponses: 1
    Dernier message: 10/01/2006, 13h41
  5. Reverse engineering : Générer MCD, MLP & MPD ?
    Par mariez dans le forum Schéma
    Réponses: 3
    Dernier message: 17/10/2005, 11h05

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