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 :

Cardinalités et clés étrangères : pourquoi ?


Sujet :

Schéma

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut Cardinalités et clés étrangères : pourquoi ?
    Bonjour,
    je cherche à mieux comprendre les cardinalités entre les tables.
    Dans mon cas, j'ai idfamilleproduit qui est ajouté à la table produit et c'est l'idproduit qui est ajouté à la table photoproduit.
    J'aimerai comprendre pkoi c'est pas idphotoproduit qui est ajouté à la table produit.

    Merci pour vos eclairages
    Nom : cardinal.png
Affichages : 955
Taille : 11,1 Ko

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    C'est tout simple: si tu mets l'id de la photo dans la table produit, un produit ne pourra avoir qu'une seule photo, et une photo pourra être liée à plusieurs produits.
    Or (à mon avis), c'est tout l'inverse que tu veux.

    Un exemple concert: disons que tu as un produit "Dentifrice", et que tu veux lui associer plusieurs photos.

    Essaie avec les deux solutions, et tu verras rapidement laquelle est la bonne.

    Tatayo.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 67
    Points : 62
    Points
    62
    Par défaut
    En effet c’est aussi simple, merci tatayo

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Le plus simple et le plus prudent pour éviter les erreurs, c'est de commencer par le modèle conceptuel des données (MCD)
    En fonction des règles de gestion, on positionne les cardinalités.

    Soit par exemple les règles de gestion suivantes :
    R001 : à un produit peuvent correspondre plusieurs photos
    R002 : une photo ne correspond qu'à un et un seul produit

    Le MCD correspondant est
    Pièce jointe 589223

    Une fois le MCD créé, tout logiciel de modélisation en déduit automatiquement le MLD et donc les tables dans lesquelles les clefs étrangères se positionnent automatiquement.
    Pour le MCD ci dessus, on obtient donc en un clic le MLD ci-dessous :
    Pièce jointe 589224

    On voit que la FK PR_ident s'est positionnée toute seule comme une grande dans la table HO_photo issue du type d'entité HO_photo

    Si mes règles de gestion changent et deviennent :
    R001 : à un produit peuvent correspondre plusieurs photos
    R002 : une photo peut correspondre à plusieurs produits

    Alors le MCD devient :
    Pièce jointe 589225

    Un clic permet de générer un nouveau MLD comme suit :
    Pièce jointe 589226

    Comme il y avait une association avec des cardinalités maxi "n" de chaque coté dans le MCD, la génération du MLD a automatiquement créé une table associative dont la PK est constitué des identifiants de chacune des entité-type concourant à l'association. La PK de PR_HO est donc formée de deux FK.

    Pour créer le MCD et en dériver le MLD ou le MPD, il faut utiliser un logiciel de modélisation. Il en existe des gratuits dont l'excellent looping téléchargeable ici : https://www.looping-mcd.fr/

  5. #5
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Bonjour,

    Il est effectivement important de traiter le modèle conceptuel de données (MCD) avant de s'intéresser à la problématique des clés étrangères qui relèvent du niveau logique.
    Le modèle que vous proposez est une sorte de mélange entre un MCD et un MLD (quel logiciel utilisez-vous ?), ce qui apporte une certaine confusion.

    Suivez donc les excellents conseils d'Escartefigue en définissant les règles de gestion et en réalisant le MCD correspondant : le MLD (avec les clés étrangères) se déduira automatiquement, ainsi que les requêtes SQL de création des tables du schéma relationnel de la base de données (CREATE TABLE).

    Bonne continuation !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Paprick: d'après la capture d'écran, je dirai qu'il s'agit de "l'éditeur d'analyse" intégré dans Windev.
    C'est l'outil proposé qui permet de faire le MCD, le MLD, et d'autres trucs en plus spécifiques à Windev.
    Je ne sais pas trop ce qu'il vaut, je ne l'utilise plus depuis une bonne dizaine d'années.

    Tatayo.

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nanog Voir le message
    Bonjour,
    je cherche à mieux comprendre les cardinalités entre les tables.
    Dans mon cas, j'ai idfamilleproduit qui est ajouté à la table produit et c'est l'idproduit qui est ajouté à la table photoproduit.
    J'aimerai comprendre pkoi c'est pas idphotoproduit qui est ajouté à la table produit.

    Merci pour vos eclairages
    Nom : cardinal.png
Affichages : 955
Taille : 11,1 Ko
    Attention, ce qui me choque dans vos cardinalités, ce sont les 0,1 sur les FK

    Ici, vos produits peuvent ne pas avoir de famille (colonne FK nullable), ce qui peut arriver, mais probablement non désiré.
    Et surtout, vos photos peuvent ne pas être rattachées à un produit. Là, à mon avis, il y a maldonne...
    On ne jouit bien que de ce qu’on partage.

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

Discussions similaires

  1. Cardinalités et clés étrangères
    Par geeka dans le forum ALM
    Réponses: 0
    Dernier message: 01/09/2015, 16h36
  2. Contraintes de clés étrangères non respectées
    Par parfait dans le forum Requêtes
    Réponses: 7
    Dernier message: 28/07/2004, 12h48
  3. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  4. clé primaire composée de 2 clés étrangères
    Par Tigresse dans le forum Installation
    Réponses: 5
    Dernier message: 28/07/2003, 14h38
  5. [Script]prob de clés étrangères
    Par Seb7 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 08/07/2003, 17h37

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