Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Débutant
    Profil pro
    Inscrit en
    mai 2005
    Messages
    2 249
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2005
    Messages : 2 249
    Points : 670
    Points
    670

    Par défaut Quels sont les différents types de relations (liaisons)

    Bonjour,

    Je suis pas trop pro dans MySQL surtout en ce qui concerne les liaisons.
    Pourtant je me lance dans un gros projet qui est pour moi l'occase d'en apprendre un peu plus.

    Je viens des découvrir MySQL Workbrench
    http://wb.mysql.com/
    pour modéliser ma base de données et je trouve ceci super utile pour l'implémentation de la base de données.

    Malgré ceci, je peine sur les relations entre mes tableaux et je dois vraiment me concentrer afin de faire au mieux dès le départ.

    Alors j'aimerais vous poser deux trois questions :
    Quelles sont les différences entre les relations
    1) 1:1(non-identfying relation) ----
    2) 1:n (non-identifying relation) ---<-
    3)1:1 (identifying relation) ___
    4) 1:n (identifying relation) ___<_
    5) n:m (identifying relation) _>__<_

    Mais ça, c'est dans la modélisation.

    Ensuite dans mon code, je dois aussi faire des JOIN si les relations sont déjà fait au niveau de la modélisation de la base, avec MySQL workbrench? Car cette dernière application va générer le code MySQL que je vais pourvoir utiliser pour générer ma base de données.

    Pourriez-vous m'éclaircir?

    Mille mercis
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 50
    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 : 13 713
    Points : 25 575
    Points
    25 575

    Par défaut

    Citation Envoyé par pierrot10 Voir le message
    Malgré ceci, je peine sur les relations entre mes tableaux
    Dans une base de données SQL, il n'y a pas de tableaux mais des tables, elles-même composées de lignes et de colonnes (et pas de champs) !

    1) 1:1(non-identfying relation) ----
    Soit une base de données qui enregistre des informations sur projets.

    Règle de gestion :
    Un projet est dirigé par un seul chef de projet et un chef de projet ne peut diriger qu'un projet à la fois.

    MCD : (Modèle Conceptuel de Données, de la méthode Merise)
    Chef_projet -0,1----Diriger----1,1- Projet

    Les notons sémantiques de projet et de chef de projet sont indépendantes. On n'identifie pas un projet relativement à son chef de projet ni un chef de projet relativement à son projet. La suppression de l'un n'entraîne pas la suppression de l'autre.

    Dans le formalisme de MySQL Workbench, ça donnerait ceci :
    Chef_projet -o|- - - - -||- Projet

    Nota 1 : on est ici dans un cas 0:1 (non-identifying relation) mais qui se fait avec le même outil et en changeant une propriété de la relation : il suffit de décocher Mandatory dans l'onglet Foreign keys de la relation.

    Tables :
    Chef_projet (cpj_id...)
    Projet (prj_id, prj_id_chef_projet...)

    Clé primaire soulignée et clé étrangère en italique.

    Nota 2 : Pour respecter le fait qu'un chef de projet ne peut diriger qu'un seul projet à la fois, il faut un index UNIQUE sur prj_id_chef_projet.

    2) 1:n (non-identifying relation) ---<-
    Restons avec nos projets...

    Règle de gestion :
    Un projet fait travailler de une à plusieurs personnes et une personne peut travailler sur un seul projet à la fois.

    MCD :
    Personne -0,1----Travailler----1,n- Projet

    MySQL Workbench :
    Personne >o- - - -||- Projet

    Nota : Idem cas précédent, on est sur une relation 0:n.

    Tables :
    Projet (prj_id, prj_id_chef_projet...)
    Personne (prs_id, prs_id_projet)

    3)1:1 (identifying relation) ___
    Nous avions dans les cas précédents des chefs de projets et des personnes. Les chefs de projets ne sont-ils pas eux-même des personnes ?

    Règle de gestion :
    Une personne peut être un chef de projet et un chef de projet est une personne.

    MCD :
    Chef_projet -(1,1)----Etre----0,1- Personne

    MySQL Workbench :
    Chef_projet -||--------|o- Personne

    Nota 1 : Notez les cardinalités entre parenthèses qui matérialisent l'identification relative.

    Tables :
    Personne (prs_id...)
    Chef_projet (prs_id_personne...)

    Nota 2 : Le chef de projet est identifié relativement à la personne donc l'identifiant du chef de projet est celui de la personne. prs_id_personne est ainsi à la fois clé étrangère et clé primaire.

    4) 1:n (identifying relation) ___<_
    Changeons de domaine, quoique ça puisse être relié à ce qui précède (je vous laisse chercher par quel type de relation ) en regardant du côté des commandes...

    Règle de gestion :
    Une commande est composée de une à plusieurs lignes et une ligne de commande entre dans la composition d'une seule commande.

    MCD :
    Commande -1,n----Composer----(1,1)- Ligne_commande

    MySQL Workbench :
    Commande -||---------|< Ligne_commande

    Tables :
    Commande (cmd_id...)
    Ligne_commande (lc_id_commande, lc_num_ligne...)

    Nota : La ligne de commande est identifiée relativement à la commande, l'identifiant de la commande participe donc à la clé primaire de la table ligne_commande. Cette clé primaire est complétée par le numéro de la ligne dans la commande.

    5) n:m (identifying relation) _>__<_
    Revenons à nos projets...

    Règle de gestion :
    Un projet peut faire intervenir plusieurs sous-traitants et un sous-traitant peut intervenir sur plusieurs projets.

    MCD :
    Sous-traitant -0,n----Intervenir----0,n- Projet

    MySQL Workbench :
    Sous-traitant -||----|< Intervention_sous_traitant >|----||- Projet

    Tables :
    Projet (prj_id...)
    Sous-traitant (str_id...)
    Intervention_sous_traitant (ist_id_projet, ist_id_sous_traitant...)

    Nota :
    La clé primaire de la table associative Intervention_sous_traitant est composée des identifiants des deux tables entrant en jeu dans l'association.

    Ensuite dans mon code, je dois aussi faire des JOIN si les relations sont déjà fait au niveau de la modélisation de la base, avec MySQL workbrench? Car cette dernière application va générer le code MySQL que je vais pourvoir utiliser pour générer ma base de données.
    Oui. Les JOIN interviennent pour joindre les tables dans les requêtes faites sur la BDD après sa création.

    Par exemple, quelles sont les noms des chefs de projets de tous les projets ?
    Code :
    1
    2
    3
    SELECT prj.prj_nom_projet, prs.prs_nom AS nom_chef_projet, prs.prs_prenom AS prenom_chef_projet
    FROM projet AS prj
    INNER JOIN personne AS prs ON prs.prs_id = prj.prj_id_chef_projet
    Nota :
    Comme le chef de projet est identifié relativement à la personne, on peut directement joindre les tables projet et personne sans passer par la jointure entre projet et chef_projet !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Débutant
    Profil pro
    Inscrit en
    mai 2005
    Messages
    2 249
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2005
    Messages : 2 249
    Points : 670
    Points
    670

    Par défaut

    Merci pour ta super grande réponse. Il y a deux trois point que j'ai pas trop compris, mais dans tous les cas tu m'a bien écaircit.
    Je vais encore étudier tout ceci.
    Merci!
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •