Foreign key comme la declare dans mysql????

twixster Messages postés 45 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 29 novembre 2007 - 7 févr. 2006 à 16:48
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 - 9 févr. 2006 à 10:57
Bonjour

voila je fais deux table, tout les info sur un groupe, une autre avec leur cd, titre, ...

table info : idgroupe(PK),
nom,
date de debut,
...

table cd : idcd(PK),
nom cd,
nbr chansons,
idgroupe(FK)

PK = primary key
FK= foreign key

Voila en fait je voudrai savoir comment je defini ma faoreigne key? quand je cree ma base, je fais un champ idgroupe dans ma table cd?

merci pour votre aide

16 réponses

sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
7 févr. 2006 à 16:56
moi je mettrais l'id groupe dans la cle des cd
pas de cd sans groupe ou interprète

table cd :
idgroupe(PK) ,
idcd(PK),
nom cd,
nbr chansons,

mais ce n'est peut etre pas ce que tu veux faire !!
0
twixster Messages postés 45 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 29 novembre 2007
7 févr. 2006 à 17:05
je voudrai savoir dans mysql comment je declare mon champ quand ces une foreign key? comment peut il le savoir?

si je creer ma table manuellement : create table ... a la fin je sais qu'on fait foreign key (...) REFERENCES ...;

mais si on la creer dans mysql je vois pas comment on peut faire :(

ou alors je creer ma table une premiere fois, je l'extrait, et je la recrer manuellement en rajoutant foreign key ..

c'est peut etre le plus simple a moins que quelqu'un voit autre chose
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 17:05
Hello,

oui c'est ça. Si tu veux des contraintes dessus, vas voir la doc, c'est possible aussi.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
7 févr. 2006 à 17:10
Salut,

Cela dépend de ta base de donnée (MyISAM, innoDB, ...)
Mais le plus simple : tu déclares ta clef comme une donnée normale (entier positif non null)

Avec certaine bases tu peux définir des fonctions internes qui s'occupe de faire les correspondances entre les tables liées par une cléf étrangère.

Mais en règle générale, la notion de FK est plus souvent une indication de la structure de la base (donc écrite sur le papier/cahier des charges) qu'un code informatique (les fameuses fonctions sus-mentionnées).

Par contre, je ne confirme pas la proposition de sidf. Garde ta possiblité d'avoir plusieurs CD pour un même groupe... Par contre, qu'arrivera t-il si un CD est une compile de plusieur groupes ?!? (aie, aie, aie, ...)

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 17:19
Heu par contre oui, je n'avais pas du tout réflêchi à la structure, et J_G a raison : ta structure est mauvaise, mais uniquement dans le dernier cas qu'il cite : 1 cxd avec plusieurs groupes.
Parce que si on a 1 groupe => 1, n cd, la structure est ok.
On ne va pas sortir une table de jointure dans ce cas ?

tbl_groupes :
grp_id
grp_nom
etc...

tbl_cd:
cd_id
cd_nom
grp_id

ca ne gène pas.
Mais en effet, si on a 1,n groupes => 1,n cd, dans ce cas:
tbl_groupes :
grp_id
grp_nom
...

tbl_cd:
cd_nom
cd_id
...

tbl_cdgrp
cd_id
grp_id
0
twixster Messages postés 45 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 29 novembre 2007
7 févr. 2006 à 17:25
une dernier stupide question :$

ma foreigne key je la faits de ma table cd vers ma table groupe?

et quand je veux recuperer des donnee des deux table, je fais la condition where tablecd.idcd=tablegroupe.idcd;

je doit faire ca comme ca???

merci
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
7 févr. 2006 à 17:31
pour J_G
je dis une bêtise là ?

table cd :
idgroupe(PK) ,
idcd(PK),
nom cd,
nbr chansons,

il ya autant de cd qu'on veut pour un groupe non ?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 17:34
twixter => ouaip.

SELECT
grp.grp_nom, cd.cd_nom
FROM
groupes grp, cd cd
WHERE
grp.grp_id = cd.grp_id AND
grp.grp_id = 3

Par exemple.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 17:38
Mais n'oublions pas la remarque de J_G concerant LE cd contenant les titres de différents groupes...tu ne peux pas le gérer avec cette structure, hein.
0
twixster Messages postés 45 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 29 novembre 2007
7 févr. 2006 à 17:43
t'en qu'on y es, pour faire un insert, si par exemple je veux insere tout les info du groupe plus une d'un cd, je fais comment?

$requete = "INSERT INTO groupe(idgroupe,
nom,
adresse,
nbmembre,
mail
)
VALUES('',
'$nom',
'$adresse',
'$nbrmembre',
'$mail'
) ,cd (nomcd) VALUES('$nomcd')";

comme ca?
0
twixster Messages postés 45 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 29 novembre 2007
7 févr. 2006 à 17:44
oui mais c'est une simple base et les cd sont des cd content que le meme groupe par cd, pas de compil, ... mais je retient le conseil au cas ;)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
7 févr. 2006 à 17:46
sidf...
J'avais un peu mal lu !(
En fait, c'est le idgroupe en Primary Key qui m'a géné...
Une clef primaire doit être unique, idéologiquement parlant. Il en découlerait que chaque cd aurait un groupe différent (dans le cas que tu présentes).
Mais, à part ça... Tu as raison.

Pour compléter ce que dit malalam :
Dans le cas où tu cherches un cd n'étant pas (ou plus) lié à un groupe

SELECT
IF(grp.grp_nom IS NULL,'Inconnu',grp.grp_nom) AS grp_nom, cd.cd_nom
FROM cd
LEFT JOIN groupes grp ON grp.grp_id=cd.grp_id
WHERE cd.cd_id = 3

A plouch
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
7 févr. 2006 à 17:49
Insertion dans plusieur table à la fois...

Inconnue pour moi. Du moins, MySQL ne sait pas le faire :(

Donc, il faut faire deux requètes. (sauf si qq'un connait le truc... je suis preneur)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 18:07
ON UPDATE :-) Avec une contrainte sur la Fk justement lol...mais bon...
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
7 févr. 2006 à 19:49
> J_G



ok mais on doit pouvoir créer un clé sur deux champs

(primary key n'est peut être pas la bonne terminologie)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
9 févr. 2006 à 10:57
sidf :
Ah ok... Oui, c'est possible de créer une clef de deux champs.
Mais je ne vois pas trop l'intéret ici. (Faut dire que je ne m'intéresse au sujet que de loin)

malalam :
Merci pour la syntaxe ON UPDATE... Je l'utiliserai quand mon serveur cd décidera enfin à considérer MySQL 3.23 comme étant désué. (pfou... je vois les chiffres passé : 4, 5, 5.1 à 6 je saute)
0
Rejoignez-nous