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 :

Plusieurs clefs étrangères entre 2 tables [MySQL-5.5]


Sujet :

Administration MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Orne (Basse Normandie)

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

    Informations forums :
    Inscription : Août 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Plusieurs clefs étrangères entre 2 tables
    Bonjour,

    Je cherche cette info depuis quelque jour et je ne trouve pas mon bonheur . Je viens donc vers vous.

    J'ai une table communication, dans cette table j'ai 2 champs s'appelant pers_id_appele et pers_id_appelant.
    J'ai une table personne avec comme clef primaire pers_id.

    Savez-vous la commande pour déclarer les 2 clefs étrangères ?

    j'ai essayé de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ALTER TABLE communication
    ADD CONSTRAINT FK_pers_id_appele
    FOREIGN KEY (pers_id_appele) REFERENCES personne(pers_id);
     
    ALTER TABLE communication
    ADD CONSTRAINT FK_pers_id_appelant
    FOREIGN KEY (pers_id_appelant) REFERENCES personne(pers_id);
    La première fonctionne bien mais la deuxième me met une erreur.

    Merci d'avance .

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

    Ce script me semble tout à fait correct, il faut communiquer le DDL complet de création des tables (ordres CREATE TABLE) et le message d'erreur exact pour qu'on puisse vous aider.
    En l'attente, vérifiez que les colonnes référençantes et référencées sont de même type et de même longueur. C'est obligatoire.

    A noter : ce que vous appelez des "champs" sont des colonnes, il n'y a pas de champ dans une base de données.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Orne (Basse Normandie)

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

    Informations forums :
    Inscription : Août 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Finalement, lorsque tu m'as dit de bien vérifier le type, j'ai remarqué qu'il y avait des enregistrements dans les colonnes de pers_id_appelant qui n'était pas encore enregistrer. C'est-à-dire que lors de mes tests, j'avais déclarer un appelé mais pas encore l'appelant, donc la liaison ne correspondait pas.

    Désolé du dérangement .

    Si jamais voici le message d'erreur qui s'affichait lors de l'essai de l'insertion de la 2eme foreign key

    #1452 - Cannot add or update a child row: a foreign key constraint fails (`interfacetest`.<result 2 when explaining filename '#sql-bec_7002a'>, CONSTRAINT `FK_pers_id_appelant` FOREIGN KEY (`pers_id_appelant`) REFERENCES `personne` (`pers_id`))
    Merci encore !

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    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 338
    Points : 39 737
    Points
    39 737
    Billets dans le blog
    9
    Par défaut
    Effectivement, si on ajoute des contraintes sur des tables déjà chargées, le moteur vérifie que les contraintes sont valides sur toutes les lignes.
    A défaut, les contraintes violées ne peuvent pas être ajoutées.

    Une remarque supplémentaire : vous n'avez activé aucune action en cas de DELETE ou UPDATE de l'identifiant de la table référencée, c'est peut-être un oubli. A vérifier en fonction des règles de gestion.
    Par exemple : faut il autoriser la suppression d'une personne si on connait des communications qui la concernent en tant qu'appelant ou appelé
    NON : on delete restrict.
    OUI : on delete cascade ou on delete set null.

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

Discussions similaires

  1. [Normalisation] Plusieurs clés étrangères dans une table
    Par insane_80 dans le forum Schéma
    Réponses: 13
    Dernier message: 21/11/2014, 21h40
  2. Une clef étrangère sur deux tables distinctes
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/01/2014, 16h38
  3. Réponses: 4
    Dernier message: 06/02/2012, 09h55
  4. Détection de clefs étrangères sur une table
    Par Fabien Celaia dans le forum Contribuez
    Réponses: 0
    Dernier message: 08/02/2011, 18h48
  5. Création d'une clé étrangére entre 2 tables
    Par kamnouz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/01/2009, 13h43

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