Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en 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 22/11/2007, 14h41   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 40
Points : 4
Points : 4
Par défaut FOREIGN KEY vers deux tables en meme temps

Bonjour,

J'ai une table table1 qui contient 3 colones (colone1Table1,colone2Table1,valeur).
colone1Table1 fait référence à table2(colone1Table2) et colone2Table1 fait référence a table3(colone2Table3).

Il me faut les deux référence pour avoir la valeur de la table1.
Comment réaliser la construction de ma table table1?
Il me faudrait quelque chose qui ressemble à ( mais ceci ne fonctionne pas ):

Code :
1
2
3
4
5
6
7
8
9
10
CREATE TABLE table1 (
   colone1Table1 char(4) NOT NULL,
   colone2Table2 char(4) NOT NULL,
   valeur int(20) NOT NULL,
   INDEX(colone1Table1,colone2Table1),
   PRIMARY KEY(colone1Table1,colone2Table1),
   FOREIGN KEY(colone1Table1,colone2Table1) REFERENCES (table2(colone1Table2),table3(colone2Table3))
     ON DELETE CASCADE
     ON UPDATE CASCADE
) type = InnoDB;
Merci.
lichman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 16h14   #2
Expert Confirmé
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
il faut spécifier les FK une par une
Code :
1
2
3
...
FOREIGN KEY(colone1Table1) REFERENCES ...
FOREIGN KEY(colone2Table1) REFERENCES ...
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 16h52   #3
Invité de passage
 
Inscription : novembre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 40
Points : 4
Points : 4
Citation:
Envoyé par qi130 Voir le message
il faut spécifier les FK une par une
Code :
1
2
3
...
FOREIGN KEY(colone1Table1) REFERENCES ...
FOREIGN KEY(colone2Table1) REFERENCES ...
Mais alors, dans le cas contrere, comment lui faire comprendre que colone1Table1 ou colone2Table1 sont les deux références pour avoir une valeur de la table1?
lichman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2007, 15h51   #4
Invité de passage
 
Inscription : novembre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 40
Points : 4
Points : 4
Je suis etonner de voir que personne ne puisse repondre a cette question
lichman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2007, 17h23   #5
Membre confirmé
 
Jacques André
Inscription : novembre 2007
Messages : 196
Détails du profil
Informations personnelles :
Nom : Jacques André
Âge : 30

Informations forums :
Inscription : novembre 2007
Messages : 196
Points : 292
Points : 292
Envoyer un message via MSN à CIFQ_Drew
Dis moi si je comprends bien :

Tu as deux tables, par exemple Professeur et une table Administrateur. Tu veux faire une table HeureTravaillée qui peut contenir soit une référence à un Professeur ou une référence à Administrateur.

La seule solution que je vois, c'est de créer une table Travailleur qui contient toutes les informations commune à Professeur et Administrateur, puis tu référence Professeur, Administrateur et HeureTravaillée vers Travailleur.

C'est la seule solution que j'ai trouvée.
CIFQ_Drew est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2007, 19h02   #6
Invité de passage
 
Inscription : novembre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 40
Points : 4
Points : 4
CIFQ_Drew, merci d'avoir répondu.
Mais c'est pas tout a fait ca que je veux.
Dans mon cas, il y a deux colone dans la table HeureTravaillée qui contient une référence vers une valeur d'une table et une autre référence vers une valeur d'une autre table
lichman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2007, 03h11   #7
Membre confirmé
 
Jacques André
Inscription : novembre 2007
Messages : 196
Détails du profil
Informations personnelles :
Nom : Jacques André
Âge : 30

Informations forums :
Inscription : novembre 2007
Messages : 196
Points : 292
Points : 292
Envoyer un message via MSN à CIFQ_Drew
Bonjours lichman,

J'ai regarder ton code, et selon moi tu veux créer une clé primaire à partir de deux champs qui sont des références sur deux tables différentes. Selon moi, tu dois déclarer tes clés étrangères séparements comme qi130 a décrit.

Citation:
Mais alors, dans le cas contrere, comment lui faire comprendre que colone1Table1 ou colone2Table1 sont les deux références pour avoir une valeur de la table1?
Cependant, je ne comprend pas cette réponse. Peux-tu m'en dire plus ?

J'ai peut-être un cas similaire : Je construit un portail dont des Membres (une table) possède aucun ou des Services (une table). Pour déterminer les services que possède un membre, j'utilise une table SvcActif, qui n'est constitué que de deux clé étrangère : voici le code :

Code :
1
2
3
4
5
6
7
8
 
CREATE TABLE SvcActif(
  fk_svMembre VARCHAR(32) NOT NULL,
  fk_svService VARCHAR(16) NOT NULL,
  FOREIGN KEY (fk_svMembre) REFERENCES Membre(pk_mSurnom),
  FOREIGN KEY (fk_svService) REFERENCES Service(pk_seNom),
  PRIMARY KEY (fk_svMembre, fk_svService)
) ENGINE=INNODB;
Dit moi si cela t'aide.
CIFQ_Drew 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 12h25.


 
 
 
 
Partenaires

Hébergement Web