Clef externe SQL

Clef externe SQL - SQL/NoSQL - Programmation

Marsh Posté le 02-03-2005 à 11:27:46    

Bonjour,  
 
Je debute plus ou moins dans le SQL, autrement dit je commence à vouloir faire des bases de données assez complexe et je me heurte à une difficulté:  
 
Je n arrive pas a faire de lien entre deux tables. Je m'esplique, j ai une table etablissement avec dedans {id, type, nom, prenom} et une table photo {id, etablissement , Portugal} et je veux relier photo->etablissementavec la table etablissement->id. comment faire ca avec phpmyadmin. Je n arrive pas a trouver comment faire ce genre de chose.  
 
 
J'ai tout de meme trouvé un bout de qq chose, que mysql accepte mais je sens pas que ca fasse quelque chose:
 
ALTER TABLE photosADD CONSTRAINT FK_etablissement FOREIGN KEY ( etablissement) REFERENCES etablissement( id) ;  
 
Je vous remercie.

Reply

Marsh Posté le 02-03-2005 à 11:27:46   

Reply

Marsh Posté le 02-03-2005 à 12:03:56    

C'est bien la commande que t'as postée.
Sinon

Citation :

{id, etablissement , Portugal}

:??:

Reply

Marsh Posté le 02-03-2005 à 12:25:55    

oui escuse moi je voulais mettre pays.
 
D'accord c est donc bien la commande que j ai posté, mais j ai du mal a l'utilisé car d'apres l exemple que j ai trouvé je devrais mettre: FK_... je comprends pas pourquoi rajouter ce FK_
 
Sinon je marque la synthaxe, si tu pouvais me reprendre si je me trompe.
 
ALTER TABLE 'table_fils' CONSTRAINT FK_'occurence_fils' FOREIGN KEY ('encore une fois occurence fil?????') REFERENCES 'table_pere' ('occurence_pere');
 
Autre question, une fois que c'est fait, via phpmyadmin, ai-je la possibilité de voir ce lien?
Aussi, j 'ai cru comprendre qu il existait des contrainte comme: Nous ne pouvons pas supprimé la table du pere pere si la table du fils existe tjrs. Pourtant moi j ai eu l impression que la suppression etait possible. Peut-etre est-ce parce que le lien n avais pas pu se faire du a une erreur (le FK_ par exemple)
 
J'espere avoir été le plus clair possible.
 
Merci

Reply

Marsh Posté le 02-03-2005 à 13:50:05    

ALTER TABLE photosADD CONSTRAINT FK_etablissement FOREIGN KEY ( etablissement) REFERENCES etablissement( id) ;  
 
En fait tu rajoutes par cette instruction une contrainte d'intégrité sur le champ etablissementde la table photos ...
 
Ainsi pour insérer ou mettre à jour
ton champ etablissement niveau toujours de ta table photos,
il faudra que ce champ existe dans id niveau de ta table etablissement sinon tu auras un message d'erreur ...  
 
C en fait un contrôle automatique que tu mets
en place au niveau de ta table photos qui empêchera de mettre n'importe quoi dans ton champ etablissement ...
 
En plus de cela il te sera impossible de supprimer un id
de ta table etablissement si celui-ci est utilisé dans
ta table photos champ etablissement ...
 
 
C plus clair ?


Message édité par vttman2 le 02-03-2005 à 13:50:59
Reply

Marsh Posté le 02-03-2005 à 13:58:27    

creusois a écrit :

oui escuse moi je voulais mettre pays.
 
D'accord c est donc bien la commande que j ai posté, mais j ai du mal a l'utilisé car d'apres l exemple que j ai trouvé je devrais mettre: FK_... je comprends pas pourquoi rajouter ce FK_
 
Sinon je marque la synthaxe, si tu pouvais me reprendre si je me trompe.
 
ALTER TABLE 'table_fils' CONSTRAINT FK_'occurence_fils' FOREIGN KEY ('encore une fois occurence fil?????') REFERENCES 'table_pere' ('occurence_pere');
 
Autre question, une fois que c'est fait, via phpmyadmin, ai-je la possibilité de voir ce lien?
Aussi, j 'ai cru comprendre qu il existait des contrainte comme: Nous ne pouvons pas supprimé la table du pere pere si la table du fils existe tjrs. Pourtant moi j ai eu l impression que la suppression etait possible. Peut-etre est-ce parce que le lien n avais pas pu se faire du a une erreur (le FK_ par exemple)
 
J'espere avoir été le plus clair possible.
 
Merci


le FK_machin c'est le nom de la contrainte que tu vas créer, on met FK_ + nom du champ par convention mais tu peux aussi bien mettre tartanpion ça ira aussi. Par contre vu que c'est un nom, ton FK_'machin' n'est pas valide, FK_machin est bon par contre.

Reply

Marsh Posté le 02-03-2005 à 14:02:11    

C'est exactement ce dont j'ai besoin. Je commence a voir le bout du tunnel, je te remercie beaucoup pour ton aide.
 
Reste juste une petite question (et oui encore et toujours la der des der). Est-ce que je vois ce lien dans mon administration de base de donnée sql? J'utilise le tres connu phpmyadmin.

Reply

Marsh Posté le 02-03-2005 à 14:04:02    

glod 2 a écrit :

le FK_machin c'est le nom de la contrainte que tu vas créer, on met FK_ + nom du champ par convention mais tu peux aussi bien mettre tartanpion ça ira aussi. Par contre vu que c'est un nom, ton FK_'machin' n'est pas valide, FK_machin est bon par contre.


 
Oki merci bien pour tes esplications, pas de probleme je met pas les simples cotes entre "machin"

Reply

Marsh Posté le 02-03-2005 à 23:31:57    

Bonsoir
 
Donc j'ai bien fait mes requetes qui ont été accepté sans probleme. Seulement je voudrais savoir si j'ai un moyen de bien visualiser les clefs externes que j'ai créé via phpmyadmin. Car apres les avoir créé, j'ai voulu sauvegarder ma base de donnée dans un fichier texte (la structure), et je retrouve bien les tables et les differents champs, mais je ne trouve null par trace des liens que j'ai fait.
 
Je me pose alors la question, à savoir si j'ai bien fait les liens, auquels cas, ils ne sont pas "transportables" dans un fichier sql de sauvegarde de structure. Ou bien alors je n'ai pas réussi a faire mes liens.
Une autre possibilité serait aussi qu'une case a coché est indispensable pour bien sauvegarder la structure et les liens externes.
 
Merci

Reply

Marsh Posté le 03-03-2005 à 22:18:28    

En parcourant les forums, j'ai lu qu il fallait aussi que le format de nos tables soit en BERKELEY DB, qq pourrait m'en dire un peu plus?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed