Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2006, 11h17   #1
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
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
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2006, 12h18   #2
Membre du Club
 
Inscription : novembre 2006
Messages : 120
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 120
Points : 55
Points : 55
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
beberd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2006, 12h27   #3
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
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 ?

Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2006, 12h54   #4
Membre du Club
 
Inscription : novembre 2006
Messages : 120
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 120
Points : 55
Points : 55
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
beberd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2006, 15h59   #5
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
ok merci beberd,

bon j'ai finalement tout supprimé pour tout refaire en SQL...
Code :
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

@+
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h46.


 
 
 
 
Partenaires

Hébergement Web