Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec 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 15/06/2006, 17h02   #1
Membre du Club
 
Avatar de PuppeT mAsTer
 
Inscription : juin 2006
Messages : 104
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juin 2006
Messages : 104
Points : 41
Points : 41
Par défaut gérer clé externe dans mysql ?

Bonjour à tous, je suis en train de réaliser une base de données pour gérer un site (ses membres, leurs messages, leurs fichiers etc..)
et j'ai voulu donc me mettre MySQL pour faire ma base de données. J'ai réalisé celle-ci sur papier comme lorsque je travaille sous Access seulement j'ai un problème par rapport au clé externe ou étrangère, qui font donc le lien entre 2 tables. En effet sous Access il suffit de les intégrer à la table dont la cardinalité maximale est la plus petite de celles des 2 tables et ensuite on les relie lorsque on en a besoin pour les requêtes avec les flèches
Seulement ne voulant pas recommencant dix fois mon travail, j'aimerai savoir si sous MySQL il faut aussi intégrer les clé externes à la table dont la cardinalité maximale est la plus petite ou si il faut réaliser autre chose et si c'est le cas quoi?

Merci de vos réponses

PM
PuppeT mAsTer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 17h16   #2
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Salut,
Vu que je ne connais pas du tout Access je n'ai pas bien compris. Ce que tu veux c'est par exemple trouver un fichier dans une table fichiers appartenant à un certain utilisateur d'une autre table? Si c'est ça ajoute un champ unique_id dans les deux tables pour faire les correspondances.
Sinon tu peux réexpliquer sans trop parler d'Access ?
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 17h22   #3
Membre du Club
 
Avatar de PuppeT mAsTer
 
Inscription : juin 2006
Messages : 104
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juin 2006
Messages : 104
Points : 41
Points : 41
en clair si une requête me demande d'utiliser plusieurs de mes tables, mes tables doivent et sont reliés entre elle, par des clés communes, et quand je construis mon MRD j'ai des clés primaire dans mes tables (une par table) et des clés externe dans certaines tables (qui sont les clés primaire d'autres tables).
Donc j'aimerai savoir comment je traduis ça dans MySQL, apparement tu me dis que je dois mettre mes clés externes, comme des clés primaire de la table, est ce la solution ?
PuppeT mAsTer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 19h38   #4
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Bein si tu as compris je ne vois que ça comme solution.
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 09h26   #5
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
sous mysql tu fais ca avec des clés etrangere mais il faut que tes tables soit de type innodb
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 09h39   #6
Membre du Club
 
Avatar de PuppeT mAsTer
 
Inscription : juin 2006
Messages : 104
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juin 2006
Messages : 104
Points : 41
Points : 41
peux tu développer pour un débutant MySQL stp boo64 ? merci d'avance

PM
PuppeT mAsTer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 09h57   #7
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
En fait c'est pareil que sous access.
Tu crées ta clé primaire dans ta table A. Et dans la table B, tu la recrées sous forme de clés étrangères. Ce que voulait dire Boo , corrige moi si je me trompe , c'est de rajouter une contrainte.
Comme dans l'exemple ci dessous:
Code :
1
2
3
4
5
6
7
8
CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
 
                 CONSTRAINT FK_Parent  FOREIGN KEY (parent_id) REFERENCES parent(id)
 
) ENGINE=INNODB;
En fait, ca permet de s'assurer que la base restera conforme.
Tu peux par exemple rajouter des clauses ON DELETE etc... pour gérer le comportement de ta table en cas de suppréssion de ta clé.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 09h59   #8
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
http://omiossec.developpez.com/mysql/innodb/

lis ca pour commencer et si tu ne connais pas le principie des clés étrangeres c'ets exactement le meme principe que pour access je pense c'est clé permettent dassurer l'integriter de ta base :
voila un exemple de cretiond e ta table avec clé étrangere:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$req4="CREATE TABLE `appel` (
  `apnum` int(11) NOT NULL default '0',
  `apnom` varchar(30) NOT NULL default '',
  `aptyp` varchar(12) NOT NULL default '',
  `apmod` varchar(7) NOT NULL default '',
  `apseri` int(12) NOT NULL default '0',
  `apagt` char(2) NOT NULL default '',
  `apstat` char(3) NOT NULL default '',
  `aptecf` int(11) NOT NULL default '0',
  PRIMARY KEY  (`apnum`),
  KEY `apagt` (`apagt`),
  KEY `aptecf` (`aptecf`),
  KEY `apseri` (`apseri`),
  CONSTRAINT `appel_ibfk_6` FOREIGN KEY (`apagt`) REFERENCES `listelieu` (`idas`),
  CONSTRAINT `appel_ibfk_7` FOREIGN KEY (`aptecf`) REFERENCES `listetech` (`idtech`)
) TYPE=InnoDB";
comme tu le vois le champ apagt de ma table appel est une clé étrangere du champ idas de ma table listelieu

si t'as des questiuons n'hésite pas

edit: oui raideman c bien ça
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h11.


 
 
 
 
Partenaires

Hébergement Web