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 :

Héritage ou bien duplication des entités ! [MCD]


Sujet :

Schéma

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut Héritage ou bien duplication des entités !
    bonjour,
    SVP j'ai vraiment un très grand problème au niveau de mon modèle conceptuel !
    Il s'agit de gestion des utilisateurs au niveau d'un site écologique, un visiteur soit qu'il est un membre forum, administrateur (enfin il y a qu'un seule administrateur du site ).
    un membre forum "est un" visiteur.
    un administrateur "est un" visiteur.
    donc automatiquement il s'agit de l'héritage.
    Premièrement, j'ai crée une entité appelée "visteur" là où il y a par exemple:
    login,mot de passe,date de naissance....
    Deuxièmement, j'ai crée deux tables "membre_forum" et "admin" qui héritent de "visiteur",en ajoutant à chacune des attributs spécifiques.
    J'ai en plus de ces entités, des autres telles que "newsletters","evenements"...
    Un visiteur,que se soit un "membre_forum" ou un "admin" peut s'abonner à une newsletters ,participer dans un évènement..
    donc "participer" et "abonner" seront des associations entres les entités "evenement" et "newsletters" et "visiteur".
    TOUT va bien jusque là

    passons maintenant vers la création des tables, le prof m'a dit la table visiteur va disparaître, donc je dois créer deux tables à savoir "membre_forum" et " admin" avec les attributs de la table "visteur" ... OK c'est bon
    mais pour les associations "participer" et "abonner" dois-je les dupliquer, puisque les entités "newsletters" et "evenement" ont des relations("abonner" "participer") avec les entités "membre-forum" et "admin"==> 4 associations qui ont le même rôle ???!!!!
    j'espère que vous avez compris mon problème.
    voic un shéma du modèle .


    Je suis vraiment bloquée dans cette situation, je pourrais bien créer les 4 associations mais dans ce cas les bases de données ne sera pas optimale !
    Images attachées Images attachées   

  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
    le prof m'a dit la table visiteur va disparaître, donc je dois créer deux tables à savoir "membre_forum" et " admin" avec les attributs de la table "visteur" ... OK c'est bon

    D'où sort-il ce prof ?

    En bon héritage, tu devrais avoir par exemple les tables :
    visiteur_vis (vis_id, vis_login, vis_mot_passe, vis_date_naissance...)
    membre_forum_mfr (mfr_id_visiteur, attributs_specif_membre_forums)
    administrateur_adm (adm_id_visiteur, attributs_specif_admin)

    mais pour les associations "participer" et "abonner" dois-je les dupliquer, puisque les entités "newsletters" et "evenement" ont des relations("abonner" "participer") avec les entités "membre-forum" et "admin"==> 4 associations qui ont le même rôle ???!!!!
    C'est bien pour ça que ce que t'a dit le prof est faux !
    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
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    Merci bien de votre réponse!
    visiteur_vis (vis_id, vis_login, vis_mot_passe, vis_date_naissance...)
    membre_forum_mfr (mfr_id_visiteur, attributs_specif_membre_forums)
    administrateur_adm (adm_id_visiteur, attributs_specif_admin)
    mais je ne vois pas la relation(héritage ) entre le visiteur et membre_forum ,administrateur;
    est ce que mfr_id_visteur et vis_id auront les mêmes valeur pareil pour administrateur ?!

    franchement je n'ai pas bien compris, c'est comme si on a des entités qui sont carrément indépendantes

    merci de m'expliquer d'avantage

  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 hindou90 Voir le message
    mais je ne vois pas la relation(héritage ) entre le visiteur et membre_forum ,administrateur;
    est ce que mfr_id_visteur et vis_id auront les mêmes valeur pareil pour administrateur ?!
    Oui, comme le nom de la colonne l'indique ! mfr_id_visiteur est à la fois clé primaire et clé étrangère référençant l'id_visiteur de la table visiteur. Idem pour la table administrateur.

    Repartons du MCD :
    membre_forum -(1,1)----Etre----0,1- visiteur
    administrateur -(1,1)----Etre----0,1-----|

    Les cardinalités entre parenthèses signifient une identification relative des entités membre_forum et administrateur par rapport à visiteur.

    Dans le MCD, les entités ont ces attributs :
    visiteur (vis_id, vis_login, vis_mot_passe, vis_date_naissance...)
    membre_forum (attributs_specif_membre_forums)
    administrateur (attributs_specif_admin)

    Tu remarques que les entités membre_forum et administrateur n'ont pas d'identifiant propre. Elles sont identifiées relativement à visiteur, ce qui entraîne la création d'une clé primaire/étrangère lors de la création des tables.
    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
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    merci pour avoir pris le temps de me répondre


    visiteur (vis_id, vis_login, vis_mot_passe, vis_date_naissance...)
    membre_forum (attributs_specif_membre_forums)
    administrateur (attributs_specif_admin)
    les champs qui sont dans visiteurs, je ne les reprends pas dans membre_forum et administrateur,c'est bien ça ?
    Elles sont identifiées relativement à visiteur, ce qui entraîne la création d'une clé primaire/étrangère lors de la création des tables.
    je travaille sous Myphpadmin => mysql mais j'arrive pas à trouver l'option qui va me permettre de créer une clé primaire/étranger?

    Sinon, je peux utiliser des requêtes Mysql, mais est ce que cela va marcher, si je tappe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Create table membre_form(id_membre_frm_visteur primary key, les autres chacum);
    Alter table membre_form add constraint FK foreign key id_membre_frm_visteur references visiteur(id_visteur);
    que pensez-vous de cela ?

    merci beaucoup

  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
    Citation Envoyé par hindou90 Voir le message
    les champs qui sont dans visiteurs, je ne les reprends pas dans membre_forum et administrateur,c'est bien ça ?
    Les champs sont à la campagne ou dans un formulaire, pas dans une table SQL qui n'est composée que de lignes et de colonnes !
    Les trois tables seront celles que j'avais données dans un précédent message :
    visiteur_vis (vis_id, vis_login, vis_mot_passe, vis_date_naissance...)
    membre_forum_mfr (mfr_id_visiteur, attributs_specif_membre_forums)
    administrateur_adm (adm_id_visiteur, attributs_specif_admin)
    je travail sous Myphpadmin => mysql mais j'arrive pas à trouver l'option qui va me permettre de créer une clé primaire/étranger?
    Tu crées d'abord la table en définissant sa clé primaire puis tu crées la clé étrangère.
    Pour que les contraintes de clés étrangères soit mises en oeuvre dans MySQL, il faut spécifier que la table utilise le moteur InnoDB. Sous PhpMyAdmin, tu as alors une option "Gestion des relations" qui apparaît sous la liste des colonnes de la table. Et là tu peux définir ta clé étrangère.

    Sinon, je peux utiliser des requêtes Mysql, mais est ce que cela va marcher, si je tappe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Create table membre_form(id_membre_frm_visteur primary key, les autres chacum);
    Alter table membre_form add constraint FK foreign key id_membre_frm_visteur references visiteur(id_visteur);
    que pensez-vous de cela ?
    Oui ça devrait pouvoir fonctionner aussi, à condition de préciser Engine=InnoDB à la fin de chaque requête de création de table. Mais le plus simple reste de les créer avec phpMyAdmin, ce qui n'empêche pas de regarder le code de création de la table fourni par phpMyAdmin.
    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
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    merci beaucoup pour votre réponse
    Les champs sont à la campagne ou dans un formulaire, pas dans une table SQL qui n'est composée que de lignes et de colonnes !
    oui,oui j'ai mal utilisé les mots ,désolé

    j'ai fait ce que vous avez dit m'a, mais arrivant dans "gestion relation", est ce que je dois choisir EN CASCADE dans les options"DELETE" "UPDATE" ou non ?
    voir la pièce jointe, est ce que c'est bien ça je dois faire ?


    cordialement
    Images attachées Images attachées  

  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 hindou90 Voir le message
    j'ai fais ce que vous avez dit m'a, mais arrivant dans "gestion relation", est ce que je dois choisir EN CASCADE dans les options"DELETE" "UPDATE" ou non ?
    Pour DELETE oui mais pour UPDATE c'est inutile puisqu'on ne modifie jamais une clé primaire.
    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 !

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    ok vous avez bien raison

    merci pour avoir m'aider

    problème résolu !

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Points : 51
    Points
    51
    Par défaut
    une toute petite question svp :
    lorsque qu'on crée une table, qui était dans le mcd une association, donc automatiquement sa clé primaire va être composer de deux plusieures clés étrangères
    lors de la création, j'ai indiqué que la clé primaire de mon table est composée de plusieurs champs , ok c'est bon
    mais comment , dire que ces deux clés se sont des clés étrangères en même temps, ou bien ce n'est pas la peine de le mentionner ?!

  11. #11
    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
    Bien sûr que si il faut le mentionner sinon tes clés étrangères ne sont pas créées et tu perds l'intégrité référentielle.
    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 !

  12. #12
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonsoir.

    Citation Envoyé par CinePhil Voir le message
    D'où sort-il ce prof ?

    En bon héritage, tu devrais avoir par exemple les tables :
    visiteur_vis (vis_id, vis_login, vis_mot_passe, vis_date_naissance...)
    membre_forum_mfr (mfr_id_visiteur, attributs_specif_membre_forums)
    administrateur_adm (adm_id_visiteur, attributs_specif_admin)
    Certains enseignent que l'on peut créer des tables indépendantes sans créer la table mère au niveau relationnel mais uniquement dans le cas où il n'y a aucune occurrence dans le sur-type et que toutes les occurrences sont dans un et un seul sous-type (héritage avec partition).

    Cependant, ce n'est qu'une solution possible, ce n'est pas une obligation et ce n'est pas la solution que je préfère . Pour moi si on représente un héritage au niveau conceptuel, il doit être implémenté au niveau relationnel comme il se doit, sinon la représentation conceptuelle avec héritage est totalement inutile. Et qui plus est, il y a de la duplication de tables ou de clefs lorsque le sur-type est relié à d'autres entités par des associations. Bref, une "solution" à proscrire ...

    Si le SGBD n'est pas capable de gérer l'héritage lui même, il vaut mieux passer par une clef étrangère/primaire dans les tables filles tout en créant la table mère comme tu dis.

    Cordialement,
    Idriss

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

Discussions similaires

  1. [Normalisation] duplication des propriétés dans une entité
    Par switch1 dans le forum Schéma
    Réponses: 2
    Dernier message: 03/05/2009, 03h39
  2. [Tableaux] décoder des entités
    Par stehga dans le forum Langage
    Réponses: 6
    Dernier message: 16/01/2006, 12h53
  3. [CSS2] Souci d'héritage et de priorité des styles.
    Par ARRG dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 12/07/2005, 09h03
  4. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14

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