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

Merise Discussion :

Transformation d'une relation: clé primaire ou secondaire


Sujet :

Merise

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut Transformation d'une relation: clé primaire ou secondaire
    Bonjour,
    Lors du passage du modèle E/A au modèle relationnel, une régle stipule que pour les associations de type N : N, il faut créer une nouvelle relation qui contiendra :l’identifiant de la 1ère entité (CP1) et l'identifiant de la 2ème entité (CP2)
    La clé de cette nouvelle relation est formée par la concaténation de deux identifiants. Cette clé est elle une clé primaire ou secondaire ?
    on utilise la notation N1 ou N2 ?
    N1:
    R(CP1,CP2,....)
    ou N2
    R(CP1#,CP2#,....)
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    bonjour,

    La notation est R(CP1#,CP2#,....) puisque les identifiants sont hérités des entités-type concourant à la relation
    Pour autant, il s'agira bien de la clef primaire de la table issue de l'association, clef dont chaque colonne fera l'objet d'une contrainte d'intégrité pour référencer la colonne dans la table dont elle est issue.

  3. #3
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je vous renvoie au billet de mon ancien blog pour savoir quand il faut une table associative.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  4. #4
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    Je vous remercie pour vos réponses.
    Normalement c'est une clé étrangère puisque c'est une clé primaire dans une autre relation alors je comprends pas pourquoi on la définit au niveau du sgbd comme primary key ??

  5. #5
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    A -0,n----associer----0,n- B

    => Table associative dont la clé primaire est composée des clés étrangères référençant les deux tables A et B.

    Encore une fois, voir mon billet de blog cité plus haut.

    Une clé étrangère peut aussi être une clé primaire ou entrer dans la composition d'une clé primaire.

    Clé primaire : colonne ou ensemble de colonnes permettant d'identifier de manière unique chaque ligne de la table.
    Clé secondaire (ou alternative) : autre colonne ou ensemble de colonnes munies de valeurs différentes pour chaque ligne de la table.
    Clé étrangère : colonne ou ensemble de colonnes référençant une autre table et signifiant que les valeurs dans la colonne clé étrangère doivent pré-exister dans la table référencée.

    Exemples :
    tr_type_vehicule_tvh (tvh_id, tvh_code, tvh_libelle)
    => tvh_id est la clé primaire, purement technique, de type entier et auto-incrémentée.
    => tvh_code est une clé alternative car tous les codes doivent être différents. Cette colonne ferait une mauvaise clé primaire parce qu'un code peut changer au cours du temps, sera en principe de type CHAR ou VARCHAR donc plus gourmand en mémoire et plus lent à traiter qu'un entier.

    te_vehicule_veh (veh_id, veh_id_type, veh_immatriculation...)
    => veh_id est la clé primaire, purement technique, de type entier et auto-incrémentée.
    => veh_id_type est une clé étrangère référençant la table tr_type_vehicule_tvh. Les valeurs dans cette colonne doivent toutes se trouver dans la colonne tvh_id. Une valeur peut figurer plusieurs fois puisqu'il peut y avoir plusieurs véhicules de même type. Ce n'est donc pas une clé alternative.
    => veh_immatriculation est une clé alternative puisqu'il ne peut y avoir deux fois le même numéro d'immatriculation pour deux véhicules différents. La colonne sera munie d'une contrainte d'unicité.

    te_personne_prs (prs_id, prs_nom...)
    => Je ne refais pas le détail de l'explication ; j'espère que vous avez compris.

    tj_prs_posseder_veh_ppv (ppv_id_personne, ppv_id_vehicule...)
    => ppv_id_personne et ppv_id_vehicule sont deux clés étrangères référençant les deux précédentes tables.
    => l'ensemble {ppv_id_personne et ppv_id_vehicule} est la clé primaire de la table puisque chaque couple est différent (on n'enregistre ici pas deux fois le même véhicule possédé par le même propriétaire).

    PS : En toute rigueur, j'aurais dû écrire que clé primaire et clé étrangères sont des contraintes sur une colonne ou un ensemble de colonnes...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par paskal++ Voir le message
    Je vous remercie pour vos réponses.
    Normalement c'est une clé étrangère puisque c'est une clé primaire dans une autre relation alors je comprends pas pourquoi on la définit au niveau du sgbd comme primary key ??
    Bis :
    Citation Envoyé par escartefigue Voir le message
    bonjour,

    La notation est R(CP1#,CP2#,....) puisque les identifiants sont hérités des entités-type concourant à la relation
    Pour autant, il s'agira bien de la clef primaire de la table issue de l'association, clef dont chaque colonne fera l'objet d'une contrainte d'intégrité pour référencer la colonne dans la table dont elle est issue.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    C'est plus clair maintenant. Merci.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 149
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Finalement on pourrais dire qu'une clé secondaire est ce que l'on appelle par ailleurs un clé candidate ?

  9. #9
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Parmi toutes les clés candidates, il en faut une qui devient la clé primaire. Les autres deviennent des clés secondaires ou alternatives.

    Exemple...

    Soit la table de référence suivante :
    tr_civilite_civ (civ_id, civ_abreviation, civ_libelle, civ_ordre)

    civ_id est de type entier et auto-incrémentée : c'est la clé primaire.
    civ_abreviation (M., Mme, Mle, Me, Pr, Dr...) est munie d'une contrainte d'unicité et est une clé candidate qui devient clé alternative.
    civ_libelle (Monsieur, Madame, Mademoiselle, Maître, Professeur, Docteur...) est munie d'une contrainte d'unicité et est une clé candidate qui devient clé alternative.
    civ_ordre est de type entier mais pas auto-incrémentée. Elle est aussi porteuse d'une contrainte d'unicité. Cette colonne est là pour préciser dans quel ordre on présente les données dans une liste de choix sur une interface graphique. C'est donc aussi une clé candidate qui devient une clé alternative.

    Bilan : 4 clés candidates au départ ; 1 clé primaire et 3 clés alternatives (ou secondaires) à l'arrivée.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Bonsoir
    Pour les clefs, on utilise souvent le terme de "candidate" .
    Le terme "secondaire" est plutôt utilisé pour les index.
    Mais ce n'est pas une règle

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

Discussions similaires

  1. Transformer une relation 1 1 en modèle MLD
    Par Wnejla dans le forum UML
    Réponses: 4
    Dernier message: 05/06/2013, 22h28
  2. transformer une relation ternaire en MLD
    Par Wnejla dans le forum UML
    Réponses: 4
    Dernier message: 28/05/2013, 13h33
  3. [Normalisation] clé primaire d'une relation
    Par khaoula123 dans le forum Schéma
    Réponses: 1
    Dernier message: 16/01/2011, 17h31
  4. [MCD] Relation n:n grâce a une table. Clé Primaire ? MySqlWorkBench
    Par Ghostaunt dans le forum Schéma
    Réponses: 6
    Dernier message: 03/12/2010, 15h24
  5. clé primaire d'une relation
    Par abssef dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 24/05/2010, 21h29

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