Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/09/2010, 21h54   #1
pierrot10
Débutant
 
Inscription : mai 2005
Messages : 2 066
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2005
Messages : 2 066
Points : 641
Points : 641
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!
pierrot10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2010, 15h46   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 568
Points : 25 568
Envoyer un message via MSN à CinePhil
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) !

Citation:
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.

Citation:
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)

Citation:
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.

Citation:
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.

Citation:
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.

Citation:
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/09/2010, 10h36   #3
pierrot10
Débutant
 
Inscription : mai 2005
Messages : 2 066
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2005
Messages : 2 066
Points : 641
Points : 641
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!
pierrot10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h16.


 
 
 
 
Partenaires

Hébergement Web