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

Outils MySQL Discussion :

Foreign Key avec MySQL / phpMyAdmin ?


Sujet :

Outils MySQL

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Foreign Key avec MySQL / phpMyAdmin ?
    Bonjour,

    je débute dans la conception des bases sous MySQL 5 / phpMyAdmin 2.9.0.3
    Et je me retrouve confronté à un problème avec les foreign key car je ne vois pas comment faire pour les mettre.

    J'ai 3 tables :
    groupe
    id_groupe
    nom
    id_ville

    personne
    id_personne
    nom
    id_groupe

    ville
    id_ville
    cp
    nom

    Comment faire pour avoir mon intégrité référentielle ?
    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Premièrement il faut absolument que le type de tables soit de l'innodb

    Ensuite tu crées tes tables et tes champs

    Puis tu cliques sur la table ou tu veux créer tes foreign keys.

    La page de structures s'ouvre, au centre tu as un lien ce nomment
    "gestion des relations"

    tu cliques dessus et là tu renvoies tes champs vers ceux des autres tables pour ainsi créer tes foreign key.

    Par contre il faut absolument que tu es définis un index (vulgairement une clef) sur ce champs dans ta table ou tu veux creer le lien.

    table A
    id
    test B

    table B
    id
    test


    ainsi test B est une foreign key de test de la table B
    donc en résumé
    table A et table B doivent être créées sous le moteur InnoDB
    et test B dans la table A doit être définie comme une clef pour ensuite faire le lien avec test B de table B

    Bonne chance

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    bon, j'avance... en faite, j'était en MyISAM au lieu d' innoDB.
    Cependant, je n'y arrive toujours pas...
    Maintenant je vois bien le bouton "Gestion des relations" mais je ne vois pas comment cela marche.

    Pour la table groupe :
    id_groupe>XXX
    nom>XXX
    adresse>Aucune clef n'est définie !
    id_ville>Aucune clef n'est définie !

    avec à la place des XXX une liste déroulante contenant :
    groupe->id_groupe
    groupe->nom
    groupe->id_ville
    personne->id_personne
    personne->id_groupe
    ville->id_ville
    ville->nom

    Donc, j'aimerais relier groupe.id_groupe à ville.id_ville. Pour cela, il faudrait modifier B]groupe.id_groupe[/B] en clé de type INDEX ?

    Et pourquoi la liste déroulante propose des champs de la même table :groupe->id_groupe, groupe->nom, groupe->id_ville ?

    ou même pourquoi la liste déroulante propose les champs groupe->nom et ville->nom alors qu'ils ne sont pas de type clé primaire ?


  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    J'avoue que je n'ai pas regardé dans le détail comment ca fonctionnait!!

    Par contre je peux répondre à certaine question

    Donc, j'aimerais relier groupe.id_groupe à ville.id_ville. Pour cela, il faudrait modifier B]groupe.id_groupe[/b] en clé de type INDEX ?

    Non pas du tout!
    il faut modifier groupe.id_ville pour créer un index dessus de sorte que :
    id_ville>Aucune clef n'est définie !
    devienne id_ville>XXX

    Et pourquoi la liste déroulante propose des champs de la même table :groupe->id_groupe, groupe->nom, groupe->id_ville ?

    Ce menu gère les relations, tu peux donc gérer tous types de relations même vis-à-vis de champs de la même table !!!

    ou même pourquoi la liste déroulante propose les champs groupe->nom et ville->nom alors qu'ils ne sont pas de type clé primaire ?

    Simplement parce qu'une foreign key ne pointe pas forcement vers une contraine de clef primaire. elle peut pointer vers d'autres types de champs!!!

    Bonne continuation

  5. #5
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    ok merci beberd,

    bon j'ai finalement tout supprimé pour tout refaire en SQL...
    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
    24
    25
    26
    27
    CREATE TABLE `ville` (
      `id_ville` smallint(5) unsigned NOT NULL auto_increment,
      `cp` smallint(5) NOT NULL,
      `nom` varchar(255) NOT NULL,
      PRIMARY KEY (`id_ville`),
      UNIQUE KEY (`nom`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    CREATE TABLE `groupe` (
      `id_groupe` smallint(5) unsigned NOT NULL auto_increment,
      `nom` varchar(100) NOT NULL,
      `adresse` varchar(255) NOT NULL,
      `id_ville` smallint(5) unsigned NOT NULL,
      PRIMARY KEY (`id_groupe`),
      UNIQUE KEY (`nom`),
      FOREIGN KEY (`id_ville`) REFERENCES `ville` (`id_ville`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    CREATE TABLE `personne` (
      `id_personne` mediumint(8) unsigned NOT NULL auto_increment,
      `nom` varchar(255) NOT NULL,
      `prenom` varchar(255) NOT NULL,
      `id_groupe` smallint(5) unsigned NOT NULL,
      PRIMARY KEY  (`id_personne`),
      KEY (`nom`),
      FOREIGN KEY (`id_groupe`) REFERENCES `groupe` (`id_groupe`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    En faite, il me manqué unsigned du coté d'une clef étrangère...
    Merci

    @+

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

Discussions similaires

  1. Problème foreign key avec hibernate
    Par souhait dans le forum Hibernate
    Réponses: 5
    Dernier message: 05/09/2008, 15h23
  2. Foreign Key avec "filtre données"
    Par plalm dans le forum Oracle
    Réponses: 0
    Dernier message: 01/05/2008, 09h11
  3. probleme foreign key avec clé composée
    Par jccanut dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2007, 13h05
  4. Foreign Key sur Mysql
    Par lemagicien dans le forum Outils
    Réponses: 1
    Dernier message: 23/09/2005, 13h39
  5. foreign key dans mysql
    Par guillevin dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 08/04/2004, 15h07

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