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

Administration MySQL Discussion :

Clé étrangère avec une clé primaire sur plusieurs colonnes


Sujet :

Administration MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Transports

    Informations forums :
    Inscription : Février 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Clé étrangère avec une clé primaire sur plusieurs colonnes
    Bonjour,

    Je voudrais créer une clé étrangère sur une clé primaire à multiples colonnes.

    Voici donc un aperçu des tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    CREATE TABLE IF NOT EXISTS `contrat` (
      `Nom` char(30) NOT NULL,
      `Prenom` char(30) NOT NULL,
      `Telephone` char(10) NOT NULL,
      `NoContrat` char(10) NOT NULL,
      `DateContrat` date DEFAULT NULL,
      PRIMARY KEY (`NoContrat`),
      KEY `Nom` (`Nom`),
      KEY `Prenom` (`Prenom`),
      KEY `Telephone` (`Telephone`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
     
    CREATE TABLE IF NOT EXISTS `eleve` (
      `Nom` char(30) NOT NULL,
      `Prenom` char(30) NOT NULL,
      `Telephone` char(10) NOT NULL,
      PRIMARY KEY (`Nom`,`Prenom`,`Telephone`),
      KEY `Prenom` (`Prenom`),
      KEY `Nom` (`Nom`),
      KEY `Telephone` (`Telephone`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Et je voudrais évidement avoir une clé étrangère puis pointe de contrat à élevé.

    Je vous remercie à l'avance de votre aide.

    Steph258

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut Clé étrangère composite
    Bonsoir,

    Je n'ai pas testé le code pour votre exemple mais normalement il doit ressembler à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE contrat
      ADD 
        FOREIGN KEY (Nom, Prenom, Telephone)
          REFERENCES eleve(Nom, Prenom, Telephone);

    Prévoyez des types VARCHAR au lieu de CHAR pour les chaînes de caractères à longueurs variables (comme pour le nom d'un élève par exemple).

    Et évitez également les clés primaires de type VARCHAR.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Ce triplet est une mauvaise clef primaire.

    http://sqlpro.developpez.com/cours/clefs/


    Mettez une clef auto-incrémentée dans vos deux tables (type serial)

Discussions similaires

  1. Clé primaire sur plusieurs colonnes
    Par magicbisous-nours dans le forum Doctrine2
    Réponses: 4
    Dernier message: 03/01/2012, 14h23
  2. Réponses: 2
    Dernier message: 15/06/2011, 14h10
  3. Réponses: 6
    Dernier message: 22/02/2010, 14h05
  4. delete avec une clé primaire sur 3 champs
    Par meloo dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/10/2008, 12h49

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