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 :

Performance Clé primaire / clé composé [MLD]


Sujet :

Schéma

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Points : 29
    Points
    29
    Par défaut Performance Clé primaire / clé composé
    Bonjour,

    J'aimerais avoir des avis concernant le choix de ma clé primaire.

    En effet, j'ai une table dont la clé primaire est composé de 3 éléments afin d'identifier un produit.

    Cette table est relié en N-M avec une autre et je me retrouve donc avec une table intermédiaire comportant 4 clé primaire + 1 afin d'identifier une relation car Il est possible qu'un même relation puisse être mise 2 fois et il me faut donc une date me permettant de les identifié.

    Enfin, sur cette table intermédiaire j'ai une dernière relation en 1-N et donc la table intermédiaire donne ces clés primaires à la dernière table qui possède donc 6 clé primaire.

    Ma question est :
    Est ce qu'il vaut mieux utiliser un id pour la première table (pour n'avoir plus qu'1 clé primaire au lieu de 3) et donc n'avoir au final que 4 clé primaire pour la dernière table ?
    Ou je laisse mon schéma comme cela en sachant que la dernière table aura une clé primaire composé de 6 colonnes ?

    Merci d'avance,

    Cordialement,

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 100
    Points : 31 536
    Points
    31 536
    Billets dans le blog
    16
    Par défaut
    Tout cela est bien tortueux et certainement simplifiable. Merci de joindre le modèle conceptuel (ou le modèle logique) correspondant, pour qu'on y voie plus clair quant à la nature des attributs participant aux clés.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Points : 29
    Points
    29
    Par défaut
    J'ai pas le modèle sur ce pc mais j'ai le modèle "métier".

    Un produit est identifié par une reference et un indice. Un produit est composé d'autre produit.
    J'ai donc une relation N-M sur cette table, et donc j'ai déjà 4 clé étrangère qui identifie la relation de composition.

    Je me demande si un identifiant permettant de trouver la ligne et qui me donnera donc une relation de composition possédant une clé primaire de 2 clé étrangère ne serais pas plus rapide au niveau performance.

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 100
    Points : 31 536
    Points
    31 536
    Billets dans le blog
    16
    Par défaut
    Ça reste aussi glauque.


    J'ai pas le modèle sur ce pc mais j'ai le modèle "métier".
    Présentez sous forme textuelle la structure des tables qui vous préoccupent (instructions CREATE TABLE).


    Un produit est identifié par une reference et un indice.
    Le mystère s’épaissit...

    Pourquoi un indice ? Qu’est-ce qu’un indice ? Qui affecte les valeurs de la référence et la valeur d’un indice ?

    Quels sont les types de ces attributs ?

    Donnez des exemples de valeurs.


    Je me demande si un identifiant permettant de trouver la ligne et qui me donnera donc une relation de composition possédant une clé primaire de 2 clé étrangère ne serais pas plus rapide au niveau performance.
    Utilisez un langage moins confus. On voit mal en quoi une relation de composition "possède" une clé primaire et en quoi une clé primaire est faite de deux clés étrangères. Sans les CREATE TABLE, on ne peut qu'essayer de comprendre ce que vous avez en tête.

    Par ailleurs, ne mélangez pas les aspects structurels (le QUOI) avec la performance des requêtes. Cet aspect performance est à prendre en considération au niveau physique (choix et structure des index).

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    J'ai pas la base de données sous la main. Je suis en déplacement.

    En gros, cela se résumerait à ca :
    article(reference (varchar), id_fournisseur (int), indice (char(1)), nom)
    article_composition( reference_pere, id_fournisseur_pere, indice_pere, reference_fils, id_founisseur_fils, indice_fils, quantité)
    fournisseur(id_fournisseur(int), nom)

    1/ 1 article possede une reference, un indice et un id_fournisseur. Ces 3 informations sont obligatoire car la reference et la fournisseur peuvent être dupliqué. Ce couple n'est pas unique et c'est pour cela que l'indice intervient.
    2/ 1 article est composé de plusieurs autre articles. Et un article peut composé plusieurs articles Donc c'est une relation N-M.
    3/ 1 article possède un seul fournisseur

  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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    article(reference (varchar), id_fournisseur (int), indice (char(1)), nom)
    J'ai du mal à comprendre pourquoi un article a besoin de l'identifiant de son fournisseur dans sa clé primaire.

    J'ai un ordinateur sur mon bureau, que celui-ci soit fourni par X ou Y ne change rien aux caractéristiques de cet ordinateur.

    Surtout que plus loin tu dis :
    3/ 1 article possède un seul fournisseur
    Cette phrase selon moi se traduit par le MCD suivant :
    Article -1,1----Posséder----0,n- Fournisseur

    Et dans ce cas, l'identifiant du fournisseur est une clé étrangère dans la table article mais n'a pas nécessairement besoin de faire partie de la clé primaire.

    De plus, une référence en varchar n'est pas une bonne clé pour une table. Elle est susceptible de changer et est plus longue à traiter par le SGBD.

    Enfin, je ne comprends pas plus que fsmrel cette notion d'indice.
    Un exemple de données nous aiderait peut-être à comprendre ?

    article_composition( reference_pere, id_fournisseur_pere, indice_pere, reference_fils, id_founisseur_fils, indice_fils, quantité)
    Ici il y a trop de choses.
    Avec un identifiant anonyme du genre id_article dans la table article, il suffirait ici de la structure suivante :
    article_composition (id_article_pere, id_article_fils, quantite)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Points : 29
    Points
    29
    Par défaut
    C'est vrai que finalement, un id_article faciliterai peut être la compréhension du schema, mais la référence seul ne peut pas être la clé primaire vu que 2 fournisseur peuvent produire 2 produit différents mais sous la même référence.

    L'indice sert a différencier un produit lorsqu'il y a une modification minime par rapport au produit original. C'est un nouveau produit mais il garde la même référence donc l'indice est plus un indice de version.

    Donc en gros, je pourrais faire simplement id_article mais si je souhaite identifié une unique ligne, c'est quand même en fonction du fournisseur + la référence produit + l'indice de version (Le coup de l'indice de version est imposé car les référence ne changeront pas). Mais bon, je pense qu'au final, je simplifierai ca en mettant directement un id et à l'affichage, je mettrais toutes les informations nécessaire pour que l'utilisateur sache quel produit il cherche.

    De plus, une référence en varchar n'est pas une bonne clé pour une table. Elle est susceptible de changer et est plus longue à traiter par le SGBD.
    Comme je te le disais, la référence ne pourra jamais changé. Mais je comprend par compte que le traitement est plus long.

    Avec un identifiant anonyme du genre id_article dans la table article, il suffirait ici de la structure suivante :
    article_composition (id_article_pere, id_article_fils, quantite)
    C'est ce que je souhaitais faire et c'est pour cela que j'aurais voulu savoir si au niveau rapidité c'était génant ou pas d'avoir une clé composé assez grande ou si je met un id transparent.


    Donc pour résumé ma problématique (que je viens juste de comprendre en vous expliquant le problème - Merci -).
    Lorsque qu'une clé primaire est composé de plus de 2 ou 3 id. Il vaut mieux mettre un id anonyme invisible à l'utilisateur ? Ou on garde la clé composé et on se fiche du nombre de colonnes nécessaire ?

  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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    2 fournisseur peuvent produire 2 produit différents mais sous la même référence
    Si ce sont deux produits différents, ils auront peut-être la même référence (chez le fournisseur) mais pas le même nom.
    C'est encore une raison qui fait que la référence de l'article n'est pas une bonne clé puisque cette référence peut ne pas être unique !

    Encore une fois, avec un exemple de tes données, ce serait plus facile pour nous de comprendre de quoi il s'agit et à t'expliquer dans ton contexte.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Points : 29
    Points
    29
    Par défaut
    Je n'ai pas d'exemple de données. J'ai juste une informations sur comment est caractérisé par une référence et un indice de version.

    Mais bon, pour simplifier, je vais régler mon problème en mettant un id anonyme pour identifier la ligne,.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Article(id, reference, indice, id_fournisseur)
    Merci beaucoup pour m'avoir guidé ,

    Sinon, au niveau performance, les clé primaire composé sont rapide niveau performance?

  10. #10
    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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par butters Voir le message
    Sinon, au niveau performance, les clé primaire composé sont rapide niveau performance?
    Ça ne devrait pas poser de problème, pour autant que les index soient bien placés.
    Dans une clé primaire (A, B, C) par exemple, seule la colonne A est indexée individuellement. Les autres ne le sont que relativement à la précédente (B par rapport à A et C par rapport à B). Il faut donc ajouter des index individuels sur les autres colonnes composant la clé.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 96
    Points : 29
    Points
    29
    Par défaut
    Ok ! merci beaucoup de la rapidité de vos réponses et de la qualités de celle-ci.

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

Discussions similaires

  1. [9.3] Performance clé primaire - table héritée
    Par denis.henkens dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 05/05/2015, 14h44
  2. Conseil clé primaire pour les meilleurs performances ?
    Par ites dans le forum Optimisations
    Réponses: 23
    Dernier message: 04/07/2008, 10h36
  3. [performances] datetime dans clé primaire, optimisation ?
    Par Raay dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/07/2007, 16h04
  4. Réponses: 6
    Dernier message: 06/10/2006, 23h15
  5. [varchar en clef primaire] perte de performances?
    Par hansaplast dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/08/2006, 20h29

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