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

Langage SQL Discussion :

[QST] Clef composée et primary key pas bien ?


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    556
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 556
    Points : 1 198
    Points
    1 198
    Par défaut [QST] Clef composée et primary key pas bien ?
    Bonjour à tous,

    J'ai eu récemment des remarques concernant de mauvaise habitudes que j'ai lorsque que je crée une base de donnée... Je voulais juste une explication claire afin de comprendre le pourquoi...

    De manière systématique, lorsque j'ai une relation n-n entre 2 tables, je crée une clef composée ET un clef primaire...
    Or on me dit que c'est une hérésie de crée une clef primaire, et que la clef composée est là pour ça...

    Sur un exemple concret cela donne ceci :
    - une table Nom (IdNom, Nom)
    - une table Prenom (IdPrenom, Prenom)
    - une table NomPrenom (IdNomPrenom, IdNom, IdPrenom, DateDeNaissance)

    A la question pourquoi j'ai crée un IdNomPrenom ? La réponse est simplement par commodité... Lorsque plus tard je cherche un enreg pour un udpate ou delete... Je trouve ça plus commode (et plus rapide) de retenir dans l'appli un IdNomPrenom qu' IdNom+IdPrenom... surtout si ma clef composée et construite à partir de plus de 2 champs... Et je rajouterais aussi lors de traitement par lot d'enreg.. un IN(IdNomPrenom1,IdNomPrenom2,...) est, il me semble, plus facile à maintenir et comprendre... non ?

    Bref... Merci de m'éclairer sur ce point.

  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 : 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
    Avec ton système, rien n'interdit au couple nom + prénom d'exister plusieurs fois, ce que apparemment tu ne souhaites pas.
    Avec une clé primaire composée, ça n'arrivera jamais.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    En général, j'utilise également une clé primaire d'un seul champs numérique, et j'ajoute des contraintes d'unicité s'il y a lieu.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    556
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 556
    Points : 1 198
    Points
    1 198
    Par défaut
    Mais si je garde mon exemple plus haut... et que je défini comme clef primaire composée "IdNom+IdPrenom+DateDeNaissance"

    Est-ce que le fait de rajouter une clef primaire (simple) idNomPrenom est simplement disgracieux et fait double emploi avec la clef primaire composée, où y'a t'il un réel impact de performance ?

    Parce qu'après au niveau requête (selon la complexité), je trouve que c'est fastidieux de se trainer tout le long 3 valeurs au lieu d'une (IdNomPrenom)....

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Deux clés primaires sur une même table?
    Le sgbd va te jeter, utilise les contraintes d'unicité.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    J'ai tendance à rajouter une clef numérique lorsque je vais utiliser cette information dans d'autres tables.

    Si c'est juste une table de corrélation (n,n), je laisse la clef naturelle.

    Mais je ne pense pas qu'il soit possible (ni même judicieux) d'établir des règles d'or, l'important reste la cohérence et la qualité de vos données qui sont respectées dans les deux cas (avec une contrainte d'unicité supplémentaire si vous optez pour la clef non naturelle).

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Un petit article pas trop mal, mais en anglais :
    http://decipherinfosys.wordpress.com...r-primary-key/

  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
    Un exemple classique qui montre qu'on peut passer du cas normal (clé primaire double) au cas dévié (identifiant + contrainte d'unicité) : l'association entre les commandes et les produits.
    Mais on verra qu'en fait on transforme ici l'association en entité, ce qui justifie le passage au cas dévié.

    Règle de gestion :
    "Une commande contient de 1 à plusieurs produits et un produit peut faire partie de zéro à plusieurs commandes"

    MCD :
    Commande -1,n----Contenir----0,n- Produit

    Tables :
    Commandes (C_Id, ...)
    Produits (P_Id, ...)
    Contenir (CP_IdCommande, CP_IdProduit, CP_Quantite, ...)

    Nouvelle règle de gestion :
    "Une commande peut être livrée partiellement en raison d'une quantité de produit insuffisante en stock.
    Une livraison concerne une à plusieurs lignes d'une commande en précisant à chaque fois la quantité."

    Modification et complément du MCD :
    Commande -1,n----Contenir----1,1- LigneCommande -1,1----Concerner----0,n- Produit
    Livraison -1,n----Concerner----0,n-----------|

    Modification et complément des tables :
    Commandes (C_Id, ...)
    Produits (P_Id, ...)
    LigneCommande (LC_Id, LC_IdCommande, LC_IdProduit, CP_QuantiteCommandee, ...) avec contrainte d'unicité sur le couple (LC_IdCommande, LC_IdProduit)Livraison (L_Id, ...)
    Concerner (LLC_IdLivraison, LLC_IdLigneCommande, LLC_QuantiteLivree, ...)

Discussions similaires

  1. [2014] PRIMARY KEY ne se suivent pas
    Par sky1414 dans le forum Développement
    Réponses: 1
    Dernier message: 12/05/2015, 09h35
  2. [2012] Primary key - Clé combinée ou pas?
    Par vinch999 dans le forum Développement
    Réponses: 9
    Dernier message: 02/02/2015, 11h59
  3. Trigger PRIMARY KEY ne fonctionne pas
    Par DUALTECH dans le forum InterBase
    Réponses: 4
    Dernier message: 31/05/2012, 16h06
  4. Réponses: 2
    Dernier message: 01/12/2010, 10h59
  5. Composed primary key
    Par *alexandre* dans le forum Hibernate
    Réponses: 1
    Dernier message: 17/02/2009, 13h54

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